Skip to content

console: the Setup → Positions list has no Description column, so a position's description is served but never shown (hotcrm#2249) #25909

Closed

Description

@objectstack-fleet

维护者速读

  • 事由: 岗位的 description 已随元数据返回,但 Setup → Positions 列表没有「描述」列,管理员看不到。
  • 要做: 在 console 的岗位列表加一列 Description,和旁边的权限集列表一样。
  • 完成标准: 声明了描述的岗位在列表里显示它,没声明的显示为空。

Filed by the repo:hotcrm seat 1 (os-elon-musk, session session_014xanhPEmGTMTfVH4UokwJT), as the platform half that objectstack-ai/hotcrm#2249 still needs. The governing text is the maintainer's 「平台相关的功能,应该尽量先改平台。」 (2026-10-18, hotcrm ledger 6245607810), the order objectstack-ai/hotcrm#2194 adopted (ruling 6354968262).

Why (measured)

Done when

Size: S. Grade: priority:p3.

Dedupe

Method: every objectstack-ai/objectstack issue updated since 2026-10-15 (any state), listed through the repo-scoped issues endpoint and matched case-insensitively on position, at 2026-10-25T04:30Z. 12 hits. #25333 and #25369 are the holders/sets half (closed). #25652 and #25701 are translation (closed; merged 2026-10-24T21:55Z, after 18.1.0). None covers a description column. New.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: transferred from objectstack and graded — enhancement · priority:p3 · domain:ui · area:records · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-25T04:56Z

    ⛔ Not a claim, ⛔ not a dispatch.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Transferred 2026-10-26T03:47Z from objectstack-ai/objectui#13504, with its comments and timeline; the old URL redirects here. objectui moved into this repository as the ui/ workspace (epic #25677) and is being archived (#25854). The body is left exactly as filed.

    Paths. The body names no file paths; the UI code it describes lives under ui/ here (the Console is ui/apps/console, the libraries ui/packages/*).

    No stale pm:dispatched or assignee to strip.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 2 · 2026-10-26T11:30Z
    Session: session_01SMps7wq7rBTk53e8KTSEup
    Account: os-steve
    Branch: claude/issue-25909-position-description-column
    Worktree: objectstack-issue-25909
    Domain: domain:ui
    Seat: domain:ui#2
    File surface: ui/packages/app-shell/src/services/builtinComponents.tsx (the position resource's listColumns only), ui/packages/app-shell/src/views/metadata-admin/ResourceListPage.positionGrants-25333.test.tsx (extend the fixture and header assertions); root .changeset/25909-position-description-column.md (stop on breach; explain in the report). scripts/sdui-manifest.record.json is expected to stay untouched, because app-shell is outside the registry closure. ⛔ ui/packages/i18n/src/locales/*.ts, ui/.github/** and the root .github/workflows/ci.yml are out of bounds.
    Container & model: S, mode:subagent, model: default tier, effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: the Setup → Positions list, which omits a column the permission and object lists have | the served position description (already on /meta/position, translated by the read gate) | every Setup admin telling positions apart
    Thread-read: 6407770237
    Premise: holds 2026-10-26T11:27Z — on origin/main 8a990d8b41, builtinComponents.tsx:215-234 declares the position columns Name / Label / Holders / Permission sets with no description key (control: the permission resource at 205-209 has { key: 'description', label: 'Description' }); the header localizes via the existing engine.list.col.description (app-shell metadata-admin/i18n.ts:244, :4034), and defaultCell renders an absent value as the empty cell.
    Serial constraints cleared: none — no open claim holds builtinComponents.tsx.
    Writes: PR only via the relay op pr_create; comments only via the relay write tools; ⛔ no GitHub MCP writes.

    • Ruling section: triage 6407765315 — show the position's description in the Setup → Positions list.
    • Suggested route: add { key: 'description', label: 'Description' } after Label (no width, flex like the permission list), before Holders and Permission sets; no custom render, no truncation (matches the permission list). Test: give one fixture position a description and leave the others without one; assert the localized header, the text, and the empty cell.
  4. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 25909,
      "status": "done",
      "branch": "claude/issue-25909-position-description-column",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/26100",
      "session": "session_01SMps7wq7rBTk53e8KTSEup",
      "premise_still_valid": true,
      "summary": "Premise held on origin/main c1ae4a45 (worktree base): the position resource's listColumns had Name/Label/Holders/Permission sets and no description; the permission resource has { key: 'description', label: 'Description' }; engine.list.col.description exists (app-shell metadata-admin i18n.ts:244 en, :4034 zh); defaultCell renders an absent value as EmptyValue. Added { key: 'description', label: 'Description' } right after Label, no width, no custom render, in ui/packages/app-shell/src/services/builtinComponents.tsx, and a root .changeset/25909-position-description-column.md ('@object-ui/app-shell': patch, Clause-② no, Metadata-protocol none). Extended ResourceListPage.positionGrants-25333.test.tsx: sales_manager carries a description, support_agent and auditor none; the new case asserts the localized header between Label and Holders, the served text, and the shared empty cell. Translated descriptions come from the server's translatePosition overlay on GET /meta/position; the console renders the served text and adds no lookup. Draft PR #26100 opened via the relay, assignee os-steve; worktree removed after.",
      "tests": "Red first: test-only commit 18603827 against the unchanged columns -> 'Unable to find role=\"columnheader\" and name \"Description\"', Tests 1 failed | 5 passed (lock VERDICT command-exit 1). Green at head 7a62f956: cd ui && pnpm exec vitest run --maxWorkers=2 packages/app-shell/src/views/metadata-admin/ResourceListPage.positionGrants-25333.test.tsx -> Test Files 1 passed, Tests 6 passed (VERDICT command-exit 0). 17 app-shell test files importing builtinComponents or rendering ResourceListPage with positions -> Test Files 17 passed, Tests 135 passed (VERDICT command-exit 0). pnpm --filter @object-ui/app-shell run type-check (tsconfig.json and tsconfig.test.json, which compiles the test) -> VERDICT command-exit 0. The red/green pair serves as the reverse verification: the test imports builtinComponents from src, so there is no dist to rebuild or mutate. Declared narrowing: the full app-shell suite (1730 test files) was not run locally and is left to CI. No test:repo or dogfood work is owed: the diff touches no packages/spec, CLI, or repo-project tests.",
      "gates": "At head 7a62f956: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 34 commands, each run with its exit code captured before any pipe: all 34 exit 0 (check-adr-0087-registration, check-changeset-no-major, check-closing-keyword-parity, check-comment-mask-corpus, check-empty-changeset, check-sdui-manifest, check-undeclared-dep-imports, their --self-tests, release-rehearsal-clone/release-pending-publish --self-test, spec check:duration-unit-keys, check:changeset-gate-self-tests, closed-ceremony-text, cross-package-test-inputs, dispatcher-error-vocabulary, driver-memory-census, engine-double-contract, gitlink-declared, nul-bytes, pm-changeset-deadline-census, published-files, query-options-erasure, refd-timer-probe, test-source-alias, tier-file-adoption, type-check-coverage, type-check-debt, watch-hint-literal, where-matcher). --ran: '34 derived famil(ies) accounted for — 34 run, 0 NOT-MEASURED (a DERIVED zero — all 34 recorded an exit code and none of them is 3)'. Roster gate flagged under .changeset: node scripts/check-changeset-fixed.mjs exit 0. check-sdui-manifest: intact, scripts/sdui-manifest.record.json untouched, as expected. CI on PR #26100 when this was written: 23 check-runs, 20 in_progress, 1 success, 2 skipped. in_progress is the true value; not waited on.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "0",
      "api_writes": "2 — one fleet-write relay dispatch (POST /repos/objectstack-ai/objectstack/dispatches; the run did pr_create POST /pulls draft + POST /issues/26100/assignees [os-steve], read back 3092 bytes identical), and this os-dev-report comment via post-stamped.mjs (POST /issues/25909/comments). git push x3 to the branch (not REST).",
      "open_questions": [],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #26100 comment 6415635829 · seat 2 · 2026-10-26T12:09Z

  6. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · seat 2 · 2026-10-26T12:39Z

    probe reading
    PR #26100 MERGED 2026-10-26T12:39Z, merge commit 04148aca, head 7a62f956 (ACCEPT 6415635829)
    origin/main at 9c796401, contains 04148aca (git merge-base --is-ancestor exit 0)
    queue branch gh-readonly-queue/main/pr-26100-*: 0 left
    card closed, via Fixes #25909 on #26100

    Status: pm:dispatched removed; the card is done. Nothing remains.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:recordsBusiness objects, records, the views that show data, usable forms, searchdomain:uienhancementNew feature or requestpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions