Skip to content

plugin-approvals: the Approval Requests column "Record ID" shows the target record's name, so call the field "Record" (#27356 row 7) #28250

Closed

Description

@objectstack-fleet

domain:ui#3 · os-tesla · session_01L9qibz8HEj53Wx2uphTo2o

Filing gate: ① a named defect seen in a customer walk-through (a label that says the wrong thing). Carried out of #27356 row 7, which the ui seat cannot fix: the label is server metadata.

Business reason

Who: an administrator reading Setup › Approval Requests (HotCRM walk-through, hotcrm#2320 Setup S9). What happens: the column headed "Record ID" shows the record's name and icon (the console draws the pointer target, objectui#13036), so the header and the cell disagree and the admin is told to read an id that is not there. If not done: every approvals list, the request's highlights strip and its Details tab keep the wrong word.

Mechanism

  • packages/plugins/plugin-approvals/src/sys-approval-request.object.ts L269–270: record_id: Field.text({ label: 'Record ID', … }), the id half of the request's pointer pair (ADR-0052 §5).
  • L121–126: the list views carry record_id alone and the console draws the target record (its object's icon and name) in that cell.
  • The same column heads all four list views (L133, L142, L156, L166) and highlightFields (L82).

Fix

Relabel the field "Record" (the walk-through's word), and carry the new label through wherever this object's field labels are translated or pinned (language packs, label tests). The field name record_id, its queries and its lock pair stay unchanged.

Acceptance

  • The Approval Requests list header, the request's highlights and Details read "Record" (and its translation where a pack carries the field).
  • No query, seed or pointer-pair test changes behaviour; record_id is still the stored name.

Reader and dedupe

Refs #27356 · Refs #24501

Activity

  1. added
    bugSomething isn't working
    pm:queueReady for the PM dispatch loop
    area:workflowApprovals and automation — the work that runs without a person driving it
    domain:serverDomain lane — seat card indexed by label:pm:seat
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Oct 30, 2026
  2. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#2 · os-tesla · session_01L9qibx5r5nhDMwpRs4SL6D

    Claim: PM loop round 4
    Session: session_01L9qibx5r5nhDMwpRs4SL6D
    Account: os-tesla
    Branch: claude/project-thread-wzzflr (the card thread's designated push branch, the recorded platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-28250
    Domain: domain:spec
    Seat: domain:spec#2
    File surface: packages/plugins/plugin-approvals/src/sys-approval-request.object.ts (the record_id label only), the translation bundles that carry it, label pin tests, changeset (patch). ⛔ no ui/** and no governed path (stop on breach; explain in the report)
    Container & model: S, mode:thread, model: TIER_DEFAULT, effort: high; label only, no contract review owed; cross-lane by the maintainer's 「座位之间可以协调,你有空你就可以派」 (2026-10-31T05:10Z)
    Clause-②: no (a label)
    Metadata-protocol: none
    Responsibility: n/a — not a defect card
    Thread-read: none
    Premise: holds (re-read at origin/main 3d9175d0; the gap named on the card is still there)
    Serial constraints cleared: none (no open PR edits this object's labels)
    Ruling-ref: none on the shape; dispatch authority = the maintainer's 「p3 也可以开发」 (2026-10-30T12:41Z) and 「每个座位并发可以5」 (2026-10-30T15:04Z); the card's filing gate ① (a named defect from a customer walk-through, #27356 row 7)

    Dispatched 2026-10-31T05:21Z to a card thread of the seat's project; the order lives in the project. ⛔ The thread posts no claim and writes no assignee.

  3. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#2 · os-tesla · session_01L9qibz9o2UXx9eqto4hqY3

    os-dev-report

    {
      "issue": 28250,
      "status": "done",
      "branch": "claude/project-thread-wzzflr",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/28347",
      "session": "session_01L9qibz9o2UXx9eqto4hqY3",
      "premise_still_valid": true,
      "summary": "sys_approval_request.record_id is labelled 'Record' instead of 'Record ID': the source label, the regenerated en bundle, and the hand-written zh-CN (记录), ja-JP (レコード) and es-ES (Registro) values, matching the words sys_approval_action.record_id already uses. Field name, queries, seeds and the object_name pointer pair are unchanged. No test pinned the old label, so none changes and no copy pin is added.",
      "tests": "head 27ee7b7d: pnpm --filter @objectstack/plugin-approvals test 1361/1361 and typecheck, lock VERDICT command-exit 0; check-i18n-bundles --write exit 0, sole diff the en record_id leaf. No ablation: no tested behaviour changed.",
      "gates": "dispatch-gates --commands at 27ee7b7d: 55 families, stdin /dev/null, exit codes before any pipe; --ran: 55 derived, 55 run, 0 NOT-MEASURED, 0 UNRUN, 0 red (check-plugin-teardown-shape --self-test and check:dual-build-cjs-loads first exit 3, re-run exit 0 after fetching pinned commit 621a4876 and building packages 77/77). CI check-runs: in_progress at report time. Record: spec-seat-2/r2026-10-30/out/28250-gates-ran-27ee7b7d.list",
      "line_budget": "20 changed lines (+15/-5), 6 files; under the 3000 threshold",
      "files_changed": [
        ".changeset/28250-approval-request-record-label.md",
        "packages/plugins/plugin-approvals/src/sys-approval-request.object.ts",
        "packages/plugins/plugin-approvals/src/translations/en.objects.generated.ts",
        "packages/plugins/plugin-approvals/src/translations/es-ES.objects.generated.ts",
        "packages/plugins/plugin-approvals/src/translations/ja-JP.objects.generated.ts",
        "packages/plugins/plugin-approvals/src/translations/zh-CN.objects.generated.ts"
      ],
      "deviations": [],
      "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
      "mcp_calls": "3 — mcp__github__issue_read (get, get_comments x2); 0 writes",
      "api_writes": "2 — fleet-write relay pr_create (#28347); post-stamped comment on #28250 (this report)",
      "open_questions": [],
      "out_of_scope_findings": [
        "class: a (user-visible label disagrees with the cell) · reach: not measured live; sys_audit_log list views audit_all / two more (plugin-audit sys-audit-log.object.ts L68, L78, L131) list record_id, drawn as the pointer card per sys-audit-log-pointer-pair.test.ts, under the header 'Record ID'; sys_activity.record_id and sys_mail_association.record_id (highlightFields) carry the same label on a pointer id half · dedupe words: audit log Record ID column label pointer record name · carrier: the seat (same family as #28250, one follow-up card for the remaining pointer id halves)"
      ]
    }
  4. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#2 · os-tesla · session_01L9qibx5r5nhDMwpRs4SL6D

    Claim amendment · file surface · #28250 · 2026-10-31T05:48Z

    Amends claim 6539513940 (same session, same branch claude/project-thread-wzzflr). The card thread found the same label defect on other objects: sys_audit_log lists record_id as a pointer column headed "Record ID" in three views, and sys_activity and sys_mail_association carry the same label. The seat folds them into this PR wherever the console draws the pointer target (name and icon) in that cell, so the header and the cell agree; a field whose cell really shows an id keeps "Record ID".

    File surface adds: the record_id label on sys_audit_log, sys_activity and sys_mail_association (each only where the cell draws the pointer target), their translation bundles and label pins. Names, queries, seeds and pointer pairs stay unchanged. Serial constraints for the added files: none known; the thread checks open PRs before pushing.

  5. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#2 · os-tesla · session_01L9qibx5r5nhDMwpRs4SL6D

    Claim amendment withdrawn · #28250 · 2026-10-31T06:04Z

    Withdraws amendment 6539738537. The maintainer ruled at 2026-10-31T06:04Z that cross-lane cards already in progress continue but take no new cross-lane work, so this PR stays on sys_approval_request.record_id only (claim 6539513940). The same label on sys_audit_log, sys_activity and sys_mail_association is filed as its own domain:server card.

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

Metadata

Metadata

Assignees

Labels

area:workflowApprovals and automation — the work that runs without a person driving itbugSomething isn't workingdomain:serverDomain lane — seat card indexed by label:pm:seatpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions