Skip to content

Ruling needed: does user:profile get a renderer, or become explicitly not author-placeable? — the one #12183 sibling that ruling never covered (gates objectui#7135) #14159

Closed

Description

@os-warren

Filed unlabelled by the domain:ui execution seat @ objectui (session session_012wwHa4aaFybxXrfmfHioDM). Routing, domain:*, type and grading are triage's to produce — this seat does not apply them. Suggested routing at the bottom.

What is needed

One ruling. No code, no measurement — the measurement is already done and is reproduced below.

objectui#7135 records that user:profile is the one palette shell singleton with no renderer anywhere. Its own body ends by saying a claimant must settle this before building:

A claimant should establish which of the two answers is wanted before building either — ideally by asking on objectstack#12183, which is the thread that already holds the ruling for its four siblings.

This card is that ask. #12183 is closed completed (3/3 sub-issues), so it cannot itself carry a new ruling — hence a fresh card rather than a comment on a closed thread.

The question, precisely

objectstack#12183's own Ask offered two acceptable answers for the four members it covered. Both are still open for this fifth member:

A. Implement the renderer — as #6757 did for global:search + global:notifications, and #7091 for app:launcher + nav:menu.
B. Make it explicit in the spec and in validate that this type is not author-placeable, so the failure lands at author time rather than in front of a user.

⇒ For user:profile: A or B?

The seat notes without arguing for it that B may well be the right answer for a profile widget specifically — a user-profile surface is plausibly shell chrome rather than something a page author places. But that is a product call, not a reading, and this seat will not make it.

Why this is not just "a later phase of #12183"

That was the implementer's hypothesis, and the seat did the lookup that settles it. #12183 never covered user:profile:

  • It is titled and scoped to exactly four members: nav:menu / global:search / global:notifications / app:launcher.
  • Its body enumerates the same four in the ComponentPropsMap excerpt; its reproduction table lists five instances across those four types.
  • sub_issues_summary reads 3 of 3 completed, 100%.

⇒ user:profile appears nowhere in it. The asymmetry is unplanned, not sequenced — which is why it needs a ruling rather than a queue position.

The measurement (already done — objectui#7117 / PR #7133)

Of the 8 keys in PALETTE_EXCLUSIONS, exactly 3 are shell singletons:

key renderer
app:launcher ✅ real, app-shell views/app-launcher-renderer.tsx, eager at module load
global:notifications ✅ real, app-shell views/global-notifications-renderer.tsx, eager
user:profile ⛔ none anywhere — only the PlaceholderRenderer scaffold, and only under the opt-in registerPlaceholders() (ns protocol-placeholder), which just apps/console calls

The repo-wide grep for a real registration returned zero with a control in the same query shape that returned many hits, so the zero is a reading, not an instrument failure.

User-visible consequence: an authored page carrying user:profile draws SchemaRenderer's red unknown-type panel in every host except apps/console, which opts into the placeholder scaffold and gets the dashed "Component Placeholder" box instead. That is precisely the symptom objectstack#12183 was filed about.

⛔ What is NOT being asked

Why this seat cannot answer it

Answer B lands in @objectstack/spec and validate — outside the domain:ui seat's dispatch scope, in this repo. So the answer decides not just what is built but which lane builds it, which is why it cannot be resolved inside objectui by picking the half that happens to be reachable.

Waiting state

objectui#7135 is being moved to pm:blocked with Blocked-by: pointing at this issue in the same write, so its queue label stops claiming it is dispatchable and the reverse index returns it automatically when this is answered.

Suggested routing (triage's call, not this seat's)

If the ruling is A, it is a domain:ui implementation card and returns to objectui. If B, it lands in spec + validate and belongs to whichever lane holds that surface. Naming that dependency is the reason this is one card and not two.

Refs: objectstack#12183 (the four-member ruling, 3/3 complete) · objectui#7135 · objectui#6757 · objectui#7091 · objectui#7117 / PR #7133 (the measurement) · objectstack-ai/hotcrm#734.

Activity

  1. huangyiirene commented on Sep 1, 2026

    @huangyiirene
    Collaborator

    裁决:B —— user:profile 明示不可被作者放置;渲染器不建(维护者 2026-09-01,总监批 #26)

    项目总监席 · session session_01KGtaLpkW1mycWgkbSb3H6t · 维护者对本批逐字:「同意」。

    1. B:spec 与 validate 明示 user:profile 不可被作者放置 —— 编写期响亮拒绝(reference-diagnostics 家族),失败落在作者面前而不是用户面前的红面板;
    2. 渲染器不建:零测量拉动(四个姊妹拿 A 是因为有真实页面在用;本键没有)。日后真有应用要可放置的 profile 组件 ⇒ 带消费者的特性请求另立卡,届时 B 可加法翻 A;
    3. PALETTE_EXCLUSIONS 条目不动(两向都正确,objectui#6071/standalone-stack.test.ts hand-mirrors appDefaultPermissionSetName and calls the copy "the exact CLI wiring" — a conformance claim over a duplicate of the rule #7092/fix(verify,plugin-security,cli): bootStack honours the app-declared default permission set (#7001) #7091 已定,本裁决重申卡面的 ⚠️);
    4. 裁决理由入册:用户档案是 shell chrome(头像菜单),主流产品无一把它做成页面可放置组件 —— B 是对结构事实的诚实声明,不是能力欠账;
    5. 路由:落点 spec + validate ⇒ 本仓 domain:spec 排队;条款②(明示拒绝 = accept-set 收窄)⇒ 契约复审档;objectui#7135 由 ui 车道按 B 收口(其 Blocked-by: 反向索引自动回队)。

    状态转移(同笔)

    needs-user-decision → pm:queue;补挂 domain:spec;priority:p3 不动。


    Generated by Claude Code

  2. zhuangjianguo commented on Sep 3, 2026

    @zhuangjianguo
    Collaborator

    Claim: PM loop, domain:spec seat (seat post #6017), R4 of this shift — implementing ruling B (user:profile explicitly not author-placeable) on the spec + validate side; objectui#7135 closes on B through its own lane
    Session: session_0174WZTU6XcFcS7g2kykC53i (GitHub zhuangjianguo)
    Branch: claude/issue-14159-user-profile-not-placeable
    Worktree: objectstack-issue-14159
    Domain: domain:spec
    File surface: packages/spec/src/ui/component.zod.ts — ComponentPropsMap['user:profile'] (:2862, today emptyProps('user:profile')) becomes a refusal at the schema door: an authored user:profile element is refused with code + path + a first sentence saying it is shell chrome (the avatar menu), not a page-placeable element, and that no renderer exists by ruling (objectui#7135); the docblock at :321 (the empty-props list) loses the member; packages/spec/src/ui/page.zod.ts — the placeable-type list at :68 loses user:profile (or carries the tombstone the family uses for retired members — the dev measures which spelling the unknown-key / retired-member machinery already reads and follows it) · packages/spec/src/ui/component.test.ts:1025 — the accept pin flips to a refusal pin; a positive control (global:search still parses) · validate: measure whether the schema-door refusal already surfaces through os validate with a located message (then no lint rule — one defect, one door); if validate swallows or generalises it, the packages/lint component-props family (validate-component-props.ts) gains the located diagnostic · generated artifacts via check:generated --fix (JSON schema, authorable surface, references/ui/component.mdx / page.mdx) · hand-written docs that list user:profile as placeable (measure content/docs/ui/**) · .changeset/*.md @objectstack/spec at the level the strictness ledger's precedent gives an enforce-or-remove refusal of a never-rendered member (the dev cites the precedent; the contract review judges) · needs:contract-review on the PR AND this card in the same stroke once the PR exists. ⛔ Untouched: objectui (PALETTE_EXCLUSIONS stays as is — the ruling's point 3), every other member of the two lists, content/docs/releases, skills.
    Container & model: M, mode:subagent, model: fable (CONTRACT_REVIEW_TIER). node scripts/pm/dispatch-gates.mjs --tier on ui/component.zod.ts + ui/page.zod.ts (explicit paths, 22:30Z): "no path-derived mandate" + "Clause ② SUSPECT surface" (⇢ packages/spec/src/**); tier from content — an accept-set narrowing on a published schema.
    Clause-②: yes — accept-set narrowing (an authored element type is refused); ⛔ no pre-hang, the dual carrier is hung with the PR; the dev's own claim comment carries the same Clause-②: yes line.
    Serial constraints cleared: open-PR file inventory refreshed at 22:29Z (23 open PRs, 203 files): none touches ui/component.zod.ts, ui/page.zod.ts or packages/lint/src/validate-component-props.ts (positive control: 9 packages/spec/ paths in the list); lane siblings in flight (#14104, #14149 dispatched in this stroke on automation/**, PR #15098 ui/action.zod.ts, PR #15101 ui/view.zod.ts + kernel/functional-completeness.ts) file-disjoint; no remote branch exists for this card (22:31Z).
    H17 on-hold trigger-file index (#9857 body, read 20:38Z): neither ui/component.zod.ts nor ui/page.zod.ts is a declared trigger file — no notice owed.
    Decision re-read (1 comment): director ruling 5494656898 (2026-09-01, batch #26, maintainer verbatim 「同意」): B — spec and validate state explicitly that user:profile is not author-placeable (a loud authoring-time refusal, the reference-diagnostics family: the failure lands before the author, not as a red panel before a user); no renderer is built (zero measured pull; a future consumer files a feature card and B flips to A additively); ⛔ PALETTE_EXCLUSIONS untouched; rationale on record (a user profile is shell chrome; no mainstream product makes it a page-placeable component); route: spec + validate ⇒ this lane, Clause ② (a narrowing) ⇒ contract review; objectui#7135 closes under B through its Blocked-by: index. Type field: unset (triage's; the ruling is explicit, so the card is dispatched on it — a Task by the boundary test: a declared-but-never-rendered member is refused, no widening). Premise re-read on origin/main 29db3cd2 (22:29Z): ComponentPropsMap['user:profile'] is emptyProps('user:profile') at component.zod.ts:2862; page.zod.ts:68 lists it beside global:search / global:notifications; component.test.ts:1025 pins that its empty props parse. Premise holds; nothing of the ruling has landed.


    Generated by Claude Code

  3. zhuangjianguo commented on Sep 3, 2026

    @zhuangjianguo
    Collaborator

    Dispatch (R4 of this shift, 2026-09-03T22:32Z) — domain:spec seat, session_0174WZTU6XcFcS7g2kykC53i, seat post #6017. mode:subagent, model: fable (CONTRACT_REVIEW_TIER), size M, Clause ② yes (dual carrier hung with the PR). The dev leaves its own Claim: comment below carrying Clause-②: yes; the assignee stays the PM's.

    Dispatch text handed to the dev, in brief (ruling 5494656898's five points are quoted untranslated and marked non-renegotiable):

    • ComponentPropsMap['user:profile'] becomes a schema-door refusal by NAME with a located message (shell chrome, no renderer by ruling, objectui#7135), following the retirement spelling the existing readers already understand (measured first); the page placeable list loses the member the same way; the accept pin at component.test.ts:1025 flips to a refusal pin with controls; one reverse-verification leg.
    • validate: measure whether the schema refusal already surfaces through os validate with the located message — a lint rule only if it does not (one defect, one door), declared in the claim before editing packages/lint.
    • Generated artifacts, hand-written docs listing the shell singletons, a spec changeset at the level the strictness ledger's enforce-or-remove precedent gives (cited; the contract review judges), the strictness ledger entry if the gate asks; the showcase / example apps validated to prove none authors user:profile (a stop if one does).
    • Landing: draft PR Fixes #14159, two-limb Clause ② line, needs:contract-review on PR and card in the same stroke with readbacks, ⛔ no ready flip; report as os-dev-report here. ⛔ objectui (PALETTE_EXCLUSIONS stays), every other member of the two lists, no renderer or placeholder.

    Generated by Claude Code

  4. claude commented on Sep 3, 2026

    @claude
    Contributor

    Claim: os-dev developer subagent for #14159 — implementing ruling B (user:profile explicitly not author-placeable) on the spec + validate side, under the domain:spec PM seat's claim above (comment 5532990105; the assignee is the PM's and stays so).
    Session: session_0174WZTU6XcFcS7g2kykC53i (GitHub zhuangjianguo), mode:subagent, size M
    Branch: claude/issue-14159-user-profile-not-placeable (pushed empty first, as the write-route probe)
    Worktree: objectstack-issue-14159 at origin/main 29db3cd2
    Clause-②: yes
    Clause-② reading: path limb — packages/spec/src/** (the SUSPECT surface dispatch-gates --tier names); content limb yes — accept-set narrowing: an authored user:profile element type is refused at the schema door.

    File surface (measured on 29db3cd2):

    • packages/spec/src/ui/page.zod.ts — PageComponentType loses user:profile; a RETIRED_PAGE_COMPONENT_TYPES map (retired type → prescription, the enum-VALUE-narrowing spelling CHATTER_POSITION_RETIRED / MASTER_DETAIL_FORM_TYPE_RETIRED already use) feeds the enum's own error map AND a check on PageComponentSchema.type, so the open string arm cannot re-admit the name — the node-level refusal the element:filter / element:form docblocks recorded as "not expressible here".
    • packages/spec/src/ui/component.zod.ts — the ComponentPropsMap['user:profile'] row becomes a refusing tombstone (the retiredKey channel at element grain: refuses every input with the same prescription); the empty-props docblock at :321 loses the member.
    • packages/spec/src/ui/component.test.ts — the :1025 accept pin flips to a refusal pin (code + path + first sentence); a page-door pin through PageSchema at the element's path; positive controls (global:search, global:notifications still parse) and preservation (app:launcher, nav:menu, nav:breadcrumb unchanged).
    • packages/spec/src/ui/component-type-vocabulary.test.ts — the derived reserved-namespace pin loses user (the enum's only user: member goes; the derivation itself is untouched).
    • generated artifacts via check:generated --fix (authorable-surface/, json-schema.manifest/, api-surface/, content/docs/references/ui/page.mdx / component.mdx, whatever else the check proves stale).
    • content/docs/ui/pages.mdx:185 — the Utility line says the truth (shell chrome, not author-placeable, by ruling).
    • .changeset/user-profile-not-placeable.md — @objectstack/spec, level and precedent stated in the PR body.
    • docs/audits/2026-07-unknown-key-strictness-ledger.md — only if check:strictness-ledger asks for an entry.
    • packages/lint/src/validate-component-props.ts — NOT edited unless the os validate measurement shows the schema-door refusal is swallowed or generalised; if it is, this claim is amended before that edit.

    ⛔ Untouched: objectui (PALETTE_EXCLUSIONS stays — the ruling's point 3), every other member of PageComponentType / ComponentPropsMap, content/docs/releases, skills. No renderer, no placeholder, no scaffold.

    Premise re-read on 29db3cd2: holds — the row at component.zod.ts:2862 is emptyProps('user:profile'), the enum at page.zod.ts:68 lists it, the accept pin at component.test.ts:1025 parses {}, and git grep finds zero authored user:profile nodes in examples/** or packages/** sources (only the spec's own two declarations, the test pin, and the generated docs).

    Generated by Claude Code


    Generated by Claude Code

  5. claude commented on Sep 3, 2026

    @claude
    Contributor

    os-dev-report

    {
      "issue": 14159,
      "status": "done",
      "branch": "claude/issue-14159-user-profile-not-placeable",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/15112",
      "premise_still_valid": true,
      "summary": "Ruling B implemented on the spec side: user:profile leaves PageComponentType and is refused BY NAME with one located prescription at three doors — the enum's own error map, a new check on PageComponentSchema.type (the smallest mechanism the open string arm required, contained in packages/spec/src/ui, reusing the family's enum-value-narrowing ReadonlyMap shape as RETIRED_PAGE_COMPONENT_TYPES), and the kept ComponentPropsMap row now a z.never tombstone refusing every bag including {}. The validate measurement shows the schema-door refusal already surfaces through os validate at step 2 with the located message (regions: code custom at pages.0.regions.0.components.1.type; slots: nested under the slot union's invalid_union, rendered with the absolute path), with the global:search control exiting 0 — so no lint rule was added and packages/lint is untouched. Generated artifacts regenerated (check:generated exits 0 on the second run), content/docs/ui/pages.mdx corrected, changeset @objectstack/spec minor (post-cut lockstep convention; the two cited 17.0.0 precedents were major only because that release was the major) with ADR-0087 not-required (no-migration-prescription), the #7596 disposition; needs:contract-review hung on PR #15112 and on #14159 in the same stroke and read back on both. Deviation for the review: the customer-facing prescription names no issue id because check:doc-authoring (maintainer ruling 2026-08-12) refuses citation-shaped tokens in text printed at the customer — it says 'by ruling' and carries ADR-0049/ADR-0078; the issue anchors sit in the adjacent source comment. PALETTE_EXCLUSIONS, objectui, every other member of both lists, releases and skills untouched; no renderer or placeholder.",
      "tests": "Final head bf4716f2, every exit captured before any pipe, verdict lines quoted from the gates. Spec build under os-verify-lock.sh: 'VERDICT command-exit 0', 'DTS Build success', 'check-dts-emitted: 34/34'. Spec pins (vitest run --maxWorkers=2 src/ui/component.test.ts src/ui/component-type-vocabulary.test.ts src/ui/page.test.ts): 'Test Files 3 passed (3) · Tests 335 passed (335)'. Spec typecheck (tsc + scripts + test layer): exit 0, 'check:test-typecheck: OK — 54 file(s) / 261 error(s) / 145 pinned signature(s) held'. check:generated after --fix (api-surface, export-origins, docs were the stale three): '✓ All 15 generated artifacts are up to date.'. Downstream @objectstack/lint vitest + typecheck under the lock: 'Test Files 94 passed (94) · Tests 2905 passed (2905)', 'VERDICT command-exit 0'. eslint --no-inline-config over the four edited TS files: exit 0 (targeted, not the repo-wide pnpm lint; type-aware linting is off so untouched files' verdicts cannot move). check-adr-0087-registration --base 29db3cd2: '✓ 1 declared-breaking changeset(s), each carrying an ADR-0087 disposition'. check-changeset-no-major: '✓ This diff introduces no major bump.'. check-system-context-census after the last edit: 'OK — 106 elevation read sites … all anchored' (no --fix). check:nul-bytes: 'OK … no raw ASCII control bytes'. check:doc-authoring: '✓ 14685 customer-facing string(s) across 723 spec sources clean' (it was RED on the first spelling — the three issue ids — and green after stripping them). dispatch-gates.mjs --repo objectstack-ai/objectstack --commands with no paths (91 families from the merge base; includes check:generated, check:authorable-surface, check:liveness, check:docs, check:api-surface, check:strictness-ledger, check:yaml-examples, check:variant-docs, check:engine-double-contract, check-half-states …) run at bf4716f2: 86 of 91 exit 0. NOT MEASURED, each by the gate's own words: check-test-completeness (exit 3, needs a saved turbo test log), check:react-declaration-parity (exit 1, MANIFEST not set — objectui's sdui.manifest.json, on-demand by ruling), check:skill-examples (exit 1 — the client-SDK surface refused because packages/client-react/dist is unbuilt here), check:dual-build-cjs-loads and check:type-check-debt (exit 3 PREREQUISITE NOT MET — read every package's dist; this worktree built spec, formula, sdui-parser, lint, metadata-core only). validate measurement: tsx packages/cli/bin/run-dev.js validate on a fixture with a region node and a slot node authoring user:profile → exit 1, '✗ pages.0.regions.0.components.1.type / custom: `user:profile` is not a page-placeable element — …', '✗ pages.1.slots.header / invalid_union: Invalid input / ✗ pages.1.slots.header.type: `user:profile` is not a page-placeable element — …', '2 validation error(s) total'; --json carries the same under errors; the global:search control exits 0 '✓ Validation passed'. Shipped apps: importing all 21 examples/**/*.page.ts modules (definePage IS PageSchema.parse) through the rebuilt spec: 'page modules: 21 · imported clean: 21 · failed/authoring user:profile: 0', positive control (definePage on a user:profile node throws the prescription) true; os validate via the source CLI: app-crm and app-todo exit 0 '✓ Validation passed'; app-showcase and app-multi-package NOT MEASURED via the CLI (their configs import @objectstack/connector-* / @objectstack/types dist not built here) — covered for pages by the module proof and by git grep (zero authored user:profile in examples/** and packages/** at the base). Reverse verification, one leg from the committed state: both schema files restored to BASE 29db3cd2 in the worktree only, landing proven by content (RETIRED_PAGE_COMPONENT_TYPES occurrences page.zod.ts 6→0, component.zod.ts 4→0, enum line and emptyProps row back); same three test files under the lock: '6 failed | 329 passed' — the four refusal pins in the #14159 describe and the two vocabulary pins went red, the positive controls, the preservation pin and the open-arm pin stayed green (direction: red, as expected); restore via git checkout HEAD under a trap, proven by 'git diff HEAD --stat' empty, porcelain empty, and git hash-object equal to git rev-parse HEAD:path for both files (0f6e88ee…, 14d8bb44…). Not an ablation of built output, so no dist preflight applied — the pins import source.",
      "mcp_calls": "0 — every GitHub read and write went through the repo-scoped REST channel (probe GET /issues/14159 → 200 in the same session; claim comment, finding issue, PR, labels, report comment all REST) and git; dedup for the finding read 236 finding-labelled issues (state=all, 3 pages) plus 2 pages of recently updated open issues, grep-matched with the control word user:profile hitting #14159 and #6017",
      "open_questions": [
        {
          "question": "For the contract review, not a blocker: should a stored page row that carries a user:profile node be CONVERTED (an ADR-0087 D2 strip of the node) rather than refused at rehydration with the prescription? The changeset declares not-required (no-migration-prescription): the row had no keys to strip, element-filter-removed's docblock rules deleting authored page nodes out of a mechanical conversion, and the measured population is zero (Studio's palette has excluded the type since objectui 5e8965c).",
          "options": ["A keep as landed — refusal at every door including rehydration, no conversion, the #7596 disposition", "B add a D2 conversion user-profile-component-removed that deletes the node from regions/slots (registry + step-18 chain + fixture; outside this card's declared surface, a follow-up card)"],
          "recommendation": "A, because the family already ruled node deletion is a layout decision no conversion makes, and the population it would serve measures zero; B stays available additively if the review wants stored rows to keep loading silently"
        }
      ],
      "out_of_scope_findings": [
        "filed as #15110 (finding, unassigned): bare element:filter / element:form nodes still validate clean at every door — the node-level refusal this PR builds (RETIRED_PAGE_COMPONENT_TYPES) could close it, but adding members is a Clause ② narrowing and a ruling; and retired types (element:filter, element:form, now user:profile) remain 'Did you mean' candidates in KNOWN_COMPONENT_TYPE_CANDIDATES, so a typo can be renamed INTO a retired element",
        "report line, carried in #15110: packages/spec/src/ui/component-type-vocabulary.ts's docblock says the row set is 'exactly' the string-arm registrations plus element:filter / element:form — user:profile now joins that set; outside the declared surface, so not edited"
      ]
    }
    

    Generated by Claude Code


    Generated by Claude Code

  6. claude commented on Sep 4, 2026

    @claude
    Contributor

    Contract review (Clause ②) on PR #15112 — PASS · ACCEPT: comment 5533702051 (2026-09-04T00:00Z), by the domain:spec PM seat, session session_0174WZTU6XcFcS7g2kykC53i, seat post #6017; tier fuse read 23:55Z, --pair 15112 exit 0. Seat ruling on the report's open question: A (refusal at rehydration, no D2 conversion) — open to the maintainer's veto, reasons in the review. needs:contract-review cleared on both carriers in this stroke. Landing at all-green on bf4716f2 (provenance → ready → squash auto-merge → added_to_merge_queue); on MERGED this card closes via Fixes, pm:dispatched is stripped, landing note here, notification on objectui#7135.


    Generated by Claude Code

  7. claude commented on Sep 4, 2026

    @claude
    Contributor

    Landed — PR #15112 merged via the queue at 2026-09-04T00:38:27Z, merge commit 97a22639 (squash; origin/main tip 97a22639 at 2026-09-04T00:39Z, the merge commit is its ancestor). domain:spec PM seat, session session_0174WZTU6XcFcS7g2kykC53i, seat post #6017. Contract review PASS · ACCEPT 5533702051; provenance 5533788087.

    Probed on origin/main at 2026-09-04T00:39Z:

    • packages/spec/src/ui/page.zod.ts:85 — RETIRED_PAGE_COMPONENT_TYPES is exported; the enum's Utility line (:127) carries global:search, global:notifications only; the PageComponentSchema.type union carries the superRefine node-level refusal (:236).
    • packages/spec/src/ui/component.zod.ts:2903 — the row is retiredComponentProps('user:profile') (:373 the helper); git grep finds no emptyProps('user:profile') and no enum line still listing the value under packages/spec/src.
    • content/docs/ui/pages.mdx:185 — the Utility line says user:profile is not author-placeable.

    Card closed by the PR's Fixes; pm:dispatched stripped in this stroke (read back). H17 on-hold trigger-file index (#9857 body, read at 2026-09-04T00:39Z): no entry names any of the nine files. The component.zod.ts / page.zod.ts / component.test.ts / component-type-vocabulary.test.ts reservation in the seat post is released. Seat ruling recorded in the review (open to veto): open question A — refusal at rehydration, no D2 conversion. Consumer-side facts for objectui#7135's lane are posted on that card.


    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

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions