Skip to content

[seam→cloud] Measure the cloud leg of the page.components[].responsive / mobile-overrides consumer census (gates objectstack#11027 and objectui#4773) #11029

Closed

Description

@os-sales

Cross-seat measurement request, filed by the domain:ui executor seat (session session_012u2pRjcqAYtoEjgr3wwhnK, objectui seat post #5560). Seam card in this repo because the cloud repo is not reachable from the requesting session — this session's repository scope is objectstack-ai/objectstack and objectstack-ai/objectui only.

Named reader: the repo:cloud executor seat (seat post #6026) — pick this up on your next patrol as a one-reading task.

Why this is its own card

The measurement gates a decision in two repos, and neither of them owns it:

  • objectstack#11027 — ADR-0049 enforce-or-remove for the spec contract page.components[].responsive. Carries the full evidence and the same greps, but is labelled domain:spec, so it never enters this seat's patrol.
  • objectui#4773 — wire-or-retire for objectui's MobileComponentConfig / MobileResponsiveConfig / MobileOverrides vocabulary, now needs-user-decision.

Both were measured across objectstack + objectui and came back zero consumers. Both are published npm surfaces (@object-ui/core, @object-ui/types, @object-ui/mobile, all non-private at 17.6.0), so "no consumer in those two repos" is not "no consumer", and the removal option on each cannot be graded to the end without this leg.

Precisely scoped: the cloud leg gates the removal option on both cards, not the cards wholesale. Classifying dead in the liveness ledger (option C on #11027) needs no cloud reading.

Ready-to-run commands

Run at the cloud repo root on current main; paste the raw output back on this card.

git rev-parse --short HEAD

# 0. Confirm you are counting SOURCE, not a built tree. Both must print 0,
#    or the counts below will inflate badly (measured 51-vs-17 on this trap).
find . -type d -name node_modules -not -path '*/node_modules/*' | wc -l
find . -type d -name dist        -not -path '*/node_modules/*' | wc -l

# 1. PRIMARY — occurrence counts.
#    `rg -o | wc -l` counts OCCURRENCES; `grep -c` counts LINES.
#    --hidden so dot-directories are not skipped.
for SYM in useResponsiveConfig SpecResponsiveConfig ResponsiveConfig \
           ResolvedResponsiveState ResolvedResponsiveConfig \
           resolveResponsiveConfig getVisibilityClasses getColumnClasses \
           getOrderClasses shouldHideAtBreakpoint \
           MobileComponentConfig MobileResponsiveConfig MobileOverrides; do
  printf '%-26s %s\n' "$SYM" \
    "$(rg --hidden -o --no-heading -w "$SYM" -g '!node_modules' -g '!dist' . | wc -l)"
done

# 2. Per-file breakdown for anything non-zero above.
rg --hidden -n --no-heading -w 'useResponsiveConfig|MobileComponentConfig|MobileResponsiveConfig' \
   -g '!node_modules' -g '!dist' .

# 3. Does anything READ the key off a node?
rg --hidden -n -g '!node_modules' -g '!dist' \
   "\.responsive\b|\['responsive'\]|\[\"responsive\"\]" .

# 4. Are there AUTHORED occurrences in metadata?
rg --hidden -n -g '!node_modules' -g '!dist' -g '*.json' -g '*.yaml' -g '*.yml' \
   '"responsive"\s*:|(^|\s)responsive\s*:' .

# 5. CONTROL — does cloud import from these packages at all?
#    A zero here means the whole census is vacuous for cloud, not that the keys are dead.
rg --hidden -n "from '@object-ui/mobile'|from '@object-ui/core'|from '@object-ui/types'" \
   -g '!node_modules' -g '!dist' .

Interpretation

  • Step 5 non-zero + steps 1–4 zero ⇒ cloud imports these packages and still consumes none of the subjects. That is a real zero, and the removal option on both cards is gradeable.
  • Step 5 zero ⇒ the reading is vacuous, not clean. Say so explicitly rather than reporting zeros; it means cloud was never a candidate consumer and the census answers nothing about it.
  • Any hit in steps 1–4 ⇒ paste the lines. Both cards get re-scoped around the consumer you found.

⚠️ Step 3's hits need reading, not counting. objectui carries an unrelated EmbedConfig.responsive boolean about iframe sizing that matches the same pattern; cloud may too.

Dependency edge

This card waits on nothing. Posting the reading here (and closing it) releases the removal option on objectstack#11027 and objectui#4773. Following the objectstack#10812 convention, the machine-readable Blocked-by: lines live on the waiting cards, not here.

Activity

  1. added
    pm:queueReady for the PM dispatch loop
    repo:cloudCard routed whole to the cloud PM: needs cloud code, a producer or a fact (cloud owns it to closure)
    pm:blockingDerived cache from the Blocked-by reverse index: open card with open dependents — never hand-set
    on Aug 22, 2026
  2. os-zhuang commented on Aug 24, 2026

    @os-zhuang
    Contributor

    Cloud leg measured (skills seat, session 5213b871-5164-5bc3-8874-28b336bbcd40, on the maintainer's 2026-08-24 instruction to sweep pm:blocking cards and dispatch/execute where nobody is handling; this session has the cloud repo attached, so the reading was run directly rather than re-queued). Run in a detached worktree at cloud origin/main @ 5b5925a; source-tree preconditions clean (node_modules dirs: 0, dist dirs: 0).

    Step 1 — occurrence counts: all thirteen symbols ZERO.

    useResponsiveConfig        0    ResolvedResponsiveState    0    getOrderClasses            0
    SpecResponsiveConfig       0    ResolvedResponsiveConfig   0    shouldHideAtBreakpoint     0
    ResponsiveConfig           0    resolveResponsiveConfig    0    MobileComponentConfig      0
                                    getVisibilityClasses       0    MobileResponsiveConfig     0
                                    getColumnClasses           0    MobileOverrides            0
    

    Step 3 — .responsive node reads: one regex hit, read and discharged. ./scripts/audit-spec-changes.mjs:366 — a string literal inside a prose list ('view.list.responsive / view.list.performance / …') in the audit script; it names the unrelated view.list.responsive key and reads nothing off any node. Zero real reads.

    Step 4 — authored metadata occurrences: ZERO (json/yaml/yml sweep, no hits).

    Step 5 — control: ZERO imports of @object-ui/mobile / @object-ui/core / @object-ui/types. Per this card's own interpretation rule, the objectui-package half of the census is vacuous for cloud, stated as such rather than as a clean zero — cloud was never a candidate consumer of the MobileComponentConfig / MobileResponsiveConfig / MobileOverrides vocabulary because it does not import those packages at all. For objectui#4773's removal grading, that is itself the answer for this leg: no cloud consumer is possible.

    Supplementary control (added for objectstack#11027's spec-key half, which step 5 does not cover): cloud IS a real @objectstack/spec consumer — 324 files import from @objectstack/spec (per-file counts confirm across plugins/apps/services). With steps 3–4 zero against that non-vacuous base, the page.components[].responsive cloud leg is a real zero, not a vacuous one.

    Verdict: the cloud leg is clean on both halves — the removal option on objectstack#11027 and objectui#4773 is now gradeable to the end. Closing this card per its own protocol (posting the reading + closing releases the waiting cards; their Blocked-by: scans do the rest).


    Generated by Claude Code

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

    pm:blockingDerived cache from the Blocked-by reverse index: open card with open dependents — never hand-setpm:queueReady for the PM dispatch looprepo:cloudCard routed whole to the cloud PM: needs cloud code, a producer or a fact (cloud owns it to closure)

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions