Uh oh!
There was an error while loading. Please reload this page.
') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })();
There was an error while loading. Please reload this page.
visibleWhen written in a *.form.ts is silently inert — the metadata-admin renderer never reads it #11793
Filing unassigned — recording, not claiming. Measured while implementing #11410, where per-option visibility was the first shape considered and had to be ruled out.
The observation
FormFieldBaseSchema.optionsisz.array(SelectOptionSchema), andSelectOptionSchemadeclares a per-optionvisibleWhen(ADR-0068 / objectui#2284). So a metadata form (packages/spec/src/data/*.form.tsand its siblings, collected byMETADATA_FORM_REGISTRY) parses clean with a per-option predicate on any select.It has no effect there. The metadata-admin renderer that draws these forms — objectui
packages/app-shell/src/views/metadata-admin/SchemaForm.tsx— mapsfieldSpec.optionsstraight to select items and never consultsopt.visibleWhen. ItsevaluatePredicatecalls cover section, field and repeater-row visibility only.So on this surface the key is accepted, stored, shipped, and ignored — the ADR-0049 declared-but-unenforced shape, scoped to one of the key's two consuming surfaces.
Why it is easy to get wrong in exactly the costly direction
An author reaching for it wants to withdraw an option. Both failure modes point the same way — the option stays offered:
resolveCascadingOptionstoevalFieldPredicate, where the key is honored): the scope bindsrecord/previous/extraand neverdata. Metadata forms spell their predicatesdata.*, so adata.-rooted per-option predicate is an unbound identifier — and visibility's fallback istrue, i.e. the option is kept.A narrowing written this way therefore reads as done and does nothing. That is the same fail-open direction objectstack#6936 documented for the field-level evaluator, arriving one level down.
Not a claim that the docblock is wrong
SelectOptionSchema.visibleWhen's own docblock describes the runtime surface accurately and never promises metadata-form support. The gap is that nothing tells an author readingFormFieldBaseSchema.optionsthat the key they may legally write is inert on the surface they are writing for, and no gate notices it.Possible directions (not a recommendation — this wants triage)
SchemaFormto filter options byvisibleWhen(fix in objectui; makes declared = enforced on both surfaces, and would need thedatabinding decided since that is the root metadata forms use).FormFieldBaseSchema.options— and consider a gate that fails a*.form.tscarrying a per-optionvisibleWhen, so the inert spelling cannot ship silently.Zero
*.form.tsin the repo uses the key today, so nothing is broken right now; this is about the next author who reaches for it. #11410 worked around it by using two field declarations with disjoint field-levelvisibleWhen, which is the shape the renderer does honor.