Skip to content

ui(studio): external-object fields show their datasource and read-only state; no DDL affordances on an external object (epic #27261 P1, D6 first half) #27279

Closed

Description

@objectstack-fleet

epic:#27261#1 · marchtian · session_017ihL2c5z3q4h8inrn5kwqV
Filing gate ③ (maintainer-directed). Ruling 6471382887 on #27261 (batch #423, maintainer 「立专题卡」 2026-10-28): the ontology-over-external-systems epic opens with Tier A (plugin driver, zero protocol change). Part of #27261. Filed by the director seat (session_01QSeKYo7qYsX6HsAneHBMP2, ledger objectstack#12708). ⛔ Not a claim; triage sets the lane and grade. Design: #27261 body; the first customer pull: #27130 (route d, design 6468011868).

Ruling-ref: 6471382887

维护者速读

  • 改了什么: Studio 对象页:外部绑定对象的字段标出来源数据源与只读;不显示会触发 DDL 的操作(加列 / 改类型)。
  • 为什么改: ADR-0015 欠的 Studio 半边里最小的一块;避免作者在 Studio 里对外部对象做平台会拒绝的事。
  • 风险与回滚: 只读显示;数据源页与 OpenAPI 导入是 P2。
  • 先看: ui/packages/app-shell/src/views/metadata-admin/。
  • 两分钟验证: 一个外部对象在 Studio 里字段带「来自 plan_gantt · 只读」标记,无「添加字段」按钮。
  • 需要您做的: 无。

Task

  • Read object.datasource / object.external in the object inspector; render the badge; hide DDL affordances.
  • Unit test.

Clause-②: no · Metadata-protocol: none. Size S. Lane: ui.

Epic: #27261 (parent; the epic PM dispatches pm:epic children). Dedupe: #27261, #27130, ADR-0015; no open card carries this slice.

Activity

  1. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#27261#1 · marchtian · session_017ihL2c5z3q4h8inrn5kwqV

    Lane domain:ui, as the card declares ("Lane: ui", ui/packages/app-shell/src/views/metadata-admin). Blocked-by: #27276 removed from the body and pm:blocked dropped: the card reads only the existing object.external / object.datasource (packages/spec/src/data/object.zod.ts, the external binding block) and does not depend on the spike. Both written by the epic PM on the maintainer's instruction (rulings 1 and 3 in the registration comment on #27261: 田騏, 「同意」, the epic PM's project thread).

  2. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#27261#1 · marchtian · session_017ihL2c5z3q4h8inrn5kwqV
    Claim: PM loop round 1 2026-10-28T15:14Z
    Session: session_017ihL2c5z3q4h8inrn5kwqV
    Account: marchtian
    Branch: claude/project-thread-6ml89f (this container can push only its designated branch; the claude/issue-<n>-<slug> convention is not available here, recorded as the measured platform exception)
    Worktree: objectstack-issue-27279
    Domain: domain:ui
    Seat: epic:#27261#1 (epic PM; no domain:* seat)
    File surface: ui/packages/app-shell/src/views/metadata-admin/** (object inspector / field list, plus its tests and i18n strings) (stop on breach; explain in the report)
    Container & model: S, not mechanical (UI judgment) → M treatment, mode:subagent, model: default tier (dispatch-gates --tier: "no path-derived mandate … the tier stays the PM's per-card judgment call"), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card
    Thread-read: 6472691426
    Premise: holds — on origin/main 5b5cff1 no file under ui/packages/app-shell/src/views/metadata-admin reads object.external for field marking; the datasource-side external/ExternalDatasourcePanel.tsx and datasource/DatasourceResourcePage.tsx exist and are prior art, not this work item
    Serial constraints cleared: none (no in-flight claim in ui/packages/app-shell; sibling #27276 does not touch metadata-admin)

  3. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#27261#1 · marchtian · session_017ihL2c5z3q4h8inrn5kwqV
    os-dev-report

    {
      "issue": 27279,
      "status": "done",
      "branch": "claude/project-thread-6ml89f",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/27316",
      "session": "session_017ihL2c5z3q4h8inrn5kwqV",
      "premise_still_valid": true,
      "summary": "Object designer under ui/packages/app-shell/src/views/metadata-admin reads object.external / object.datasource (external iff external != null, the same presence test as objectql isFederatedObject). Canvas field rows, a canvas header note and the field inspector show 'From DATASOURCE · Read-only|Writable|Writes unconfirmed' (zh '来自 plan_gantt · 只读'). Write state: object without external.writable=true is read-only with no request; with writable=true the datasource is read via MetadataClient.get('datasource', NAME) (GET /meta/datasource/NAME, which serves external.allowWrites; the REST door GET /datasources/NAME does not) and an unreadable datasource shows 'unconfirmed', never a guess. DDL affordances hidden, each read from code: canvas Add field (bottom bar, empty state, section header '+'), canvas bulk Delete, inspector API name input (setKey, disabled), Type picker (changeType, disabled), Duplicate (duplicateField, hidden), Remove (removeField, hidden), plus label-to-API-name derivation off. Kept: label, sections, ordering, bulk move, display settings. Six designer.external.* strings in the studio i18n namespace (en+zh).",
      "tests": "head fdeadb17. NEW previews/external-object.test.tsx 11 cases. `pnpm --dir ui exec vitest run packages/app-shell/src/views/metadata-admin/previews/external-object.test.tsx packages/app-shell/src/views/metadata-admin/previews/ObjectFormCanvas.test.tsx packages/app-shell/src/views/metadata-admin/inspectors/ packages/i18n/src/__tests__/studio-namespace.test.ts` → lock VERDICT command-exit 0, Test Files 204 passed (204), Tests 2833 passed | 1 skipped. `pnpm --filter @object-ui/i18n --filter @object-ui/app-shell run type-check` → VERDICT command-exit 0 (tsc --noEmit + tsc -p tsconfig.test.json). ui-local: check:new-line-citations exit 0 (0 new), check:i18n-dead-keys exit 0 (no designer.external key listed), check:i18n-keys exit 0, check:i18n-drift exit 0 (6 added, 0 en changed), check:control-bytes exit 0. No ablation: new behaviour only, the control cases (platform-owned object keeps every control) pin the other direction.",
      "gates": "local derived subset at fdeadb17, each `command :: exit N` captured before any pipe: node scripts/check-adr-0087-registration.mjs --base origin/main :: exit 0 | node scripts/check-adr-0087-registration.mjs --self-test :: exit 0 | node scripts/check-changeset-no-major.mjs --base origin/main :: exit 0 | node scripts/check-closing-keyword-parity.mjs :: exit 0 | node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0 | node scripts/check-comment-mask-corpus.mjs :: exit 0 | node scripts/check-empty-changeset.mjs --base origin/main :: exit 0 | node scripts/check-empty-changeset.mjs --self-test :: exit 0 | node scripts/check-sdui-manifest.mjs :: exit 0 | node scripts/check-sdui-manifest.mjs --self-test :: exit 0 | node scripts/pm/release-rehearsal-clone.mjs --self-test :: exit 0 | node scripts/release-pending-publish.mjs --self-test :: exit 0 | pnpm --filter @objectstack/spec run check:duration-unit-keys :: exit 0 | pnpm check:changeset-gate-self-tests :: exit 0 | pnpm check:closed-ceremony-text :: exit 0 | pnpm check:cross-package-test-inputs :: exit 0 | pnpm check:dispatcher-error-vocabulary :: exit 0 | pnpm check:driver-memory-census :: exit 0 | pnpm check:engine-double-contract :: exit 0 | pnpm check:gitlink-declared :: exit 0 | pnpm check:nul-bytes :: exit 0 | pnpm check:pm-changeset-deadline-census :: exit 0 | pnpm check:published-files :: exit 0 | pnpm check:refd-timer-probe :: exit 0 | pnpm check:skill-identifier-liveness :: exit 0 | pnpm check:test-source-alias :: exit 0 | pnpm check:tier-file-adoption :: exit 0 | pnpm check:type-check-coverage :: exit 0 | pnpm check:type-check-debt :: exit 0 | pnpm check:undeclared-dep-imports :: exit 0 | pnpm check:watch-hint-literal :: exit 0 | pnpm check:where-matcher :: exit 0 | pnpm check:query-options-erasure :: exit 0 | pnpm --dir ui exec vitest run scripts/ :: exit 0. Reconciliation: `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran FILE` → 34 derived, 34 run, 0 NOT-MEASURED, 0 UNRUN (derived zero, all 34 carry an exit code). Outside derivation: pnpm check:changeset-fixed :: exit 0. Note: an earlier `pnpm --dir ui exec vitest run scripts/` at fdeadb17 exited 1 on a 15 s timeout in check-vi-mock-inherit.test.ts whole-tree sweep under shared load; that file alone 83/83 exit 0; the full re-run exited 0 (174 files passed, 2 skipped; 4990 tests passed). CI check-runs on PR head fdeadb17 at report time: all required families in_progress (Lint & Repo Gates jobs, Type Check jobs, Check Changeset, Governed Surface Queue Guard, PR-body guards); UI jobs (Lint UI / Type Check UI / Test UI / Build & E2E UI / Live E2E UI) not yet listed; skipped: Schedule gate, Packed-tarball smoke, 18.x upgrade harness. Not waited on per os-dev.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "line_budget": "size S; 7 files, +432 / -19 (451 changed lines incl. 166-line test file and 143-line new module); source edits ObjectFormCanvas +39/-14, ObjectFieldInspector +22/-5",
      "files_changed": [
        ".changeset/27279-external-object-field-marks.md",
        "ui/packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.tsx",
        "ui/packages/app-shell/src/views/metadata-admin/previews/ObjectFormCanvas.tsx",
        "ui/packages/app-shell/src/views/metadata-admin/previews/external-object.tsx",
        "ui/packages/app-shell/src/views/metadata-admin/previews/external-object.test.tsx",
        "ui/packages/i18n/src/namespaces/studio/en.ts",
        "ui/packages/i18n/src/namespaces/studio/zh.ts"
      ],
      "deviations": [
        "branch claude/project-thread-6ml89f (PM-set platform exception) instead of claude/issue-27279-slug; pushed directly, no empty-branch probe",
        "file surface: the claim names views/metadata-admin/** 'plus its tests and i18n strings'; the folder's strings live in ui/packages/i18n/src/namespaces/studio/{en,zh}.ts (6 rows each) and the changeset in .changeset/ — both outside the folder path, named here",
        "PR body first line is the PM-prescribed harness attribution HTML comment (os-dev exception for harness-written attribution)",
        "build closure: built the 37 @objectstack packages in app-shell's closure plus `pnpm turbo run build --filter='@object-ui/app-shell^...'` (needed for vitest resolution of @objectstack/spec dist and for type-check project references)"
      ],
      "mcp_calls": "4 — mcp__github__issue_read (get, get_comments on #27279), mcp__github__pull_request_read (get, get_check_runs on #27316); no write tool",
      "api_writes": "2 relay writes — pr_create via scripts/pm/fleet-write/dispatch.mjs (run 40726076206, read-back 7248/7248 bytes identical, assignees marchtian, draft); os-dev-report comment on #27279 via scripts/pm/post-stamped.mjs. git push (2 pushes) is not a REST write",
      "open_questions": [
        {
          "question": "The Studio Data pillar (ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx, outside this card's file surface) still offers Add field on an external object: the records grid '+' column (GridFieldAuthoringProvider onAddColumn → AddFieldPopover) and the Form layout designer (ObjectFormDesigner onAddField). Its right rail reuses ObjectFieldInspector, so badge + no rename/retype/duplicate/remove already apply there. The card's two-minute check opened in that pillar would still show an Add field button. How to carry the rest?",
          "options": [
            "A: follow-up card on studio-design: gate onAddColumn / AddFieldPopover / ObjectFormDesigner.onAddField on readExternalBinding(objDraft), reusing previews/external-object.tsx (size S)",
            "B: widen this PR's claim to studio-design and add it here",
            "C: leave it until the P2 datasource page work"
          ],
          "recommendation": "A, because it is a separate surface with its own tests and the claim's file surface stops at metadata-admin; the shared helper already exists so the follow-up is mechanical"
        }
      ],
      "out_of_scope_findings": [
        "carrier: PM (follow-up card) · studio-design Data pillar Add field doors on external objects, see open_questions[0]; dedupe words: external object, add field, StudioDesignSurface, Data pillar, ADR-0015"
      ]
    }
  4. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#27261#1 · marchtian · session_017ihL2c5z3q4h8inrn5kwqV
    Claim amendment (file surface) · 2026-10-28T16:31Z

    REWORK round 1 on PR #27316 (head fdeadb17). The card's acceptance check reads 「一个外部对象在 Studio 里字段带「来自 plan_gantt · 只读」标记,无「添加字段」按钮。」 — Studio as a whole, not one folder. The dev report found two add-field doors still open on an external object in the Studio Data pillar (ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx: the records grid "+" column via onAddColumn → AddFieldPopover, and the form layout designer's onAddField). Without them the card's own check fails, so they are in scope and land in the same PR.

    File surface now: ui/packages/app-shell/src/views/metadata-admin/**, ui/packages/app-shell/src/views/studio-design/** (and the components those two doors render, if the gate has to sit there), ui/packages/i18n/src/namespaces/studio/**, .changeset/**. Same branch, same session, same claim 6472837455 otherwise.

  5. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#27261#1 · marchtian · session_017ihL2c5z3q4h8inrn5kwqV
    os-dev-report

    {
      "issue": 27279,
      "status": "needs_decision",
      "branch": "claude/project-thread-6ml89f",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/27316",
      "session": "session_017ihL2c5z3q4h8inrn5kwqV",
      "premise_still_valid": true,
      "head": "edaebc8a",
      "summary": "REWORK round 1 (option B, claim amendment 6474698138) is done on the branch at edaebc8a, after merging origin/main (97421253, merge base ff26bc4c2). In the Studio Data pillar (ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx, DataPillar), objIsExternal = readExternalBinding(objDraft) !== null, reusing metadata-admin/previews/external-object.tsx. canAddFields = !readOnly && !objIsExternal now gates (1) the records grid '+' column: GridFieldAuthoringProvider onAddColumn/addColumnLabel are left out and the AddFieldPopover is not mounted; (2) the Form layout designer: ObjectFormDesigner onAddField={canAddFields ? addField : undefined}. addField itself also returns early on an external object. An ExternalObjectNotice ('From DATASOURCE · Read-only|Writable|Writes unconfirmed') renders above the grid or form, with its write state from useExternalWriteState. Other pillar DDL doors were read and left open, with reasons: onEditColumn (grid header edit) opens the shared ObjectFieldInspector, where rename, retype, duplicate and remove are already gated; onReorderFields only changes field order, which is platform metadata; the form designer's section add/rename/move/delete only edit fieldGroups; the form designer's field cards have no delete; the Rules/Settings/Hooks/Actions/API tabs have no field DDL and no index editor. Round-1 metadata-admin work is unchanged. The PR body was NOT updated, because both write doors refuse an unsigned first line (see open_questions[0]).",
      "tests": "head edaebc8a. NEW studio-design/DataPillar.externalObject-27279.test.tsx has 3 cases on the real DataPillar with the real registered ObjectFieldInspector and a grid double that draws onAddColumn/onEditColumn from the authoring context. (1) External object: no grid '+', no Form-toolbar 'Add field', the notice badge reads 'From plan_gantt · Read-only', and the datasource is never read. (2) The column editor opens the inspector with the badge, and API name and Type are disabled. (3) CONTROL: a platform-owned object keeps both Add field doors and shows no notice. `pnpm --dir ui exec vitest run packages/app-shell/src/views/studio-design/ packages/app-shell/src/views/metadata-admin/previews/ packages/app-shell/src/views/metadata-admin/inspectors/ packages/i18n/src/__tests__/studio-namespace.test.ts` → lock VERDICT command-exit 0, Test Files 603 passed (603), Tests 6281 passed | 1 skipped. `pnpm --filter @object-ui/i18n --filter @object-ui/app-shell run type-check` → VERDICT command-exit 0. ui-local: check:new-line-citations (0 new), check:i18n-dead-keys, check:i18n-keys, check:i18n-drift and check:control-bytes all exit 0. No ablation: the behaviour is new, and the control case pins the other direction.",
      "gates": "derived at edaebc8a, each exit captured before any pipe: node scripts/check-adr-0087-registration.mjs --base origin/main :: exit 0 | node scripts/check-adr-0087-registration.mjs --self-test :: exit 0 | node scripts/check-changeset-no-major.mjs --base origin/main :: exit 0 | node scripts/check-closing-keyword-parity.mjs :: exit 0 | node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0 | node scripts/check-comment-mask-corpus.mjs :: exit 0 | node scripts/check-empty-changeset.mjs --base origin/main :: exit 0 | node scripts/check-empty-changeset.mjs --self-test :: exit 0 | node scripts/check-sdui-manifest.mjs :: exit 0 | node scripts/check-sdui-manifest.mjs --self-test :: exit 0 | node scripts/pm/release-rehearsal-clone.mjs --self-test :: exit 0 | node scripts/release-pending-publish.mjs --self-test :: exit 0 | pnpm --filter @objectstack/spec run check:duration-unit-keys :: exit 0 | pnpm check:changeset-gate-self-tests :: exit 0 | pnpm check:closed-ceremony-text :: exit 0 | pnpm check:cross-package-test-inputs :: exit 0 | pnpm check:dispatcher-error-vocabulary :: exit 0 | pnpm check:driver-memory-census :: exit 0 | pnpm check:engine-double-contract :: exit 0 | pnpm check:gitlink-declared :: exit 0 | pnpm check:nul-bytes :: exit 0 | pnpm check:pm-changeset-deadline-census :: exit 0 | pnpm check:published-files :: exit 0 | pnpm check:query-options-erasure :: exit 0 | pnpm check:refd-timer-probe :: exit 0 | pnpm check:skill-identifier-liveness :: exit 0 | pnpm check:test-source-alias :: exit 0 | pnpm check:tier-file-adoption :: exit 0 | pnpm check:type-check-coverage :: exit 0 | pnpm check:type-check-debt :: exit 0 | pnpm check:undeclared-dep-imports :: exit 0 | pnpm check:watch-hint-literal :: exit 0 | pnpm check:where-matcher :: exit 0 | pnpm --dir ui exec vitest run scripts/ :: exit 0. The first run of pnpm check:type-check-debt returned exit 3, which is NOT MEASURED (its closure build queue-timed out on the shared verify lock behind this seat's own vitest hold). It was re-run as `bash scripts/pm/os-verify-lock.sh -c 'pnpm check:type-check-debt'` → exit 0, 0 ledger entries, 0 raw tsc errors. Reconciliation: `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran FILE` → 34 derived, 34 run, 0 NOT-MEASURED, 0 UNRUN (a derived zero). Outside the derivation: pnpm check:changeset-fixed :: exit 0. CI check-runs on edaebc8a were not read; not waited on, per os-dev.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "line_budget": "size S; 9 files, +608 / -28 (636 changed lines vs merge base ff26bc4c2, under the 3000 human-merge threshold). Round 2 adds StudioDesignSurface.tsx +29/-9 and a 147-line test; the rest is round 1",
      "files_changed": [
        ".changeset/27279-external-object-field-marks.md",
        "ui/packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.tsx",
        "ui/packages/app-shell/src/views/metadata-admin/previews/ObjectFormCanvas.tsx",
        "ui/packages/app-shell/src/views/metadata-admin/previews/external-object.test.tsx",
        "ui/packages/app-shell/src/views/metadata-admin/previews/external-object.tsx",
        "ui/packages/app-shell/src/views/studio-design/DataPillar.externalObject-27279.test.tsx",
        "ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx",
        "ui/packages/i18n/src/namespaces/studio/en.ts",
        "ui/packages/i18n/src/namespaces/studio/zh.ts"
      ],
      "deviations": [
        "branch claude/project-thread-6ml89f (PM-set platform exception) instead of claude/issue-27279-slug; pushed directly",
        "file surface: per claim amendment 6474698138, now views/metadata-admin/** + views/studio-design/** + ui/packages/i18n/src/namespaces/studio/{en,zh}.ts + .changeset/; no file outside it",
        "merge commit 97421253 (origin/main into the branch) is git's default merge message and carries no Co-Authored-By/Claude-Session trailer pair; a19ae6f4 and edaebc8a carry both",
        "PR body first line is the PM-prescribed harness attribution HTML comment (set at pr_create in round 1)",
        "build closure: turbo build of app-shell's dependency closure, needed for vitest resolution and type-check project references"
      ],
      "mcp_calls": "5 across both rounds — mcp__github__issue_read ×3 (get #27279; get_comments #27279 ×2), mcp__github__pull_request_read ×2 (get, get_check_runs #27316); no write tool",
      "api_writes": "3 relay writes across both rounds: pr_create via scripts/pm/fleet-write/dispatch.mjs (round 1); os-dev-report comment 6474648611 on #27279 (round 1); this os-dev-report comment on #27279 via scripts/pm/post-stamped.mjs (round 2). The PR body update was refused at dry-run, so nothing was written. git push is not a REST write",
      "open_questions": [
        {
          "question": "The PR #27316 body update cannot keep the two attribution lines first. `node scripts/pm/post-stamped.mjs --dry-run --repo=objectstack-ai/objectstack --body=27316 --file=body2.md` → exit 2 'REFUSED — the body opens with no signature line', and it states that no flag turns this off. The relay's issue_patch is in SIGNED_EDIT_OPS (scripts/pm/fleet-write/dispatch.mjs) and refuses the same way. The live body is still the round-1 text: head fdeadb17, the 'not covered' Data pillar note, and no new table rows. The ready body is in the dev scratchpad as pr/body2.md (attribution lines first, 'not covered' dropped, two new table rows, the pillar paragraph, the new test paragraph, Verification at edaebc8a).",
          "options": [
            "A: allow a signature-first body: line 1 `epic:#27261#1 · marchtian · session_017ihL2c5z3q4h8inrn5kwqV`, then the attribution comment and the Requested-by line, then the rest; the seat posts it via post-stamped --body=27316",
            "B: the PM or a maintainer writes body2.md as-is through a door that does not require the signature",
            "C: leave the body as is; this comment carries the round-2 facts"
          ],
          "recommendation": "A if the claude-projects attribution comment is still honoured on line 2: a grep of scripts/ and .claude/ for claude-projects-attribution finds only a test fixture in scripts/pm/check-governed-queue-guard.mjs, so no repo script was found to depend on its position, though the product's own reader was not checked. Otherwise B. Not done unilaterally, because it reorders lines the PM fixed."
        }
      ],
      "out_of_scope_findings": []
    }
  6. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#27261#1 · marchtian · session_017ihL2c5z3q4h8inrn5kwqV
    Landing held · PR #27316 @ edaebc8a · 2026-10-28T17:35Z

    ACCEPT is on the PR (6476106700); every check on edaebc8a is green or skipped and mergeable_state is clean. The landing stroke was refused before it ran, so nothing was written:

    • Command: node scripts/pm/fleet-write/dispatch.mjs --repo objectstack-ai/objectstack --actions-file F with [{"op":"pr_ready","pull":27316},{"op":"automerge_enable","pull":27316}]
    • Refusal: the session's permission classifier, reason "Merge Without Review".

    Per the landing rules the seat stops here and asks the maintainer; no other spelling is tried. The PR stays draft until the maintainer says how to land it.

  7. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#27261#1 · marchtian · session_017ihL2c5z3q4h8inrn5kwqV
    Landed · 2026-10-29T01:05Z

    Reading Value
    PR #27316 merged 2026-10-29T01:03Z as 16d151b4b3141a519510dff651423c098fe0d2c8 (merge queue), head edaebc8a
    Card closed completed by Fixes #27279

    State: pm:dispatched removed in the same act. Landing ordered by the maintainer (田騏): 「按照 pm-dispatch 技能审核落地 pr」, the epic PM's project thread.

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

Metadata

Metadata

Assignees

Labels

area:studioChanging a running app without code — authoring, publish, docs and the portaldomain:uienhancementNew feature or requestpm:epicpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions