Skip to content

refactor(spec)!: retire the uncalled describeManagedApiMethodConflicts export - #33583

Queued
objectstack-fleet[bot] wants to merge 3 commits into
mainfrom
claude/project-thread-8c9p9x
Queued

objectstack-fleet[bot] wants to merge 3 commits into
mainfrom
claude/project-thread-8c9p9x

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Leehom · project thread

Fixes #33522

Clause-②: no (narrowing)
Metadata-protocol: none
Skills-docs: none — no skill, doc or example names describeManagedApiMethodConflicts (git grep over skills/, content/docs/, docs/, examples/ and ui/ at e3f0cfd4: 0 hits); nothing an author writes changes.

Route: Retire, per the seat's claim 6886195399 (Ruling-ref 「开放 p3卡认领」). Card source: #32134 / PR #33517 (untouched here; it edits lint and objectql files this PR does not).

维护者速读

  • 改了什么:从 @objectstack/spec/data 删掉导出函数 describeManagedApiMethodConflicts 及其测试块,并重新生成两份导出快照(api-surface、export-origins 各少一行)。判定函数 checkManagedApiMethodAffordances、类型 ManagedApiMethodConflict、动词表 MANAGED_WRITE_VERB_AFFORDANCE 都不动。
  • 为什么改:这个函数已经没有调用方:lint 规则 object/managed-api-method-unaffordable 和 objectql 注册时的剥离都自己拼消息。它的句子还对所有 managedBy 桶都建议“打开 userActions”,在 synced 对象上是错的(解析会拒绝打开写的 userActions)。已发布却零消费的能力,创业阶段直接退役,不设过渡期。
  • 风险与回滚:只有从 @objectstack/spec/data 导入这个函数的 TypeScript 代码会编译报错(TS2305)。本仓(含 ui/、examples/)、hotcrm、gallery 和组织代码搜索都没有调用方;cloud 仓读不到,若有导入会在升级时编译期响亮报错,不会静默出错。运行时行为不变。回滚即 revert。
  • 先看:packages/spec/src/data/managed-api-affordance.ts(删掉的函数,文件头里“两个消费方”说的是判定函数,仍然成立)、.changeset/33522-retire-describe-managed-api-method-conflicts.md(BREAKING 说明与 ADR-0087 处置)。
  • 两分钟验证:git grep -n describeManagedApiMethodConflicts -- . ':!*CHANGELOG.md' ':!.changeset',预期零命中。
  • 需要你做的:无,席位落地。

What changes

  • packages/spec/src/data/managed-api-affordance.ts: describeManagedApiMethodConflicts and its docblock are removed. The file header's "exactly two consumers" describes checkManagedApiMethodAffordances (objectql's reconcileManagedApiMethods and lint's validateManagedApiMethods both call it), so it stays true and is unchanged. Nothing else in the file named the removed function.
  • packages/spec/src/data/managed-api-affordance.test.ts: the describe('describeManagedApiMethodConflicts') block (4 cases) and its import are removed; every other case is kept.
  • packages/spec/api-surface/data.json, packages/spec/export-origins/data.json: regenerated with gen:api-surface and gen:export-origins against a real spec build (.d.ts emitted, no OS_SKIP_DTS); each loses exactly the one line for the function.
  • .changeset/33522-retire-describe-managed-api-method-conflicts.md: @objectstack/spec patch, both declaration lines, a **BREAKING** banner, the caller's one-line fix and the ADR-0087 disposition (below).

Changeset level and ADR-0087 disposition (the rule applied)

AGENTS.md Post-Task Checklist step 3: "a non-protocol change, widening or breaking, ships patch and keeps its BREAKING banner and ADR-0087 disposition". Metadata-protocol: none (no authorable key, value or type moves), so patch, with the banner and one marker.

The marker is not-required (no-migration-prescription). Measured, not assumed:

  • runtime-export-retired @objectstack/spec#describeManagedApiMethodConflicts (with a FROM/TO line) is refused on main's gate at predicate 1, retired-from-entry: "describeManagedApiMethodConflicts is not exported by packages/spec/src/index.ts at the merge base". The function is reachable only from the ./data subpath, and the gate on main reads a package's root entry only (its header: "a retirement from a subpath names no operand this category can verify").
  • Under PR feat(adr-0087): runtime-export-retired reads literal subpath keys #33520's gate (head 27e5e2e8, "runtime-export-retired reads literal subpath keys", open), the subpath operand @objectstack/spec/data#describeManagedApiMethodConflicts verifies: "verified: @objectstack/spec/data#describeManagedApiMethodConflicts (export, packages/spec/src/data/managed-api-affordance.ts)".
  • So on main today the one admissible disposition is no-migration-prescription, and the changeset carries no FROM/TO block (that category refuses one); the caller's fix is given in a sentence. Both probes ran on a throwaway commit, restored and verified (blob hash and HEAD equal, git diff HEAD empty).

Tests

Head 12a6f2e1 (this branch merged with origin/main 8e63ed87, which moved packages/spec; spec rebuilt with real .d.ts after the merge).

  • pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 (under the verify lock): exit 0, Test Files 931 passed (931), Tests 28421 passed | 1 todo (28422). managed-api-affordance.test.ts keeps every checkManagedApiMethodAffordances and verb-table case; only the 4 cases of the removed function's block are gone.
  • pnpm --filter @objectstack/spec typecheck: exit 0. check:test-typecheck: OK (52 files / 240 errors / 131 pinned signatures held; the removed block named no ledger signature).
  • pnpm --filter @objectstack/spec check:generated after the merge: exit 0 (every artifact current, api-surface/ and export-origins/ included).
  • git grep -n describeManagedApiMethodConflicts -- . ':!*CHANGELOG.md' ':!.changeset': no hit (exit 1). Built packages/spec/dist/data/index.d.mts: 0 occurrences.
  • No ablation: no tested behaviour changes (a removal of an uncalled function and its own tests).
  • Full dogfood battery (owed by the (narrowing) arm): runs on this head after the gate loop; its VERDICT line and counts are in the os-dev-report comment on the card.

Acceptance notes

  • packages/lint/CHANGELOG.md (two released entries) still names "the spec's describeManagedApiMethodConflicts sentence" as what the lint rule stopped appending. That is release-owned history and true of its release; not edited.
  • If PR feat(adr-0087): runtime-export-retired reads literal subpath keys #33520 lands before this PR merges, the seat may switch the marker to not-required (runtime-export-retired @objectstack/spec/data#describeManagedApiMethodConflicts) with a matching FROM/TO line (measured green under that gate, above).

Verification

Local subset, head 12a6f2e1: the 82 commands node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derives for this diff, each run with its exit code captured before any pipe: 82 exit 0. Reconciliation: "Run reconciliation — 82 derived, 82 run, 0 NOT-MEASURED, 0 UNRUN." Also node scripts/check-platform-checklist.mjs --changed-from origin/main: exit 0 (no anchored file in the change set). Full log: pm-orders/spec/33522-gates-ran.txt in the project files.

ADR-0087 gate on the committed changeset

pnpm check:adr-0087-registration: exit 0, "1 declared-breaking changeset(s), each carrying an ADR-0087 disposition", [BREAKING+bang+clause-②-narrowing] not-required (no-migration-prescription).

The first pass at 5516b681 (before the merge) was 81 exit 0 and check:dual-build-cjs-loads exit 3 (prerequisite not met: packages without dist/); on the merged head, after the wider build, it answers exit 0. CI runs every family on the PR; its check-runs are the record.


Generated by Claude Code

…s export

The spec helper had no caller left: the lint rule and the registry strip
each build their own message from checkManagedApiMethodAffordances. Remove
the function and its test block; the predicate, its conflict type and the
verb table stay.

Claude-Session: https://claude.ai/code/session_01FEkQ5mqr24gy2eNyrmiqJd
Co-Authored-By: Claude <noreply@anthropic.com>
gen:api-surface and gen:export-origins drop the retired function; the
changeset declares the narrowing and its ADR-0087 disposition.

Claude-Session: https://claude.ai/code/session_01FEkQ5mqr24gy2eNyrmiqJd
Co-Authored-By: Claude <noreply@anthropic.com>
@github-actions github-actions Bot added size/s documentation Improvements or additions to documentation protocol:data tests tooling Fix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface labels Nov 15, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

1 anchor(s) derived from 1 changed package(s); no hand-written page names any of them. ⚠️ 2 changed file(s) yielded no anchor (packages/spec/api-surface/data.json, packages/spec/export-origins/data.json), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files.

What this run could not see
  • 2 changed file(s) yielded no anchor (packages/spec/api-surface/data.json, packages/spec/export-origins/data.json) — pages documenting those are invisible to this run
  • the SDK route bridge reached 65 of 247 client-bound route-ledger rows — the other 182 have no registrar path: tail to select them, so pages documenting THEIR client methods cannot appear above, on this or any run. Of those 182: 0 are remediable by widening that discovery convention (an in-repo file declares the path; the convention did not scan it); 59 are structural — on a ledger where NOT ONE row is declared in-repo, so no discovery change reaches them at any price; 123 are undecided (no in-repo declaration, on a ledger that has other in-repo registrars — absence and an unreadable spelling are not distinguishable here). The rows themselves: node scripts/docs-audit/affected-docs.mjs --bridge-coverage
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.
  • a key NAME is not a key, so the hand re-read the line above prescribes can land on the wrong schema. The same spelling is authorable on one governed type and a [REMOVED] tombstone on another for each of active, aria, joins, objects, template, tools and version (censused on [finding] tools is a key on BOTH AgentSchema (tombstoned, dead) and SkillSchema (live, cloud-attested), so a name-based search attributes skill examples to the agent key — it produced a false stop-the-line alarm on PR #19059 #19093 over the liveness ledger's governed types, top-level keys); nothing in a search result distinguishes the two, so a grep hit on a LIVE example reads as evidence about the DEAD key. Measured on fix(spec): the agent.tools liveness row says dead — it claimed live on a key the schema tombstoned #19059: content/docs/ai/agents.mdx was reported as contradicting the agent.tools tombstone over its tools: example at :161, which is inside the defineSkill({ block opened at :155 — the page was already correct. Settle ownership by PARSING the value against both schemas, never by the name: that literal PASSES SkillSchema, and as an AgentSchema it FAILS at tools with the tombstone prescription. ⛔ These names are not the whole class — a key retired through a .strict() guidance map leaves no tombstone in the walked shape and none of them here (tool.category, live as AIToolDefinition.category).

Coarse fallback — 172 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json 4bba8b8f02fdbdf30e9ad41fc5d2a6fdd3ccaf2a → packageMentionDocs.

Which tree this was computed on

This run read content/docs from 9a6fcdd25b080fdac8c640e5f03d04cbc8ade831 — the merge of head 12a6f2e15dd70fc9a938eeb0dbb23214ad043b6c into base 4bba8b8f02fdbdf30e9ad41fc5d2a6fdd3ccaf2a, which is what actions/checkout gives a pull_request run. Not the PR head.

A worktree cut from an older main holds a different content/docs, so re-deriving there can legitimately return a different list — that is a different tree, not a wrong row. To answer on the same tree:

# while this PR is open — GitHub drops the merge commit once it closes
git fetch origin 9a6fcdd25b080fdac8c640e5f03d04cbc8ade831 && git checkout 9a6fcdd25b080fdac8c640e5f03d04cbc8ade831
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 4bba8b8f02fdbdf30e9ad41fc5d2a6fdd3ccaf2a 12a6f2e15dd70fc9a938eeb0dbb23214ad043b6c && git checkout -B drift-repro 4bba8b8f02fdbdf30e9ad41fc5d2a6fdd3ccaf2a && git merge --no-ff 12a6f2e15dd70fc9a938eeb0dbb23214ad043b6c

node scripts/docs-audit/affected-docs.mjs --json 4bba8b8f02fdbdf30e9ad41fc5d2a6fdd3ccaf2a

⚠️ That checkout carried uncommitted changes, so the commit above does not fully identify what was read.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:spec#4 · os-project-manager · session_01FEkQ5mecqk8M5q9vjKj6aS

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 12a6f2e15dd70fc9a938eeb0dbb23214ad043b6c
Local-runs: none
Scope: packages/spec/src/data/managed-api-affordance.ts + none (no other file in the diff implements or enforces it; .changeset/33522-retire-describe-managed-api-method-conflicts.md is judged in ② for level, banner and ADR-0087 marker only; the test file and the two generated snapshots are the lane seat's ACCEPT, read here only to answer ①)

Inputs read: card #33522 body and all three comments (triage 6886170312, claim 6886195399, dev report 6887762168), PR #33583 body and file list (5 files), the net diff origin/main...12a6f2e1 (merge base 8e63ed87), and the 72 check-runs on the head: 57 success, 15 skipped, 0 failure, 0 pending (both Check Changeset runs completed success; Lint & Repo Gates, Lint · CI, release & engine gates, TypeScript Type Check, Type Check UI, Test Core 8/8, Test UI 16/16, Build Core, Governed Surface Queue Guard, Dogfood Regression Gate all success). Read outside the diff, not reviewed: scripts/check-adr-0087-registration.mjs and docs/adr/0087-metadata-protocol-upgrade-contract.md on main, AGENTS.md Post-Task Checklist step 3, packages/objectql/src/registry.ts, packages/lint/src/validate-managed-api-methods.ts, packages/spec/src/index.ts, packages/spec/src/data/index.ts.

① Derived judgments

  • Public surface: one published runtime export removed from @objectstack/spec/data. Right, and declared as what it is (a narrowing). describeManagedApiMethodConflicts reached the package's public entries through exactly one path: packages/spec/src/data/index.ts:192 (export * from './managed-api-affordance'). The root entry packages/spec/src/index.ts exports no domain namespace (its header says so, and its only star exports are ./stack.zod and ./conversions/index.js); on main the name occurs in api-surface/data.json and export-origins/data.json and in no other snapshot (root.json and the 17 other subpath snapshots: 0 hits). So the removal is from the ./data subpath alone, as the changeset says.
  • Nothing else reachable is lost. Right. The diff deletes one function and its docblock (22 lines) and no type, constant or re-export. ManagedApiMethodConflict (its parameter type), MANAGED_WRITE_VERB_AFFORDANCE and checkManagedApiMethodAffordances are still declared and still present in both snapshots at the head (export-origins/data.json lines 443, 450, 894). The function's return type was string; no named type existed only for it.
  • Generated snapshots: exactly one removed name each. Right. api-surface/data.json loses the line describeManagedApiMethodConflicts (function); export-origins/data.json loses the one key mapping it to src/data/managed-api-affordance.ts. No other line moves in either file, and git grep at the head finds the name in no snapshot.
  • Accept-set: unchanged. Right. No schema, no authorable key, no verdict moves. checkManagedApiMethodAffordances is byte-identical, so every finding of object/managed-api-method-unaffordable and every boot-time strip is what it was.
  • Test surface: the removed function's own describe block (4 cases) and its import go; nothing else. Right. The remaining suites still use managed(), verbs() and the ManagedApiMethodConflict type import, so no orphan is left behind (Type Check · source gates and Lint · ESLint success on the head).

② Semver level

  • Level patch on @objectstack/spec: right. AGENTS.md step 3: the level follows the Metadata-protocol: kind alone, none takes patch, and "a non-protocol change, widening or breaking, ships patch and keeps its BREAKING banner and ADR-0087 disposition". A removed runtime function is not something a metadata author can write.
  • Metadata-protocol: none: right. No key, accepted value, metadata type, default or meaning changes. Line-initial in both the changeset body and the PR body.
  • Clause-②: no (narrowing): right. The published surface shrinks by one export and no rule or schema clause is added; (narrowing) is the BREAKING arm and the body carries the **BREAKING** banner, the bang in the subject, and the consumer named (a TypeScript caller importing the name from @objectstack/spec/data). Line-initial in both bodies, and the two bodies agree.
  • The caller's fix is in the body: sufficient. Step 3 asks a removed export to carry its FROM to TO mapping and one-line fix. The body states the compiler error (TS2305), the action (delete the import) and the replacement (word the message from each conflict's verb and needs). There is no TO symbol to map to; the sentence is the whole migration. It is written as prose, not a FROM/TO block, which is forced by the marker below.
  • ADR-0087 marker not-required (no-migration-prescription): honest and sufficient on main today. Not a must-fix. Read against the gate source and the ADR on main:
    • runtime-export-retired is the category built for this class (ADR-0087 D9), and it is closed to this operand by the gate's own text: "A subpath entry (@scope/pkg/sub). Only the root entry is read; a retirement from a subpath names no operand this category can verify, so it is refused at the mapping step rather than assumed." The ADR's D9 says the same under "What this does not decide". With the root-package operand, predicate 1 retired-from-entry reads packages/spec/src/index.ts at the merge base and the name is not among its exports (confirmed in ① from root.json and the entry source), so the claim would be false, not merely unverifiable. Claiming it would be the dishonest marker.
    • The other fact-backed categories are closed on facts the tree confirms: the package publishes (unpublished false); the diff adds no ledger entry and none exists for a function (registered, already-registered); a function is neither an exported type declaration at HEAD nor a type narrowed off any (runtime-interface-only, type-surface-only).
    • no-migration-prescription has two refusals on main: a body carrying a prescription the detector reads, and a changeset declaring Metadata-protocol: narrowed. Neither applies: the kind is none (which the ADR says "keep[s] the exemption"), and the gate's check-run is green on this head. The category's substantive claim, that the ledger and objectstack migrate meta have nothing to rewrite, is true here; D8 names this exact case ("it simply cannot tell a prescription for a metadata upgrader from a prescription for a source-code consumer, and only the first is the ledger's business").
    • The marker's justification states the limitation in the open (the name lives on ./data, the category reads the root only). It is not held by a concealed detector miss: nothing in the body is an arrowless FROM/TO line of the kind D9 was written to stop.
  • nit (N1, accepted deviation, no fix owed): the caller's fix is a sentence because this category refuses a FROM/TO block; the ideal shape is runtime-export-retired @objectstack/spec/data#describeManagedApiMethodConflicts with a FROM line, which only PR feat(adr-0087): runtime-export-retired reads literal subpath keys #33520's gate can verify. No effect on correctness or on what an upgrading consumer reads.

③ Boundary flags

④ Design judgment

packages/spec/src/data/managed-api-affordance.ts: the retirement holds. No must-fix, no should-fix.

  • Zero consumers, re-verified at the head. git grep describeManagedApiMethodConflicts over the whole tree at 12a6f2e1 (including ui/, examples/, content/, docs/, skills/): the changeset (3 lines) and packages/lint/CHANGELOG.md (2 released entries, prose). No source, test, doc, skill or snapshot. On main the only additional hits are the definition, its own test and the two snapshots. /home/user/hotcrm and /home/user/gallery: 0 hits in the working tree and on origin/main. Org code search describeManagedApiMethodConflicts org:objectstack-ai: 4 hits, all in objectstack (definition, test, the two snapshots; the index still reflects main). A partial-name sweep (describeManagedApi) finds nothing a string-built or renamed reference could hide behind.
  • Attempt to break it: a caller that relied on the sentence. The two production callers of the predicate build their own text and do not import the helper: reconcileManagedApiMethods (registry.ts) composes its warning from each conflict's verb, and validateManagedApiMethods composes message and hint from verb and needs. Removing the helper changes no string either emits. Test Core 8/8 and Test UI 16/16 are green with it gone.
  • Attempt to break it: a comment left false. The only prose that said "the one sentence both consumers say" was the removed function's own docblock, and it leaves with the function. It was already false on main (neither consumer called it), so the removal makes the file truer, not staler. Every remaining comment was read against the tree: the file header's "exactly two consumers" describes the predicate and names reconcileManagedApiMethods and validateManagedApiMethods, both of which call checkManagedApiMethodAffordances at the head; "ONE table, read by the boot-time strip and by the authoring-time gate" is true; the docblocks of MANAGED_WRITE_VERB_AFFORDANCE, ManagedApiMethodConflict and checkManagedApiMethodAffordances name nothing removed. In the callers, registry.ts ("The judgement itself is NOT here ...") and the header of validate-managed-api-methods.ts ("All judgement lives in the SHARED predicate") speak of the predicate only; neither claims a shared sentence. The test file's header ("These cases mirror reconcileManagedApiMethods's own suite") stays true of what remains.
  • Attempt to break it: the alternative route. The card offered "align" only if a consumer exists. None does, and the helper cannot be made true without widening its signature: ManagedApiMethodConflict carries verb, needs, index and no bucket, so it cannot know a synced object refuses the userActions remedy (ADR-0153 D4; object.zod.ts line 4598). Keeping a published sentence that is wrong on one bucket and read by nobody is the worse of the two outcomes; retire is the right route, and it matches the claim's ruling.
  • Changeset prose against the tree. Each factual sentence checks: the subpath, the absence of callers, the two consumers wording their own messages, the three symbols that stay, the synced refusal. No overclaim found.

Findings: N1 (nit, ②, accepted deviation). No must-fix, no should-fix; nits alone end the round.

Implemented-by: claude/project-thread-8c9p9x
Reviewed-by: session_01FEkQ5mecqk8M5q9vjKj6aS

VERDICT: PASS

@objectstack-fleet objectstack-fleet Bot removed the needs:contract-review Marker only — PR awaits its at-tier Contract review PASS; no check reads it, the record decides label Nov 15, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:spec#4 · os-project-manager · session_01FEkQ5mecqk8M5q9vjKj6aS

ACCEPT · PR #33583 (#33522) · head 12a6f2e15dd70fc9a938eeb0dbb23214ad043b6c · 2026-11-15T02:18Z

席位核对

  • 形态: 5 files, +16/−55 (read from the PR's file list): describeManagedApiMethodConflicts and its docblock removed from packages/spec/src/data/managed-api-affordance.ts, its four test cases removed, one line out of each of api-surface/data.json and export-origins/data.json, and a '@objectstack/spec': patch changeset with the BREAKING banner. No governed path (check-governed-merges --pr 33583: NOT governed, 71 lines): Tier S.
  • 前提实测: zero consumers, measured by the seat before dispatch (objectstack incl. ui/, hotcrm, gallery, org code search), re-measured by the dev on its base and by the reviewer at the head. checkManagedApiMethodAffordances, ManagedApiMethodConflict and MANAGED_WRITE_VERB_AFFORDANCE stay; both production callers word their own messages.
  • 门禁 check-runs: on this head 72 runs: 57 success, 15 skipped, 0 failed. mergeable_state: clean.
  • 契约复审: CONTRACT_REVIEW_TIER PASS on this head, record 6887825608 (one nit, accepted). Ruling-ref for the in-seat review: 「你有 fable ,车道契约复审可以自己做」.
  • 接受的偏差: ADR-0087 marker not-required (no-migration-prescription), with the caller's fix as prose, because runtime-export-retired on main reads only the root entry and this name lives on ./data; the review judged it honest on main today (nit N1). Seat answer to the dev's open question: option A, land as is; no swap owed if PR feat(adr-0087): runtime-export-retired reads literal subpath keys #33520 lands later. Residual: the cloud repo is unreadable from this seat; an importer there fails loudly at compile time (TS2305).
  • 范围外去向: two released packages/lint/CHANGELOG.md entries name the helper → dropped — release-owned history, true of its release. The userActions remedy wording in the registry warning and the lint rule is PR fix(objectql, lint): synced objects are told to drop write verbs, not to open userActions #33517's (managedBy 'synced': the stripped-apiMethods warning and the lint sentence tell the author to open a verb through userActions, which a synced object refuses (after #32061) #32134) by ruling.
  • 落地条款: ready + auto-merge now under the maintainer's standing order 「按照 pm-dispatch 规则复核过的都授权」 (2026-10-25T11:35Z) and 「你应该使用 pm-dispatch 技能审核和落地pr」 (2026-11-07T16:59Z). K = 13 commits on main past the branch's last main merge 8e63ed87 (< 15).

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review November 15, 2026 02:18
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Nov 15, 2026
Any commits made after this event will not be merged.

This branch has not been deployed

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

Labels

documentation Improvements or additions to documentation protocol:data size/s tests tooling Fix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface

Projects

None yet

1 participant