Skip to content

Edit organization: hide Parent Organization and Sort Order on a single-organization deployment with a field-group requiresFeature #30692

Closed

Description

@objectstack-fleet

domain:server#4 · os-elon-musk · session_016WV4czvZykUqhYxYXSSDt4

Filing gate: ③ a maintainer-directed task. Ruling recorded on #30210 in comment 6670372892 (domain:server#2): the maintainer answered 「同意」 to the presentation, which says "Row 4 A (separate domain:server card, presentation §2)". This card carries row 4 A of #30210. #30210 keeps row 4 C (the help text, PR #30686) and row 3 D, and closes without this card.

Business reason

On a deployment that runs one organization, Edit organization shows 上级组织 / Parent Organization and 排序 / Sort Order. They do nothing there. Row 4 C (PR #30686) only adds a help line saying so. This card hides the two fields where they cannot matter, so a single-organization administrator never sees them. Without it, every single-organization customer keeps seeing two fields that read like they configure something.

Ruled shape (verbatim from 6670372892)

Row 4 A (separate domain:server card, presentation §2): a field-group-level requiresFeature: 'multiOrgEnabled', lowered at resolve time to the group's visibleWhen; scope = the packages/spec field-group schema + packages/lint accepting the lowered gate + sys_organization declaring fieldGroups. The ui needs no change (record-details.tsx ~L232/L397 already bind field-group visibleWhen to features). The spec touch sets its review tier per the skill.

The precedent is the action-level requiresFeature, which is lowered into visible at parse time and stripped from the output (packages/spec/src/ui/action.form.ts L182 on main 66a8822b).

Reader who acts

domain:server claims it, per the ruling. The diff touches packages/spec/** (a new key on the field-group schema, a widening), so it is Clause-②: yes, Metadata-protocol: added, and owes the contract-review-tier review before the queue. Skills-docs: is owed in the PR.

Re-check

  • grep -n "requiresFeature" packages/spec/src/data/object.zod.ts: no field-group key yet (0 hits on main 66a8822b).
  • grep -n "fieldGroups" packages/platform-objects/src/identity/sys-organization.object.ts: not declared yet (0 hits on main 66a8822b).

Dedupe (issue search, open and closed): requiresFeature field group 15 hits, multiOrgEnabled fieldGroups 2, field-group requiresFeature 7, sys_organization fieldGroups 6. The only match is #30210 itself. New.

Activity

  1. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: audit · p3 kept · domain:server · 2026-11-05T22:55Z

    ⛔ Not a claim.


    Generated by Claude Code

  2. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-elon-musk · session_016WV4cyvF7SP65frVFAYLv7

    Claim: PM loop round 4 · 2026-11-06T02:45Z
    Session: session_016WV4cyvF7SP65frVFAYLv7
    Account: os-elon-musk (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: the card thread's designated claude/project-thread-* branch; this claim is re-posted whole with it once the thread reports it, branched from main
    Worktree: objectstack-issue-30692
    Domain: domain:server
    Seat: domain:server#5
    File surface: packages/spec/src/data/object.zod.ts (ObjectFieldGroupSchema gains requiresFeature, lowered into the group's visibleWhen and stripped from the output, as action.form.ts L182 does for actions) and the spec artifacts its gates regenerate (liveness, json-schema, content/docs/references/**); packages/lint/src/** (accept the lowered gate); packages/platform-objects/src/identity/sys-organization.object.ts (declare fieldGroups, Parent Organization and Sort Order behind requiresFeature: 'multiOrgEnabled'); their tests; the skills/** lines the Skills-docs: line names; changesets. ⛔ ui/** (the ruling says the ui binds field-group visibleWhen already; stop and report if it does not). Cross-domain by the maintainer's ruling 6670372892 on #30210 (row 4 A names domain:server)
    Container & model: M, mode:thread, model: default, effort: high; contract review at the contract-review tier by an agent other than the drafter, before the queue
    Clause-②: yes (a new key on the field-group schema)
    Metadata-protocol: added
    Responsibility: a single-organization deployment shows Parent Organization and Sort Order on Edit organization, two fields that do nothing there | none | every single-organization administrator
    Thread-read: 6671686007
    Premise: holds on main 1371b9d: no field-group requiresFeature in object.zod.ts, no fieldGroups on sys_organization; row 4 C (PR #30686) merged
    Serial constraints cleared: no open PR touches object.zod.ts or sys-organization.object.ts; PR #30727 and PR #30753 touch packages/lint/src/index.ts (registry hunks), so the dev merges origin/main after either lands and re-checks open PRs on the surface before the push

  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 6, 2026
  4. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-elon-musk · session_016WV4cyvF7SP65frVFAYLv7

    Claim: PM loop round 4 · 2026-11-06T02:48Z (re-posted whole with the branch, superseding the claim above)
    Session: session_016WV4cyvF7SP65frVFAYLv7
    Account: os-elon-musk (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/project-thread-yaj4v5 (the card thread's designated branch, dev session session_016WV4cyCnzVPr9GuD38DdGt), branched from main 1371b9d
    Worktree: objectstack-issue-30692
    Domain: domain:server
    Seat: domain:server#5
    File surface: packages/spec/src/data/object.zod.ts (ObjectFieldGroupSchema gains requiresFeature, lowered into the group's visibleWhen and stripped from the output, as action.form.ts L182 does for actions) and the spec artifacts its gates regenerate (liveness, json-schema, content/docs/references/**); packages/lint/src/** (accept the lowered gate); packages/platform-objects/src/identity/sys-organization.object.ts (declare fieldGroups, Parent Organization and Sort Order behind requiresFeature: 'multiOrgEnabled'); their tests; the skills/** lines the Skills-docs: line names; changesets. ⛔ ui/** (the ruling says the ui binds field-group visibleWhen already; stop and report if it does not). Cross-domain by the maintainer's ruling 6670372892 on #30210 (row 4 A names domain:server)
    Container & model: M, mode:thread, model: default, effort: high; contract review at the contract-review tier by an agent other than the drafter, before the queue
    Clause-②: yes (a new key on the field-group schema)
    Metadata-protocol: added
    Responsibility: a single-organization deployment shows Parent Organization and Sort Order on Edit organization, two fields that do nothing there | none | every single-organization administrator
    Thread-read: 6671686007
    Premise: holds on main 1371b9d: no field-group requiresFeature in object.zod.ts, no fieldGroups on sys_organization; row 4 C (PR #30686) merged
    Serial constraints cleared: no open PR touches object.zod.ts or sys-organization.object.ts; PR #30727 and PR #30753 touch packages/lint/src/index.ts (registry hunks), so the dev merges origin/main after either lands and re-checks open PRs on the surface before the push

  5. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-elon-musk · session_016WV4cyvF7SP65frVFAYLv7

    Claim: PM loop round 4 · 2026-11-06T03:04Z (re-posted whole: the branch, and the file surface widened per the dev's note, superseding the claims above)
    Session: session_016WV4cyvF7SP65frVFAYLv7
    Account: os-elon-musk (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/project-thread-yaj4v5 (the card thread's designated branch, dev session session_016WV4cyCnzVPr9GuD38DdGt), branched from main 1371b9d
    Worktree: objectstack-issue-30692
    Domain: domain:server
    Seat: domain:server#5
    File surface: packages/spec/src/data/object.zod.ts (ObjectFieldGroupSchema gains requiresFeature, lowered into the group's visibleWhen and stripped from the output, as action.form.ts L182 does for actions) and the spec artifacts its gates regenerate (liveness, json-schema, content/docs/references/**); packages/spec/src/kernel/public-auth-features.ts (lowerRequiresFeature gains a slot argument, visible by default and visibleWhen for a group, so the group reuses the action's one helper; one gatedInputs row sys_organization.fieldGroups.group_structure on multiOrgEnabled, the path grammar extended to OBJECT.fieldGroups.KEY) and its tests; packages/lint/src/** (accept the lowered gate); packages/platform-objects/src/identity/sys-organization.object.ts (declare fieldGroups, Parent Organization and Sort Order behind requiresFeature: 'multiOrgEnabled'), packages/platform-objects/src/feature-gate-guard.test.ts (walks field-group visibleWhen both ways), and the packages/platform-objects translation bundles for the four new section labels; their tests; the skills/** lines the Skills-docs: line names; changesets. ⛔ ui/** (the ruling says the ui binds field-group visibleWhen already; stop and report if it does not). Cross-domain by the maintainer's ruling 6670372892 on #30210 (row 4 A names domain:server)
    Container & model: M, mode:thread, model: default, effort: high; contract review at the contract-review tier by an agent other than the drafter, before the queue
    Clause-②: yes (a new key on the field-group schema)
    Metadata-protocol: added
    Responsibility: a single-organization deployment shows Parent Organization and Sort Order on Edit organization, two fields that do nothing there | none | every single-organization administrator
    Thread-read: 6671686007
    Premise: holds on main 1371b9d: no field-group requiresFeature in object.zod.ts, no fieldGroups on sys_organization; row 4 C (PR #30686) merged
    Serial constraints cleared: no open PR touches object.zod.ts or sys-organization.object.ts; PR #30727 and PR #30753 touch packages/lint/src/index.ts (registry hunks), so the dev merges origin/main after either lands and re-checks open PRs on the surface before the push

  6. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-elon-musk · session_016WV4cyvF7SP65frVFAYLv7
    os-dev-report

    {
      "issue": 30692,
      "status": "done",
      "branch": "claude/project-thread-yaj4v5",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/30810",
      "session": "session_016WV4cyCnzVPr9GuD38DdGt",
      "premise_still_valid": true,
      "summary": "Field groups gain requiresFeature from the action key's PUBLIC_AUTH_FEATURES vocabulary. It lowers at parse into the group's visibleWhen through the shared lowerRequiresFeature (new optional slot argument), is stripped from the output, and an unknown flag is refused. Beside an authored visibleWhen the two AND-combine, author first: (AUTHORED) && GATE. packages/lint accepts exactly that lowered trailing gate on the field-group root verdict (withoutLoweredFeatureGate); any other features read stays refused, and the message now points at requiresFeature. sys_organization declares four fieldGroups in field order, and group_structure (parent_organization_id, sort_order) carries requiresFeature: 'multiOrgEnabled'. The registry books sys_organization.fieldGroups.group_structure, and the completeness guard walks groups. There is no ui change: both renderers already bind features via usePredicateScope. Row 4 C help text is kept and still reachable wherever multiOrgEnabled is on. Head 24375ec4, 28 files.",
      "tests": "Red on main 1371b9d8 (object before, tests after): sys-organization-group-structure-gate.test.ts 3 failed / 1 passed. New pins: spec field-group-requires-feature.test.ts 6 (lowering + strip, opt-in gate, unknown flag refused at requiresFeature, both keys AND-composed from string and envelope, unchanged without key, inside ObjectSchema.create); platform-objects gate test 4 (off hides, on shows, only that group gated, order kept); lint #30692 describe (3 lowered shapes clean at door + build, unlowered key clean, 5 hand-written features shapes keep the verdict, prescription names requiresFeature). Full suites on 24375ec4: spec 818/818 files 25834 tests; lint 195/195 8235; platform-objects 117/117 1589. Ablation 1, spec lowering via dist: ablation-replace blob 47ddc173 -> c0bfefc3, preflight marker in 10 built files; red spec 4 failed / 2 passed, platform-objects 4 failed incl. the guard forward row; restored to the HEAD blob, git diff HEAD empty, preflight --absent clean, 118/118 green. Ablation 2, lint peel (source-imported): blob 7b9a6ec1 -> 85289f1e; red on the 3 lowered-shape CONTROL cells; restored, git diff HEAD empty.",
      "gates": "Local on 24375ec4 after a whole-tree build: dispatch-gates --commands derived 105 families, each exit code captured to a file before any pipe, all 105 exit 0; --ran: 105 run, 0 NOT-MEASURED, 0 UNRUN. pnpm lint 0, check:cli-command-ids 0, check:adr-symbol-anchors 0, check:dev-prereqs 0, check:skill-frame-freshness 0, check-i18n-bundles in sync. On ab3d3a94: the three typechecks 0 and check:generated 0. PR check-runs: just started when this was posted; the seat ACCEPT reads them.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "4 — mcp__github__issue_read x3, mcp__github__list_pull_requests x1 (all reads; no write tool)",
      "api_writes": "2 — fleet-write pr_create (POST /repos/objectstack-ai/objectstack/dispatches, run 42163344828, PR #30810, read-back identical); this comment via post-stamped.mjs (POST /repos/objectstack-ai/objectstack/issues/30692/comments)",
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": [
        "carrier: follow-up PR (skills seat) · skills/objectstack-data/references/examples-objects.md Field Groups section should name visibleWhen and requiresFeature beside collapse; owed per the Skills-docs line, kept out so this PR is not a governed skills/** change · noted, not filed",
        "deviations (not findings): file surface widened with seat agreement (claim re-post 6675727155) to public-auth-features.ts + tests, feature-gate-guard.test.ts, object.form.ts, liveness ledger + generated api-surface/export-origins/references, translation bundles *.objects.generated.ts / *.metadata-forms.generated.ts / source-hashes (not #30760's {locale}.ts), and two echo-decision population pins; prerequisites: git fetch --unshallow and a whole-tree build before check-i18n; NODE_OPTIONS heap 8192 for check:test-typecheck"
      ]
    }
  7. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-elon-musk · session_016WV4cyvF7SP65frVFAYLv7

    Landed · 2026-11-06T06:38Z · PR #30810

    Probe Reading
    PR #30810 merged, through the merge queue (seat ACCEPT 6678039163 on head 559cf504; contract review PASS 6677172123 and delta PASS 6678016867; not governed, +630/-48)
    #30692 closed by Fixes #30692

    Shipped: row 4 A of #30210. A field group can carry requiresFeature, which is lowered into its visibleWhen. sys_organization's Group Structure group (Parent Organization, Sort Order) shows only where multiOrgEnabled is on, so a single-organization deployment no longer sees the two fields. The group is fail-closed: on a multi-organization deployment it appears once the console has read /api/v1/auth/config. Open: #30812 (the skills line). Named for later, no card yet: seeding the console's features with the registry defaults (ui lane).

    State change: pm:dispatched removed, assignee cleared.

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

    domain:serverDomain lane — seat card indexed by label:pm:seatenhancementNew feature or requestpriority:p3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions