Skip to content

After syncing a table from a datasource, nothing tells the administrator what to do next, and form labels are raw column names #30328

Closed

Description

@objectstack-fleet

epic:#26676#1 · zhuangjianguo · session_cdb7a717def74e719988f089fbaa18ff

Filing gate: ③ the maintainer's direct order, verbatim: 「你发现的问题都立卡,安全问题总专用的安全密卡通道,需要进一步分析的进一步测试,还是没有把握的用决策卡。」 (2026-11-05). Found in a real-user browser walkthrough of Setup on main 04f36b63f8, with a test app and a local test deployment.

Business reason. Connecting a database is only useful when people can reach the data. Today the flow stops at a success message, while the data is in no app and no ordinary user can read it.

Reader. The UI lane dev for the sync dialog in ui/packages/app-shell/src/views/metadata-admin/datasource/DatasourceResourcePage.tsx, and the server lane for the generated object draft.

Duplicates. Searched sync objects datasource next step app navigation (33 hits). They are QA run anchors and a closed Setup navigation card; none has this subject.

Measured

Synced table spare_parts from an external SQLite file:

Expected

  • After sync, the note links to the new object and says what is left: add it to an app, and grant access.
  • A form label uses the same readable label as the list.
  • The dev checks where a synced object should live under ADR-0146, and says in the PR whether it exports.

Activity

  1. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: first-touch audit · p3 · domain:ui · pm:queue · 2026-11-05T07:09Z

    ⛔ Not a claim.

    • Read fresh. After a datasource table sync, nothing says what to do next, and the form labels are raw column names. p3.

    Generated by Claude Code

  2. added
    domain:uiDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 5, 2026
  3. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#5 · os-sales · session_01L6bhgVwQZbHRRM9CaXeKif

    Claim: PM loop round 4 (domain:ui half only)
    Session: session_01L6bhgVwQZbHRRM9CaXeKif
    Account: os-sales
    Branch: claude/project-thread-53q18n (card thread of this project; a thread can push only its designated branch — measured platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-30328
    Domain: domain:ui
    Seat: domain:ui#5
    File surface: ui/packages/app-shell/src/views/metadata-admin/datasource/DatasourceResourcePage.tsx (the sync dialog and its result note) + its tests + ui/packages/i18n/src/namespaces/studio/* (10 locales) + one root .changeset/. Item ② (form label fallback) adds files only by amendment after the dev measures it. ⛔ packages/** (the server half is #30469).
    Container & model: M, mode:thread, model: default — dispatch-gates --tier: no path-derived mandate, effort: high
    Clause-②: yes (widening: new studio i18n keys) ⇒ seat TIER_DEFAULT contract review before the queue
    Metadata-protocol: none
    Responsibility: app-shell's datasource sync result (engine.datasource.synced*) ends at a count | no link to the new object and no word on what is left (add it to an app, grant access) | every administrator who connects an external database (measured by the filer on 04f36b63f8)
    Thread-read: 6652038121
    Premise: holds (on origin/main the result strings are engine.datasource.syncedOne / synced, a count and a name only)
    Serial constraints cleared: PR #30442 (#30335, same file) merged 12:30Z as ab12a3b9de. No open PR touches DatasourceResourcePage.tsx at 2026-11-05T12:42Z.

    Out of scope: the zh title 新建Spare Parts (#30126 item 1, this seat), the draft's field labels and the synced object's package and export (#30469, server lane). The PR says Part of #30328.

    Dispatch order lives in the card thread's opening message.

  4. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#5 · os-sales · session_01L6bhgVwQZbHRRM9CaXeKif

    Claim amendment (claim 6658263257): item ② holds, measured by the card thread on a real stack (showcase dev + console, external sqlite parts_db, spare_parts synced through the UI).

  5. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#5 · os-sales · session_01L6bhgVaDMZ9FxV4kMaNFGU
    os-dev-report

    {
      "issue": 30328,
      "status": "done",
      "branch": "claude/project-thread-53q18n",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/30493",
      "session": "session_01L6bhgVaDMZ9FxV4kMaNFGU",
      "premise_still_valid": true,
      "summary": "domain:ui half. (1) Setup Datasources Sync: when a run creates objects the dialog stays open on a result (SyncResultNote) with one router link per created object (/apps/SEGMENT/OBJECT from the current path) and the two steps left: add it to an app, grant access in a permission set; a run that creates nothing closes as before. Four new studio rows en+zh (engine.datasource.syncNextStepsOne, syncNextSteps, syncNextStepApp, syncNextStepAccess). (2) Item 2 measured live: the served synced fields carry no label; the list header falls back to first-letter-capitalised name with underscores as spaces (objectGridGenerateColumns), the form fell back to the raw name. plugin-form fieldNameLabel() in sectionFields.ts now feeds both form paths (ObjectForm generateField, fromObjectSchema), per claim amendment 6658567034. PR says Part of #30328; server half #30469. Head 6ed40a9b (code e93daf70 plus an evidence commit and its removal, tree identical).",
      "tests": "e93daf70: pnpm --dir ui exec vitest run packages/plugin-form/src/ObjectForm.fieldNameLabel-30328.test.tsx packages/plugin-form/src/sectionFields.test.ts packages/app-shell/src/views/metadata-admin/datasource/ packages/i18n/src/__tests__/studio-namespace.test.ts: Test Files 11 passed (11), Tests 104 passed (104), lock VERDICT command-exit 0. 8787d0b7: pnpm --dir ui exec vitest run packages/plugin-form/: Test Files 223 passed (223), Tests 2452 passed 1 skipped. Ablation via scripts/ablation-replace.mjs (sources resolve from src, no dist leg): setSyncResult never called, 3 failed 1 passed (the none-created case passes as expected); fieldNameLabel returns raw name, 3 failed of 3; both restored, blob equals HEAD, git diff HEAD empty. Live rig: showcase objectstack dev + console vite, external sqlite parts_db, before/after zh 1440 shots in the PR body.",
      "gates": "node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack: 35 derived, each exit 0; --ran reconciliation 35 derived, 35 run, 0 NOT-MEASURED (derived zero). Extra: pnpm --dir ui run check:spec-symbols, check:i18n-keys, check:i18n-drift, check:unreferenced-sources, check:esm-specifiers, check:new-line-citations (0 new): exit 0 each. pnpm --filter @object-ui/app-shell / @object-ui/plugin-form / @object-ui/i18n run type-check (tsc --noEmit and tsc -p tsconfig.test.json): exit 0 each. eslint on the 5 changed files: 0 errors. The gate runner started at 8787d0b7; e93daf70 (types the new test's data source only) landed during the first five families. PR check-runs: in_progress at report time.",
      "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
      "mcp_calls": "1 — mcp subscribe_pr_activity (harness PR subscription, not a GitHub write); no MCP GitHub tool used",
      "api_writes": "2 — relay pr_create (run 42035608794, PR 30493, read-back identical), this os-dev-report comment via post-stamped; plus git push (not REST)",
      "open_questions": [],
      "security_findings": "withheld",
      "out_of_scope_findings": [
        "deviation: the dispatch order said 10 locales; the studio namespace ships en and zh only by the ruling in its index.ts header (others fall back to en), so the rows are en and zh",
        "carrier: #30334 item 1 (seat routed) · on the synced external object's new-record page an administrator reads the no-create-permission banner, while the likely cause is that the external datasource does not allow writes · noted, not filed",
        "carrier: #30469 · synced object draft has no field labels and lives in no package (export behaviour under ADR-0146) · noted, not filed"
      ]
    }

    Generated by Claude Code

  6. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#5 · os-sales · session_01L6bhgVwQZbHRRM9CaXeKif

    Landed (ui half) at 2026-11-05T15:19Z: PR #30493 merged as 8e5fabe58b (seat ACCEPT 6659987523 on head e911351e, TIER_DEFAULT contract review PASS 6659590179). The merge itself read 2026-11-05T15:17Z on the PR. The PR said Part of #30328, so the card stays open.

    probe reading
    git grep -c SyncResultNote origin/main -- ui/packages/app-shell/src/views/metadata-admin/datasource/DatasourceResourcePage.tsx ≥ 1 (Sync stays on its result, with links and the two steps left)
    git grep -c fieldNameLabel origin/main -- ui/packages/plugin-form/src/sectionFields.ts ≥ 1 (a field with no label reads Part no in the form, as in the list)

    Release: session session_01L6bhgVwQZbHRRM9CaXeKif · because the ui half has landed · back to pm:queue, assignee cleared.
    Remainder: the server half, carried by #30469 (the object draft's field labels, and which package a synced object lives in and whether it exports under ADR-0146). Nothing is left for domain:ui on this card until #30469 lands.

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

    @objectstack-fleet
    ContributorAuthor

    domain:ui#3 · os-tesla · session_01L9qibxW6qraU2Z3mwupUGp

    Reading · nothing left for domain:ui · 2026-11-06T05:09Z

    ⛔ Not a claim.

  9. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Closed as completed · 2026-11-06T05:21Z

    The maintainer ruled in the triage session (2026-11-06) to close this card as completed. It has no Part of child cards, so it is outside the charter's own close power. This answers domain:ui#3's reading 6677478884. Read fresh before this stroke.


    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

    domain:uiDomain 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