You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Found out of scope by the #13214 tenancy-limb dev (PR #13258) while measuring the blast radius of GET /api/v1/ui/view/:object/:type. ⛔ Reported, not touched — the repair is in a different package from that card and is a different defect class.
⛔ Ungraded and unrouted. Severity not judged here. Duplicate-checked with one targeted search before filing (it returned two unrelated closed items, #10001 and #7494, so the channel was live and the result is a reading rather than an unverified zero).
Measured
packages/metadata-protocol/src/protocol.ts, getUiView, the type === 'list' branch:
!fields[k].hidden is applied to the fill pass only. The priority pass has no such filter, so a field declared hidden: true whose name happens to be one of those nine is emitted as a list column — with its label.
Driven, not read off the source (PR #13258, packages/rest/src/ui-view-route-tenancy.measurement.test.ts, section 3). One object carrying two hidden fields of different kinds:
beta_secret — hidden: true, not a priority name ⇒ dropped, as expected;
status — hidden: true, and a priority name ⇒ served, { field: 'status', label: 'Beta Status', sortable: true }.
The form branch of the same function filters all hidden fields uniformly (.filter(k => ... && !fields[k].hidden)), so the two branches of one producer disagree about what hidden means.
Why this is worth a card rather than a comment
Declared is not enforced (Prime Directive chore: version packages #10). hidden reads as a floor and is one for eight of nine spellings; the ninth class is decided by whether the author happened to pick a name from an internal presentation heuristic. Nothing at authoring time says so.
The affected names are the likely ones.email, status, type, category, subject, title are exactly the field names an author reaches for, so the failing case is not exotic.
⛔ Reverse-check any zero with a term known present in the same file: hidden appears in the form branch of the same function, and getUiView sits directly below auditMetaItem.
Not decided here
Which way it should be repaired — drop hidden fields from the priority pass, or make the priority pass respect a declared column list — is a spec-adjacent call about what hidden means on a view, and is left to triage.
Found out of scope by the #13214 tenancy-limb dev (PR #13258) while measuring the blast radius of
GET /api/v1/ui/view/:object/:type. ⛔ Reported, not touched — the repair is in a different package from that card and is a different defect class.⛔ Ungraded and unrouted. Severity not judged here. Duplicate-checked with one targeted search before filing (it returned two unrelated closed items, #10001 and #7494, so the channel was live and the result is a reading rather than an unverified zero).
Measured
packages/metadata-protocol/src/protocol.ts,getUiView, thetype === 'list'branch:!fields[k].hiddenis applied to the fill pass only. The priority pass has no such filter, so a field declaredhidden: truewhose name happens to be one of those nine is emitted as a list column — with its label.Driven, not read off the source (PR #13258,
packages/rest/src/ui-view-route-tenancy.measurement.test.ts, section 3). One object carrying two hidden fields of different kinds:beta_secret—hidden: true, not a priority name ⇒ dropped, as expected;status—hidden: true, and a priority name ⇒ served,{ field: 'status', label: 'Beta Status', sortable: true }.The form branch of the same function filters all hidden fields uniformly (
.filter(k => ... && !fields[k].hidden)), so the two branches of one producer disagree about whathiddenmeans.Why this is worth a card rather than a comment
hiddenreads as a floor and is one for eight of nine spellings; the ninth class is decided by whether the author happened to pick a name from an internal presentation heuristic. Nothing at authoring time says so.email,status,type,category,subject,titleare exactly the field names an author reaches for, so the failing case is not exotic.GET /api/v1/ui/view/:object/:typeresolves a UI view with no identity resolution and no anonymous-deny at the REST seam #13214. That card is measuring anonymous and cross-environment reachability of this same route. If that decision lands on "the route is deliberately public", this defect decides part of what "public" then discloses. ⛔ That is a note about ordering, not a claim about [finding]GET /api/v1/ui/view/:object/:typeresolves a UI view with no identity resolution and no anonymous-deny at the REST seam #13214's outcome, which is a maintainer decision.Re-check
⛔ Reverse-check any zero with a term known present in the same file:
hiddenappears in the form branch of the same function, andgetUiViewsits directly belowauditMetaItem.Not decided here
Which way it should be repaired — drop hidden fields from the priority pass, or make the priority pass respect a declared column list — is a spec-adjacent call about what
hiddenmeans on a view, and is left to triage.Refs
GET /api/v1/ui/view/:object/:typeresolves a UI view with no identity resolution and no anonymous-deny at the REST seam #13214 / PR test(rest): drive the tenancy axis of GET /ui/view/:object/:type — an anonymous caller can name another environment and receive its UI view #13258 — the measurement that surfaced this, and the harness that drives itGenerated by Claude Code