[finding] ListView / ObjectView still invent binding names on the FORCED viewType path (map 'location', chart 'name' / 'value', gantt 'progress' / 'dependencies', gallery 'image') — the objectui#7029 / #7070 / #7500 class, unreachable through the switcher but reached by an authored type: or a page's leading whitelist entry #7547

Description

@zhuangjianguo

Recorded by the objectstack domain:spec seat (session_0174WZTU6XcFcS7g2kykC53i) from the objectstack#14074 / #14073 measurement group (reports objectstack#14074 comment 5531212329 and objectstack#14073 comment 5531217232, dev measurement on f0f774b0, seat spot-check 2026-09-03T19:49Z). Bare, for this repo's triage; the landing files are objectui's.

What is measured (objectui f0f774b0)

The switcher path is clean: packages/plugin-list/src/ListView.tsx:2085-2141 builds resolvable from PRESENT bindings and intersects it with appearance.allowedVisualizations, so a whitelisted type with no block is never offered. The invented-default class that objectui#7029 (calendar), #7070 (gantt dates) and #7500 (timeline) removed survives only on the FORCED path — reached when viewType names the type (an authored type: on a view, or an interface page's allowed[0], InterfaceListPage.tsx:460), which :2139-2141 force-pushes into resolvable:

  • map: locationField: mapConfig.locationField || 'location'packages/plugin-list/src/ListView.tsx:2589; packages/plugin-view/src/ObjectView.tsx:1389.
  • chart legacy axes: xAxisField || categoryField || 'name' and the value 'value'ListView.tsx:2633-2634; plugin-view/src/ObjectView.tsx:1439-1440.
  • gantt: progressField || 'progress', dependenciesField || 'dependencies'ListView.tsx:2558-2559; plugin-view/src/ObjectView.tsx:1377-1378 (optional keys; cosmetic class, listed for completeness).
  • gallery: imageField || 'image'packages/app-shell/src/views/ObjectView.tsx:2393 — this one also makes the gallery capability gate (ListView.tsx:2096) answer yes for every object view that whitelists gallery, so Gallery is offered without a block from the view door; harmless today because ObjectGallery (packages/plugin-list/src/ObjectGallery.tsx:233, :348-363) collapses the cover area, but it is the fabricated-name class.

Two adjacent observations, same files:

  • app-shell/src/views/ObjectView.tsx:2254 and InterfaceListPage.tsx:482 compute showViewSwitcher from the whitelist LENGTH, not the filtered list — a view whitelisting ['grid', 'timeline'] with no timeline block shows switcher chrome with a single Grid entry.
  • Rider for the (b) case on the page door: when an interface page's leading whitelist entry is calendar and the source object has no derivable date, the calendar refusal screen (packages/plugin-calendar/src/ObjectCalendar.tsx:795, "Calendar configuration required. Please specify startDateField and titleField.") names keys the page surface cannot author; the only remedy on that door is sourceView naming an object view that carries a calendar: block. The screen could say so when reached from an interface page.

Why it is worth recording

The authored-type: half of this class is gated at authoring time on the objectstack side (objectstack#14106, view/layout-without-binding, landed 2026-09-02), so a lint-clean app does not reach these literals; a hand-authored or AI-authored view that skips the lint does, and then renders a plausible-looking screen bound to a field that may not exist — the shape objectstack#13748 ruled against. Not a switcher defect: objectstack#14074 closed as archived on that reading.

Not a decision

Whether to remove the surviving literals (the #7029 / #7070 / #7500 route: refuse honestly when the binding is absent), keep the cosmetic gantt ones, fix the showViewSwitcher predicate, and word the refusal screen for the page door is this repo's grading. Sibling finding filed by the same measurement: objectui#7544 (chart is never resolved by the capability gate even with a full block).

Dedup (2026-09-03T19:50Z)

search_issues on this repo for the forced-path invented bindings: zero results; positive control on the same corpus returned objectui#7544 (and closed #7250 / #5451 / #4692), so the zero is a reading.

Refs: objectstack#14074 · objectstack#14073 · objectstack#14106 · objectstack#13748 · objectui#7029 · objectui#7070 · objectui#7500 · objectui#7544 · objectui#5042 (the map analogue of #7544).

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
       blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
      }
      } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
      })();
      (function(){
      try {
      var __m = "github.com";
      var __re = new RegExp('^' + "github\\.com" + '
      
      Skip to content

      [finding] ListView / ObjectView still invent binding names on the FORCED viewType path (map 'location', chart 'name' / 'value', gantt 'progress' / 'dependencies', gallery 'image') — the objectui#7029 / #7070 / #7500 class, unreachable through the switcher but reached by an authored type: or a page's leading whitelist entry #7547

      Description

      @zhuangjianguo

      Recorded by the objectstack domain:spec seat (session_0174WZTU6XcFcS7g2kykC53i) from the objectstack#14074 / #14073 measurement group (reports objectstack#14074 comment 5531212329 and objectstack#14073 comment 5531217232, dev measurement on f0f774b0, seat spot-check 2026-09-03T19:49Z). Bare, for this repo's triage; the landing files are objectui's.

      What is measured (objectui f0f774b0)

      The switcher path is clean: packages/plugin-list/src/ListView.tsx:2085-2141 builds resolvable from PRESENT bindings and intersects it with appearance.allowedVisualizations, so a whitelisted type with no block is never offered. The invented-default class that objectui#7029 (calendar), #7070 (gantt dates) and #7500 (timeline) removed survives only on the FORCED path — reached when viewType names the type (an authored type: on a view, or an interface page's allowed[0], InterfaceListPage.tsx:460), which :2139-2141 force-pushes into resolvable:

      • map: locationField: mapConfig.locationField || 'location'packages/plugin-list/src/ListView.tsx:2589; packages/plugin-view/src/ObjectView.tsx:1389.
      • chart legacy axes: xAxisField || categoryField || 'name' and the value 'value'ListView.tsx:2633-2634; plugin-view/src/ObjectView.tsx:1439-1440.
      • gantt: progressField || 'progress', dependenciesField || 'dependencies'ListView.tsx:2558-2559; plugin-view/src/ObjectView.tsx:1377-1378 (optional keys; cosmetic class, listed for completeness).
      • gallery: imageField || 'image'packages/app-shell/src/views/ObjectView.tsx:2393 — this one also makes the gallery capability gate (ListView.tsx:2096) answer yes for every object view that whitelists gallery, so Gallery is offered without a block from the view door; harmless today because ObjectGallery (packages/plugin-list/src/ObjectGallery.tsx:233, :348-363) collapses the cover area, but it is the fabricated-name class.

      Two adjacent observations, same files:

      • app-shell/src/views/ObjectView.tsx:2254 and InterfaceListPage.tsx:482 compute showViewSwitcher from the whitelist LENGTH, not the filtered list — a view whitelisting ['grid', 'timeline'] with no timeline block shows switcher chrome with a single Grid entry.
      • Rider for the (b) case on the page door: when an interface page's leading whitelist entry is calendar and the source object has no derivable date, the calendar refusal screen (packages/plugin-calendar/src/ObjectCalendar.tsx:795, "Calendar configuration required. Please specify startDateField and titleField.") names keys the page surface cannot author; the only remedy on that door is sourceView naming an object view that carries a calendar: block. The screen could say so when reached from an interface page.

      Why it is worth recording

      The authored-type: half of this class is gated at authoring time on the objectstack side (objectstack#14106, view/layout-without-binding, landed 2026-09-02), so a lint-clean app does not reach these literals; a hand-authored or AI-authored view that skips the lint does, and then renders a plausible-looking screen bound to a field that may not exist — the shape objectstack#13748 ruled against. Not a switcher defect: objectstack#14074 closed as archived on that reading.

      Not a decision

      Whether to remove the surviving literals (the #7029 / #7070 / #7500 route: refuse honestly when the binding is absent), keep the cosmetic gantt ones, fix the showViewSwitcher predicate, and word the refusal screen for the page door is this repo's grading. Sibling finding filed by the same measurement: objectui#7544 (chart is never resolved by the capability gate even with a full block).

      Dedup (2026-09-03T19:50Z)

      search_issues on this repo for the forced-path invented bindings: zero results; positive control on the same corpus returned objectui#7544 (and closed #7250 / #5451 / #4692), so the zero is a reading.

      Refs: objectstack#14074 · objectstack#14073 · objectstack#14106 · objectstack#13748 · objectui#7029 · objectui#7070 · objectui#7500 · objectui#7544 · objectui#5042 (the map analogue of #7544).

      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

        Type

        No type

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
          Skip to content

          [finding] ListView / ObjectView still invent binding names on the FORCED viewType path (map 'location', chart 'name' / 'value', gantt 'progress' / 'dependencies', gallery 'image') — the objectui#7029 / #7070 / #7500 class, unreachable through the switcher but reached by an authored type: or a page's leading whitelist entry #7547

          Description

          @zhuangjianguo

          Recorded by the objectstack domain:spec seat (session_0174WZTU6XcFcS7g2kykC53i) from the objectstack#14074 / #14073 measurement group (reports objectstack#14074 comment 5531212329 and objectstack#14073 comment 5531217232, dev measurement on f0f774b0, seat spot-check 2026-09-03T19:49Z). Bare, for this repo's triage; the landing files are objectui's.

          What is measured (objectui f0f774b0)

          The switcher path is clean: packages/plugin-list/src/ListView.tsx:2085-2141 builds resolvable from PRESENT bindings and intersects it with appearance.allowedVisualizations, so a whitelisted type with no block is never offered. The invented-default class that objectui#7029 (calendar), #7070 (gantt dates) and #7500 (timeline) removed survives only on the FORCED path — reached when viewType names the type (an authored type: on a view, or an interface page's allowed[0], InterfaceListPage.tsx:460), which :2139-2141 force-pushes into resolvable:

          • map: locationField: mapConfig.locationField || 'location'packages/plugin-list/src/ListView.tsx:2589; packages/plugin-view/src/ObjectView.tsx:1389.
          • chart legacy axes: xAxisField || categoryField || 'name' and the value 'value'ListView.tsx:2633-2634; plugin-view/src/ObjectView.tsx:1439-1440.
          • gantt: progressField || 'progress', dependenciesField || 'dependencies'ListView.tsx:2558-2559; plugin-view/src/ObjectView.tsx:1377-1378 (optional keys; cosmetic class, listed for completeness).
          • gallery: imageField || 'image'packages/app-shell/src/views/ObjectView.tsx:2393 — this one also makes the gallery capability gate (ListView.tsx:2096) answer yes for every object view that whitelists gallery, so Gallery is offered without a block from the view door; harmless today because ObjectGallery (packages/plugin-list/src/ObjectGallery.tsx:233, :348-363) collapses the cover area, but it is the fabricated-name class.

          Two adjacent observations, same files:

          • app-shell/src/views/ObjectView.tsx:2254 and InterfaceListPage.tsx:482 compute showViewSwitcher from the whitelist LENGTH, not the filtered list — a view whitelisting ['grid', 'timeline'] with no timeline block shows switcher chrome with a single Grid entry.
          • Rider for the (b) case on the page door: when an interface page's leading whitelist entry is calendar and the source object has no derivable date, the calendar refusal screen (packages/plugin-calendar/src/ObjectCalendar.tsx:795, "Calendar configuration required. Please specify startDateField and titleField.") names keys the page surface cannot author; the only remedy on that door is sourceView naming an object view that carries a calendar: block. The screen could say so when reached from an interface page.

          Why it is worth recording

          The authored-type: half of this class is gated at authoring time on the objectstack side (objectstack#14106, view/layout-without-binding, landed 2026-09-02), so a lint-clean app does not reach these literals; a hand-authored or AI-authored view that skips the lint does, and then renders a plausible-looking screen bound to a field that may not exist — the shape objectstack#13748 ruled against. Not a switcher defect: objectstack#14074 closed as archived on that reading.

          Not a decision

          Whether to remove the surviving literals (the #7029 / #7070 / #7500 route: refuse honestly when the binding is absent), keep the cosmetic gantt ones, fix the showViewSwitcher predicate, and word the refusal screen for the page door is this repo's grading. Sibling finding filed by the same measurement: objectui#7544 (chart is never resolved by the capability gate even with a full block).

          Dedup (2026-09-03T19:50Z)

          search_issues on this repo for the forced-path invented bindings: zero results; positive control on the same corpus returned objectui#7544 (and closed #7250 / #5451 / #4692), so the zero is a reading.

          Refs: objectstack#14074 · objectstack#14073 · objectstack#14106 · objectstack#13748 · objectui#7029 · objectui#7070 · objectui#7500 · objectui#7544 · objectui#5042 (the map analogue of #7544).

          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

            Type

            No type

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              [finding] ListView / ObjectView still invent binding names on the FORCED viewType path (map 'location', chart 'name' / 'value', gantt 'progress' / 'dependencies', gallery 'image') — the objectui#7029 / #7070 / #7500 class, unreachable through the switcher but reached by an authored type: or a page's leading whitelist entry #7547

              Description

              @zhuangjianguo

              Recorded by the objectstack domain:spec seat (session_0174WZTU6XcFcS7g2kykC53i) from the objectstack#14074 / #14073 measurement group (reports objectstack#14074 comment 5531212329 and objectstack#14073 comment 5531217232, dev measurement on f0f774b0, seat spot-check 2026-09-03T19:49Z). Bare, for this repo's triage; the landing files are objectui's.

              What is measured (objectui f0f774b0)

              The switcher path is clean: packages/plugin-list/src/ListView.tsx:2085-2141 builds resolvable from PRESENT bindings and intersects it with appearance.allowedVisualizations, so a whitelisted type with no block is never offered. The invented-default class that objectui#7029 (calendar), #7070 (gantt dates) and #7500 (timeline) removed survives only on the FORCED path — reached when viewType names the type (an authored type: on a view, or an interface page's allowed[0], InterfaceListPage.tsx:460), which :2139-2141 force-pushes into resolvable:

              • map: locationField: mapConfig.locationField || 'location'packages/plugin-list/src/ListView.tsx:2589; packages/plugin-view/src/ObjectView.tsx:1389.
              • chart legacy axes: xAxisField || categoryField || 'name' and the value 'value'ListView.tsx:2633-2634; plugin-view/src/ObjectView.tsx:1439-1440.
              • gantt: progressField || 'progress', dependenciesField || 'dependencies'ListView.tsx:2558-2559; plugin-view/src/ObjectView.tsx:1377-1378 (optional keys; cosmetic class, listed for completeness).
              • gallery: imageField || 'image'packages/app-shell/src/views/ObjectView.tsx:2393 — this one also makes the gallery capability gate (ListView.tsx:2096) answer yes for every object view that whitelists gallery, so Gallery is offered without a block from the view door; harmless today because ObjectGallery (packages/plugin-list/src/ObjectGallery.tsx:233, :348-363) collapses the cover area, but it is the fabricated-name class.

              Two adjacent observations, same files:

              • app-shell/src/views/ObjectView.tsx:2254 and InterfaceListPage.tsx:482 compute showViewSwitcher from the whitelist LENGTH, not the filtered list — a view whitelisting ['grid', 'timeline'] with no timeline block shows switcher chrome with a single Grid entry.
              • Rider for the (b) case on the page door: when an interface page's leading whitelist entry is calendar and the source object has no derivable date, the calendar refusal screen (packages/plugin-calendar/src/ObjectCalendar.tsx:795, "Calendar configuration required. Please specify startDateField and titleField.") names keys the page surface cannot author; the only remedy on that door is sourceView naming an object view that carries a calendar: block. The screen could say so when reached from an interface page.

              Why it is worth recording

              The authored-type: half of this class is gated at authoring time on the objectstack side (objectstack#14106, view/layout-without-binding, landed 2026-09-02), so a lint-clean app does not reach these literals; a hand-authored or AI-authored view that skips the lint does, and then renders a plausible-looking screen bound to a field that may not exist — the shape objectstack#13748 ruled against. Not a switcher defect: objectstack#14074 closed as archived on that reading.

              Not a decision

              Whether to remove the surviving literals (the #7029 / #7070 / #7500 route: refuse honestly when the binding is absent), keep the cosmetic gantt ones, fix the showViewSwitcher predicate, and word the refusal screen for the page door is this repo's grading. Sibling finding filed by the same measurement: objectui#7544 (chart is never resolved by the capability gate even with a full block).

              Dedup (2026-09-03T19:50Z)

              search_issues on this repo for the forced-path invented bindings: zero results; positive control on the same corpus returned objectui#7544 (and closed #7250 / #5451 / #4692), so the zero is a reading.

              Refs: objectstack#14074 · objectstack#14073 · objectstack#14106 · objectstack#13748 · objectui#7029 · objectui#7070 · objectui#7500 · objectui#7544 · objectui#5042 (the map analogue of #7544).

              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

                Type

                No type

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions

                  , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
                  Skip to content

                  [finding] ListView / ObjectView still invent binding names on the FORCED viewType path (map 'location', chart 'name' / 'value', gantt 'progress' / 'dependencies', gallery 'image') — the objectui#7029 / #7070 / #7500 class, unreachable through the switcher but reached by an authored type: or a page's leading whitelist entry #7547

                  Description

                  @zhuangjianguo

                  Recorded by the objectstack domain:spec seat (session_0174WZTU6XcFcS7g2kykC53i) from the objectstack#14074 / #14073 measurement group (reports objectstack#14074 comment 5531212329 and objectstack#14073 comment 5531217232, dev measurement on f0f774b0, seat spot-check 2026-09-03T19:49Z). Bare, for this repo's triage; the landing files are objectui's.

                  What is measured (objectui f0f774b0)

                  The switcher path is clean: packages/plugin-list/src/ListView.tsx:2085-2141 builds resolvable from PRESENT bindings and intersects it with appearance.allowedVisualizations, so a whitelisted type with no block is never offered. The invented-default class that objectui#7029 (calendar), #7070 (gantt dates) and #7500 (timeline) removed survives only on the FORCED path — reached when viewType names the type (an authored type: on a view, or an interface page's allowed[0], InterfaceListPage.tsx:460), which :2139-2141 force-pushes into resolvable:

                  • map: locationField: mapConfig.locationField || 'location'packages/plugin-list/src/ListView.tsx:2589; packages/plugin-view/src/ObjectView.tsx:1389.
                  • chart legacy axes: xAxisField || categoryField || 'name' and the value 'value'ListView.tsx:2633-2634; plugin-view/src/ObjectView.tsx:1439-1440.
                  • gantt: progressField || 'progress', dependenciesField || 'dependencies'ListView.tsx:2558-2559; plugin-view/src/ObjectView.tsx:1377-1378 (optional keys; cosmetic class, listed for completeness).
                  • gallery: imageField || 'image'packages/app-shell/src/views/ObjectView.tsx:2393 — this one also makes the gallery capability gate (ListView.tsx:2096) answer yes for every object view that whitelists gallery, so Gallery is offered without a block from the view door; harmless today because ObjectGallery (packages/plugin-list/src/ObjectGallery.tsx:233, :348-363) collapses the cover area, but it is the fabricated-name class.

                  Two adjacent observations, same files:

                  • app-shell/src/views/ObjectView.tsx:2254 and InterfaceListPage.tsx:482 compute showViewSwitcher from the whitelist LENGTH, not the filtered list — a view whitelisting ['grid', 'timeline'] with no timeline block shows switcher chrome with a single Grid entry.
                  • Rider for the (b) case on the page door: when an interface page's leading whitelist entry is calendar and the source object has no derivable date, the calendar refusal screen (packages/plugin-calendar/src/ObjectCalendar.tsx:795, "Calendar configuration required. Please specify startDateField and titleField.") names keys the page surface cannot author; the only remedy on that door is sourceView naming an object view that carries a calendar: block. The screen could say so when reached from an interface page.

                  Why it is worth recording

                  The authored-type: half of this class is gated at authoring time on the objectstack side (objectstack#14106, view/layout-without-binding, landed 2026-09-02), so a lint-clean app does not reach these literals; a hand-authored or AI-authored view that skips the lint does, and then renders a plausible-looking screen bound to a field that may not exist — the shape objectstack#13748 ruled against. Not a switcher defect: objectstack#14074 closed as archived on that reading.

                  Not a decision

                  Whether to remove the surviving literals (the #7029 / #7070 / #7500 route: refuse honestly when the binding is absent), keep the cosmetic gantt ones, fix the showViewSwitcher predicate, and word the refusal screen for the page door is this repo's grading. Sibling finding filed by the same measurement: objectui#7544 (chart is never resolved by the capability gate even with a full block).

                  Dedup (2026-09-03T19:50Z)

                  search_issues on this repo for the forced-path invented bindings: zero results; positive control on the same corpus returned objectui#7544 (and closed #7250 / #5451 / #4692), so the zero is a reading.

                  Refs: objectstack#14074 · objectstack#14073 · objectstack#14106 · objectstack#13748 · objectui#7029 · objectui#7070 · objectui#7500 · objectui#7544 · objectui#5042 (the map analogue of #7544).

                  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

                    Type

                    No type

                    Projects

                    No projects

                      Milestone

                      No milestone

                      Relationships

                      None yet

                      Development

                      No branches or pull requests

                      Issue actions

                      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                      Skip to content

                      [finding] ListView / ObjectView still invent binding names on the FORCED viewType path (map 'location', chart 'name' / 'value', gantt 'progress' / 'dependencies', gallery 'image') — the objectui#7029 / #7070 / #7500 class, unreachable through the switcher but reached by an authored type: or a page's leading whitelist entry #7547

                      Description

                      @zhuangjianguo

                      Recorded by the objectstack domain:spec seat (session_0174WZTU6XcFcS7g2kykC53i) from the objectstack#14074 / #14073 measurement group (reports objectstack#14074 comment 5531212329 and objectstack#14073 comment 5531217232, dev measurement on f0f774b0, seat spot-check 2026-09-03T19:49Z). Bare, for this repo's triage; the landing files are objectui's.

                      What is measured (objectui f0f774b0)

                      The switcher path is clean: packages/plugin-list/src/ListView.tsx:2085-2141 builds resolvable from PRESENT bindings and intersects it with appearance.allowedVisualizations, so a whitelisted type with no block is never offered. The invented-default class that objectui#7029 (calendar), #7070 (gantt dates) and #7500 (timeline) removed survives only on the FORCED path — reached when viewType names the type (an authored type: on a view, or an interface page's allowed[0], InterfaceListPage.tsx:460), which :2139-2141 force-pushes into resolvable:

                      • map: locationField: mapConfig.locationField || 'location'packages/plugin-list/src/ListView.tsx:2589; packages/plugin-view/src/ObjectView.tsx:1389.
                      • chart legacy axes: xAxisField || categoryField || 'name' and the value 'value'ListView.tsx:2633-2634; plugin-view/src/ObjectView.tsx:1439-1440.
                      • gantt: progressField || 'progress', dependenciesField || 'dependencies'ListView.tsx:2558-2559; plugin-view/src/ObjectView.tsx:1377-1378 (optional keys; cosmetic class, listed for completeness).
                      • gallery: imageField || 'image'packages/app-shell/src/views/ObjectView.tsx:2393 — this one also makes the gallery capability gate (ListView.tsx:2096) answer yes for every object view that whitelists gallery, so Gallery is offered without a block from the view door; harmless today because ObjectGallery (packages/plugin-list/src/ObjectGallery.tsx:233, :348-363) collapses the cover area, but it is the fabricated-name class.

                      Two adjacent observations, same files:

                      • app-shell/src/views/ObjectView.tsx:2254 and InterfaceListPage.tsx:482 compute showViewSwitcher from the whitelist LENGTH, not the filtered list — a view whitelisting ['grid', 'timeline'] with no timeline block shows switcher chrome with a single Grid entry.
                      • Rider for the (b) case on the page door: when an interface page's leading whitelist entry is calendar and the source object has no derivable date, the calendar refusal screen (packages/plugin-calendar/src/ObjectCalendar.tsx:795, "Calendar configuration required. Please specify startDateField and titleField.") names keys the page surface cannot author; the only remedy on that door is sourceView naming an object view that carries a calendar: block. The screen could say so when reached from an interface page.

                      Why it is worth recording

                      The authored-type: half of this class is gated at authoring time on the objectstack side (objectstack#14106, view/layout-without-binding, landed 2026-09-02), so a lint-clean app does not reach these literals; a hand-authored or AI-authored view that skips the lint does, and then renders a plausible-looking screen bound to a field that may not exist — the shape objectstack#13748 ruled against. Not a switcher defect: objectstack#14074 closed as archived on that reading.

                      Not a decision

                      Whether to remove the surviving literals (the #7029 / #7070 / #7500 route: refuse honestly when the binding is absent), keep the cosmetic gantt ones, fix the showViewSwitcher predicate, and word the refusal screen for the page door is this repo's grading. Sibling finding filed by the same measurement: objectui#7544 (chart is never resolved by the capability gate even with a full block).

                      Dedup (2026-09-03T19:50Z)

                      search_issues on this repo for the forced-path invented bindings: zero results; positive control on the same corpus returned objectui#7544 (and closed #7250 / #5451 / #4692), so the zero is a reading.

                      Refs: objectstack#14074 · objectstack#14073 · objectstack#14106 · objectstack#13748 · objectui#7029 · objectui#7070 · objectui#7500 · objectui#7544 · objectui#5042 (the map analogue of #7544).

                      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

                        Type

                        No type

                        Projects

                        No projects

                          Milestone

                          No milestone

                          Relationships

                          None yet

                          Development

                          No branches or pull requests

                          Issue actions

                          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                          Skip to content

                          [finding] ListView / ObjectView still invent binding names on the FORCED viewType path (map 'location', chart 'name' / 'value', gantt 'progress' / 'dependencies', gallery 'image') — the objectui#7029 / #7070 / #7500 class, unreachable through the switcher but reached by an authored type: or a page's leading whitelist entry #7547

                          Description

                          @zhuangjianguo

                          Recorded by the objectstack domain:spec seat (session_0174WZTU6XcFcS7g2kykC53i) from the objectstack#14074 / #14073 measurement group (reports objectstack#14074 comment 5531212329 and objectstack#14073 comment 5531217232, dev measurement on f0f774b0, seat spot-check 2026-09-03T19:49Z). Bare, for this repo's triage; the landing files are objectui's.

                          What is measured (objectui f0f774b0)

                          The switcher path is clean: packages/plugin-list/src/ListView.tsx:2085-2141 builds resolvable from PRESENT bindings and intersects it with appearance.allowedVisualizations, so a whitelisted type with no block is never offered. The invented-default class that objectui#7029 (calendar), #7070 (gantt dates) and #7500 (timeline) removed survives only on the FORCED path — reached when viewType names the type (an authored type: on a view, or an interface page's allowed[0], InterfaceListPage.tsx:460), which :2139-2141 force-pushes into resolvable:

                          • map: locationField: mapConfig.locationField || 'location'packages/plugin-list/src/ListView.tsx:2589; packages/plugin-view/src/ObjectView.tsx:1389.
                          • chart legacy axes: xAxisField || categoryField || 'name' and the value 'value'ListView.tsx:2633-2634; plugin-view/src/ObjectView.tsx:1439-1440.
                          • gantt: progressField || 'progress', dependenciesField || 'dependencies'ListView.tsx:2558-2559; plugin-view/src/ObjectView.tsx:1377-1378 (optional keys; cosmetic class, listed for completeness).
                          • gallery: imageField || 'image'packages/app-shell/src/views/ObjectView.tsx:2393 — this one also makes the gallery capability gate (ListView.tsx:2096) answer yes for every object view that whitelists gallery, so Gallery is offered without a block from the view door; harmless today because ObjectGallery (packages/plugin-list/src/ObjectGallery.tsx:233, :348-363) collapses the cover area, but it is the fabricated-name class.

                          Two adjacent observations, same files:

                          • app-shell/src/views/ObjectView.tsx:2254 and InterfaceListPage.tsx:482 compute showViewSwitcher from the whitelist LENGTH, not the filtered list — a view whitelisting ['grid', 'timeline'] with no timeline block shows switcher chrome with a single Grid entry.
                          • Rider for the (b) case on the page door: when an interface page's leading whitelist entry is calendar and the source object has no derivable date, the calendar refusal screen (packages/plugin-calendar/src/ObjectCalendar.tsx:795, "Calendar configuration required. Please specify startDateField and titleField.") names keys the page surface cannot author; the only remedy on that door is sourceView naming an object view that carries a calendar: block. The screen could say so when reached from an interface page.

                          Why it is worth recording

                          The authored-type: half of this class is gated at authoring time on the objectstack side (objectstack#14106, view/layout-without-binding, landed 2026-09-02), so a lint-clean app does not reach these literals; a hand-authored or AI-authored view that skips the lint does, and then renders a plausible-looking screen bound to a field that may not exist — the shape objectstack#13748 ruled against. Not a switcher defect: objectstack#14074 closed as archived on that reading.

                          Not a decision

                          Whether to remove the surviving literals (the #7029 / #7070 / #7500 route: refuse honestly when the binding is absent), keep the cosmetic gantt ones, fix the showViewSwitcher predicate, and word the refusal screen for the page door is this repo's grading. Sibling finding filed by the same measurement: objectui#7544 (chart is never resolved by the capability gate even with a full block).

                          Dedup (2026-09-03T19:50Z)

                          search_issues on this repo for the forced-path invented bindings: zero results; positive control on the same corpus returned objectui#7544 (and closed #7250 / #5451 / #4692), so the zero is a reading.

                          Refs: objectstack#14074 · objectstack#14073 · objectstack#14106 · objectstack#13748 · objectui#7029 · objectui#7070 · objectui#7500 · objectui#7544 · objectui#5042 (the map analogue of #7544).

                          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

                            Type

                            No type

                            Projects

                            No projects

                              Milestone

                              No milestone

                              Relationships

                              None yet

                              Development

                              No branches or pull requests

                              Issue actions

                              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                              Skip to content

                              [finding] ListView / ObjectView still invent binding names on the FORCED viewType path (map 'location', chart 'name' / 'value', gantt 'progress' / 'dependencies', gallery 'image') — the objectui#7029 / #7070 / #7500 class, unreachable through the switcher but reached by an authored type: or a page's leading whitelist entry #7547

                              Description

                              @zhuangjianguo

                              Recorded by the objectstack domain:spec seat (session_0174WZTU6XcFcS7g2kykC53i) from the objectstack#14074 / #14073 measurement group (reports objectstack#14074 comment 5531212329 and objectstack#14073 comment 5531217232, dev measurement on f0f774b0, seat spot-check 2026-09-03T19:49Z). Bare, for this repo's triage; the landing files are objectui's.

                              What is measured (objectui f0f774b0)

                              The switcher path is clean: packages/plugin-list/src/ListView.tsx:2085-2141 builds resolvable from PRESENT bindings and intersects it with appearance.allowedVisualizations, so a whitelisted type with no block is never offered. The invented-default class that objectui#7029 (calendar), #7070 (gantt dates) and #7500 (timeline) removed survives only on the FORCED path — reached when viewType names the type (an authored type: on a view, or an interface page's allowed[0], InterfaceListPage.tsx:460), which :2139-2141 force-pushes into resolvable:

                              • map: locationField: mapConfig.locationField || 'location'packages/plugin-list/src/ListView.tsx:2589; packages/plugin-view/src/ObjectView.tsx:1389.
                              • chart legacy axes: xAxisField || categoryField || 'name' and the value 'value'ListView.tsx:2633-2634; plugin-view/src/ObjectView.tsx:1439-1440.
                              • gantt: progressField || 'progress', dependenciesField || 'dependencies'ListView.tsx:2558-2559; plugin-view/src/ObjectView.tsx:1377-1378 (optional keys; cosmetic class, listed for completeness).
                              • gallery: imageField || 'image'packages/app-shell/src/views/ObjectView.tsx:2393 — this one also makes the gallery capability gate (ListView.tsx:2096) answer yes for every object view that whitelists gallery, so Gallery is offered without a block from the view door; harmless today because ObjectGallery (packages/plugin-list/src/ObjectGallery.tsx:233, :348-363) collapses the cover area, but it is the fabricated-name class.

                              Two adjacent observations, same files:

                              • app-shell/src/views/ObjectView.tsx:2254 and InterfaceListPage.tsx:482 compute showViewSwitcher from the whitelist LENGTH, not the filtered list — a view whitelisting ['grid', 'timeline'] with no timeline block shows switcher chrome with a single Grid entry.
                              • Rider for the (b) case on the page door: when an interface page's leading whitelist entry is calendar and the source object has no derivable date, the calendar refusal screen (packages/plugin-calendar/src/ObjectCalendar.tsx:795, "Calendar configuration required. Please specify startDateField and titleField.") names keys the page surface cannot author; the only remedy on that door is sourceView naming an object view that carries a calendar: block. The screen could say so when reached from an interface page.

                              Why it is worth recording

                              The authored-type: half of this class is gated at authoring time on the objectstack side (objectstack#14106, view/layout-without-binding, landed 2026-09-02), so a lint-clean app does not reach these literals; a hand-authored or AI-authored view that skips the lint does, and then renders a plausible-looking screen bound to a field that may not exist — the shape objectstack#13748 ruled against. Not a switcher defect: objectstack#14074 closed as archived on that reading.

                              Not a decision

                              Whether to remove the surviving literals (the #7029 / #7070 / #7500 route: refuse honestly when the binding is absent), keep the cosmetic gantt ones, fix the showViewSwitcher predicate, and word the refusal screen for the page door is this repo's grading. Sibling finding filed by the same measurement: objectui#7544 (chart is never resolved by the capability gate even with a full block).

                              Dedup (2026-09-03T19:50Z)

                              search_issues on this repo for the forced-path invented bindings: zero results; positive control on the same corpus returned objectui#7544 (and closed #7250 / #5451 / #4692), so the zero is a reading.

                              Refs: objectstack#14074 · objectstack#14073 · objectstack#14106 · objectstack#13748 · objectui#7029 · objectui#7070 · objectui#7500 · objectui#7544 · objectui#5042 (the map analogue of #7544).

                              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

                                Type

                                No type

                                Projects

                                No projects

                                  Milestone

                                  No milestone

                                  Relationships

                                  None yet

                                  Development

                                  No branches or pull requests

                                  Issue actions