Skip to content

fix(spec): the 18.x action-block variant migration entry says element:button spells it danger, not destructive - #27652

Merged
objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/project-thread-1yvwce
Oct 29, 2026
Merged

objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/project-thread-1yvwce

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

domain:spec#3 · os-support-ai · session_01WGufzjAFu9q3UWTLiMSuk9

Requested by Yibo Wang · project thread

Fixes #27589

Clause-②: no
Metadata-protocol: none

维护者速读

  • 改了什么:18.x 升级指南里 destructive → danger 那一条迁移说明,原来说「element:button 之类直接画 Button 原件的组件保留 destructive」,现在改成:element:button 本来就写 danger、拒收 destructive;只有把 variant 原样转给 Button 原件的 record:quick_actions 和 record:alert 的 action 还收 destructive。
  • 为什么改:这句话会在下一个 18.x 发版时固化进升级指南。作者照着它在 element:button 上写 destructive,保存时就被拒;人和读指南的 AI 都会被教错。
  • 风险与回滚:只改文字(迁移条目 reason、D2 转换的注释、一个测试的用例名),没有任何 schema、取值或转换行为变化;回滚即还原本 PR。
  • 先看:packages/spec/src/migrations/entries/semantic/18.ui-page-action-block-variant-destructive-refused.ts(改的那句)、packages/spec/src/conversions/page-action-block-variant-destructive-to-danger.test.ts(新 pin,句子与三处 schema 实测绑定)、.changeset/27589-action-block-variant-entry-element-button.md(同版本 changelog 的更正段)。
  • 两分钟验证:pnpm --filter @objectstack/spec exec vitest run src/conversions/page-action-block-variant-destructive-to-danger.test.ts,应见 41 个用例全绿;把条目文件换回 origin/main 的版本再跑,新增的 3 个用例转红。
  • 需要你做的:无,席位落地。

What changes

Before (origin/main 178b5238), the D3 entry ui-page-action-block-variant-destructive-refused, reason, L19–L20:

The blocks now take danger and refuse destructive with the rename. Other components that draw the Button primitive directly (element:button and the like) keep destructive, the primitive's own word, and are not touched.

After:

The blocks now take danger and refuse destructive with the rename. element:button already spells it danger (ElementButtonPropsSchema.variant) and refuses destructive, so it is not touched. destructive is the React Button primitive's own word; the two record blocks that forward a variant to that primitive unchanged, record:quick_actions and a record:alert action, still take it and are not touched either.

Measured on origin/main:

  • ElementButtonPropsSchema.variant (ui/component.zod.ts) is z.enum(['primary', 'secondary', 'danger', 'ghost', 'link']) on a strict object: danger parses, destructive is refused.
  • The card's wanted wording "no metadata block accepts it" does not hold, so this PR does not say it. Two record rows still take the primitive's vocabulary on purpose: RecordQuickActionsProps.variant and RecordAlertActionSchema.variant are both z.enum(['default', 'destructive', 'outline', 'secondary', 'ghost', 'link']), described as "the Button primitive's own vocabulary". The D2 conversion does not visit either type. The corrected sentence names them instead, and the pin asserts both accept destructive.

The upgrade guide is generated, not committed (content/docs/protocol-upgrade/ is git-ignored; the docs build and the release lane run build-upgrade-guide.ts). Regenerated locally from this head with --out and --docs: the protocol 18 page prints the new sentence, and `element:button` and the like has 0 hits in either output (1 hit each on origin/main).

Copies of the same claim, searched in packages/spec, content/docs/** and skills/**:

Where Governed Change
packages/spec/src/conversions/registry.ts, the D2 conversion's docblock ("destructive stays the Button primitive's word on element:button and the other primitive-backed components") no corrected to the same facts
packages/spec/src/conversions/registry.ts, fixture comment "The Button primitive's own word on another component" no reworded to "Another component type: not this entry's, whatever it holds (its own row refuses destructive)"; the fixture value is unchanged (prose only)
packages/spec/src/conversions/page-action-block-variant-destructive-to-danger.test.ts, header bullet and one control label no reworded; the control case is unchanged
.changeset/26779-action-block-variant-danger.md ("element:button, toasts, alerts, badges and the like keep destructive") yes (check-empty-changeset refuses edits to a changeset the base carries) not edited; this PR's changeset carries a "Supersedes, in the same release" paragraph
content/docs/**, skills/** 0 hits

The card body of #27243, which quotes the sentence, is the seat's to correct and is not touched here.

Tests

page-action-block-variant-destructive-to-danger.test.ts gains the D3 entry says what the untouched components accept (#27589), which reads the entry from MIGRATIONS_BY_MAJOR[18] (the generated chain build-upgrade-guide.ts prints) and pins:

  • element:button accepts danger and refuses destructive, and the reason carries the corrected element:button sentence;
  • record:quick_actions and a record:alert action accept destructive, and the reason carries the sentence naming them;
  • none of reason, replacement, acceptanceCriteria matches /keeps? `destructive`/ or contains "element:button and the like".

One-shot negative run: with the entry file checked out from origin/main and the registry regenerated, the three new cases go red (Tests 3 failed | 38 passed (41), lock VERDICT command-exit 1); restored with git checkout HEAD --, blob hash matched HEAD.

All on head 00bd2dad, under os-verify-lock:

spec local suite + typecheck, spec repo suite
  • pnpm --filter @objectstack/spec test && pnpm --filter @objectstack/spec typecheck: Test Files 751 passed | 1 skipped (752), Tests 22345 passed | 1 skipped | 1 todo (22347); check:test-typecheck: OK; VERDICT command-exit 0.
  • pnpm --filter @objectstack/spec test:repo: Test Files 86 passed (86), Tests 1433 passed (1433); VERDICT command-exit 0.

No dogfood run: no ! in the title and no (narrowing) arm.

Acceptance notes

  • The conversion's fixture keeps an element:button with variant: 'destructive' as its "another component type" control. That value is one element:button's own row refuses; it stays because the binding is prose only and the control is still true (the conversion never visits the type). Noted, not changed.
  • The 26779 changeset's list also names "toasts, alerts, badges"; those were not measured here and are left as stated.

Verification

node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 81 families on 00bd2dad (4 paths vs merge base 178b5238).

81 derived gates: 81 exit 0
  • First serial pass: 70 exit 0, 11 exit 3 (built-output prerequisites: the spec dist, and the pinned fixture commit for check-plugin-teardown-shape --self-test on the shallow clone).
  • After turbo run build --concurrency=2 --filter='@objectstack/lint...' (VERDICT command-exit 0) and git fetch origin 621a4876, the 11 were rerun: all exit 0 (check:api-surface, check:browser-reachable-entries, check:dual-source-exports, check:entry-nameability, check:exported-any, check:dts-closure, check:dual-build-cjs-loads, check:lean-entry-closure, check:sourcemap-no-sources-content, lint check:doc-formula-expressions, check-plugin-teardown-shape --self-test).
  • dispatch-gates --ran: "81 derived famil(ies) accounted for — 81 run, 0 NOT-MEASURED".

check-changeset-no-major with this body as the event: exit 0, "✓ LEVEL AXIS: this PR declares clause-② no and metadata-protocol none, and it introduces no changeset entry graded minor or above".

CI families are read from this PR's check-runs.


Generated by Claude Code

🤖 Generated with Claude Code

https://claude.ai/code/session_01WGufzjAFu9q3UWTLiMSuk9

…:button keeps destructive

element:button spells the destructive arm `danger` and refuses
`destructive`; only the record blocks that forward a variant to the
Button primitive unchanged (record:quick_actions, a record:alert action)
still take the primitive's `destructive`. Corrects the D3 entry's reason
(printed by the upgrade guide), the D2 conversion's docblock and the
conversion test's wording, and pins the corrected sentence against the
rows it describes.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WGufzjAFu9q3UWTLiMSuk9
@github-actions github-actions Bot added size/s documentation Improvements or additions to documentation tests tooling labels Oct 29, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

Nothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 1 changed package(s)), so this run has no opinion about the docs.

What this run could not see

Coarse fallback — 167 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 9d5ebfdef05caf03b5b0f2013873f1f704c8145b → packageMentionDocs.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

triage#1 · os-sales · session_01L6bhgV4fMGJHSdSdx3u9mK

Contract-review-claim: session_01L6bhgV4fMGJHSdSdx3u9mK · head 00bd2da · 2026-10-29T17:02Z


Generated by Claude Code

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

triage#1 · os-sales · session_01L6bhgV4fMGJHSdSdx3u9mK

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 00bd2dadd6527effe0d310f0726c2eb8d9e17a9f
Local-runs: none
Scope: packages/spec/src/conversions/registry.ts, packages/spec/src/migrations/entries/semantic/18.ui-page-action-block-variant-destructive-refused.ts + packages/spec/src/ui/component.zod.ts, packages/spec/src/conversions/page-action-block-variant-destructive-to-danger.test.ts, packages/spec/src/conversions/conversions.test.ts, packages/spec/src/migrations/types.ts, packages/spec/scripts/build-upgrade-guide.ts, ui/packages/components/src/renderers/basic/elements.tsx, ui/packages/components/src/ui/button.tsx, ui/packages/plugin-detail/src/renderers/record-alert.tsx, ui/packages/plugin-detail/src/renderers/record-quick-actions.tsx, .changeset/26779-action-block-variant-danger.md

Inputs read: card #27589 (body, triage 6500456009, claim 6500945752, seat-4 note 6501262533, os-dev-report 6502290069), PR #27652 (body, 4-file list, net diff vs merge base 178b5238), and the 54 check-runs on the head. The rest of the diff (the pin test and the new changeset) is the lane seat's ACCEPT at TIER_DEFAULT; both are READ here as the gate and the release note of the hits text, never reviewed.

① Derived judgments

  • Accept-set: unchanged, judged right. The diff touches no zod row. component.zod.ts is not in the file list; at the head ElementButtonPropsSchema.variant (L2968) is still primary | secondary | danger | ghost | link on a strict object, RecordAlertActionSchema.variant (L2230) and RecordQuickActionsProps.variant (L2342) still take default | destructive | outline | secondary | ghost | link, and the four action-block rows still refuse destructive through refuseActionBlockDestructiveVariant (L3462). Nothing an author may write changed.
  • Conversion behaviour: unchanged, judged right. The D2 apply body in registry.ts is untouched; only the docblock (L11533-L11537) and one fixture comment (L11612) moved, and the fixture's before / after values are byte-identical to main.
  • Public surface: one published prose value changed, judged right and correctly declared. entry.reason of ui-page-action-block-variant-destructive-refused is exported through the generated MIGRATIONS_BY_MAJOR[18].semantic (@objectstack/spec/migrations) and printed by build-upgrade-guide.ts L136 as "Why not automatic: …" and as the os migrate meta TODO text. The false sentence ("element:button and the like keep destructive") is gone from reason, replacement and acceptanceCriteria; the new sentences are measured true against the cited rows (④). surface, replacement, acceptanceCriteria, conversionIds are unchanged.
  • Registration: unchanged, judged right. migrations/registry.ts is generated from registry.ts.template + entries/ (gen:migration-registry, run by test, typecheck and build); the entry's file name and id did not move, so the 18 step registers it exactly as before. The pin's first case reads it back from that chain.
  • Leftover copies at the head: a sweep of packages/spec, content/docs, skills, docs/adr and .changeset for "and the like … destructive" / "keep(s) destructive" finds the superseded .changeset/26779-action-block-variant-danger.md L12 (governed, base-carried, not editable by this PR) and this PR's own changeset and pin, nothing else. The PR body's "0 hits in content/docs/**, skills/**" holds in the tree.

② Semver level

  • .changeset/27589-action-block-variant-entry-element-button.md grades @objectstack/spec patch. Right: string content of an exported constant, a comment, a test and a changeset; no row, value, export or conversion behaviour changes, so nothing an author writes or a consumer imports moves.
  • Clause-②: no and Metadata-protocol: none appear on the PR body and in the changeset body, and agree with the diff (no accept-set movement, no narrowing arm, no ! in the title). The Check Changeset and Governed Surface Queue Guard runs on the head are success.
  • Judged right: the "Supersedes, in the same release" paragraph corrects the frozen 26779 release note in the only channel open to it, since check-empty-changeset refuses edits to a base-carried changeset.

③ Boundary flags

open_questions: [] in the os-dev-report 6502290069; the four deviations and the two Acceptance notes are answered here.

  1. "The card's wanted wording 'no metadata block accepts it' was not used" — right. The card's premise is half true: element:button refuses destructive, but RecordQuickActionsProps.variant and RecordAlertActionSchema.variant accept it on main and at the head (L2342, L2230), and both renderers forward it to the Button primitive raw (record-quick-actions.tsx L399-L402 schema.variant || 'default'; record-alert.tsx L346 props.action?.variant || …). Writing the card's sentence would have replaced one false guide sentence with another. The chosen sentence names the two rows and the pin asserts both accept destructive.
  2. "PR opened without assignees and without a review request" — process only, no bearing on the tree; the contract-review claim 6503167267 on the PR closes the hand-over.
  3. "The conversion fixture keeps its element:button variant: 'destructive' control" — judged acceptable, no finding. The control exists to prove the conversion never reads another component type, and destructive on a non-action type is the most tempting input that proof can use. No gate parses fixture.after through the component-props schemas (conversions.test.ts compares before → after and parses only flow / record-config fixtures; migrations.test.ts replays; semantic-relevance.test.ts evaluates relevance over before), and fixtures reach no author-facing output (build-upgrade-guide.ts and upgrade-guide-docs.ts print surface / summary / reason, never fixtures). The comment now says truthfully that the row refuses the value. The control can keep its value.
  4. "Worktree kept for a patch round" — not a property of the tree.
  5. Acceptance note: 26779's list "toasts, alerts, badges" left as stated — accepted for this PR, noted for the seat. Out of hits and outside this PR's file list (the changeset is frozen). Measured at the head for the record: "alerts" is true as the record:alert action variant; "badges" is true as app.zod.ts L354 badgeVariant (a Badge, not Button, vocabulary); no spec row for a toast carries a destructive variant (0 hits in component.zod.ts / app.zod.ts). The superseding paragraph reads only element:button out of the list, which is the one item the card filed. Not escalated: the sentence's remaining items are either true or vacuous, and no author is told to write a refused value by them.
  6. Acceptance note: #27243's card body still quotes the old sentence — the seat's own action per the dispatch order and triage; not a tree matter.

④ Design judgment

packages/spec/src/migrations/entries/semantic/18.ui-page-action-block-variant-destructive-refused.ts — judged against the rows it describes, the renderers behind them, the D3 contract (SemanticMigration.reason, "the one load-bearing prose field", migrations/types.ts L106-L110) and the upgrade-guide printer. Holds.

  • Sentence 1, "element:button already spells it danger (ElementButtonPropsSchema.variant) and refuses destructive, so it is not touched": true on every clause. ElementButtonPropsSchema is a lazySchema over a strictObject whose surface is "this element:button" and whose variant is z.enum(['primary', 'secondary', 'danger', 'ghost', 'link']) (L2962-L2970); it is the props row of 'element:button' in the component-props map (L8625), so the save door and os validate refuse destructive there. elements.tsx L308-L314 SHADCN_BUTTON_VARIANT maps danger to the primitive's destructive, so "already spells it danger" names the same arm. "Not touched": the D2 apply visits only ACTION_RUNNER_BLOCK_TYPES, ACTION_CONTAINER_BLOCK_TYPES and action:bar; element:button returns component unchanged.
  • Sentence 2, "destructive is the React Button primitive's own word; the two record blocks that forward a variant to that primitive unchanged, record:quick_actions and a record:alert action, still take it and are not touched either": true on every clause. button.tsx L12 declares destructive as a cva variant of the primitive. record-quick-actions.tsx L396-L402 forwards the block's own schema.variant to Button raw (only a declared action's spec variant is mapped through SPEC_ACTION_TO_BUTTON_VARIANT); record-alert.tsx L346 forwards props.action?.variant raw. Neither type is visited by the conversion. Within component.zod.ts exactly two variant enums carry destructive (L2230, L2342), so "the two record blocks" is a complete census of Button-forwarding page rows at the head.
  • Field choice: the scoping sentence was already in reason on main; replacing it in place keeps surface, replacement and acceptanceCriteria untouched, which is right since none of them made the false claim. reason carries no tracker number (the authoring-prose rule), and the parenthetical symbol name matches the entry's own register (ActionSchema.variant is named two sentences earlier).
  • Printer: build-upgrade-guide.ts L136 prints reason inside one list sub-item; the new text has balanced backticks and no line-breaking construct, so the generated protocol-18 page reads as one bullet. The dev's local regeneration is not needed to judge this; the printer is read.
  • Break attempts: (a) could the sentence teach destructive on a record block as the preferred spelling? It says "still take it", a statement of acceptance, not a prescription; the blocks' own describe strings say the same. (b) Could record:quick_actions map the block variant so "unchanged" is false? No, L402 forwards schema.variant raw; only action.variant (spec dialect) is mapped. (c) Could the entry fall off the 18 step with the longer string? No, registration keys on file name and id; the generated chain is what the pin reads. None break.
  • Should-fix (not blocking): the word "two" is a count claim the pin does not bind. the record blocks that forward to the Button primitive still take its destructive asserts the two named rows accept destructive and that the sentence is present, but nothing goes red when a third variant row taking destructive is added to a page component, so the guide would then under-count silently. Either drop the count ("the record blocks that forward …") or pin it (count the component.zod.ts props rows whose variant enum carries destructive and assert 2). A later PR may carry it.

packages/spec/src/conversions/registry.ts — judged against the apply body beneath the docblock, the fixture it annotates, and the rows the new prose names. Holds.

  • Docblock L11530-L11537: "so is every other component type, which this entry never reads" is what apply does (memberLists is undefined for any type outside the three sets, returning component). "element:button already spells the arm danger and refuses destructive" and "the record blocks that forward a variant to the Button primitive unchanged (record:quick_actions, a record:alert action) keep the primitive's own destructive" are the same two measured facts as the entry's, spelled consistently with it.
  • Fixture comment L11612: "Another component type: not this entry's, whatever it holds (its own row refuses destructive)" is true of the element:button node beneath it and of apply; the before and after values are unchanged, and conversions.test.ts / migrations.test.ts still compare them (both Test Core shard families success on the head). The control's design is judged under ③.3 above: acceptable as the strongest "never reads the type" input, with no gate or author-facing output parsing it.
  • Break attempt: does the new docblock promise anything apply does not do? No, it names no new reach, and the surface string L11586-L11590 still lists only the action-block positions.

Gate for the rule (read, not reviewed): page-action-block-variant-destructive-to-danger.test.ts L233-L269 reads the entry from the generated MIGRATIONS_BY_MAJOR[18].semantic, asserts the three schema facts with safeParse, asserts the two sentences by substring, and asserts the absence of /keeps? \destructive`/ and "element:buttonand the like" acrossreason, replacementandacceptanceCriteria. The fact assertions and the text assertions are separate expects, so a future row change goes red on the fact before the text can drift. The PR body's one-shot negative (3 of 41 red with the mainentry restored) matches what those assertions would do; the record relies on the head's greenTest Core` runs, not on that account.

Check-runs on the head: 54 runs, every completed conclusion success or skipped (Test Core and all 8 shards, TypeScript Type Check, Lint & Repo Gates, Check Changeset, Governed Surface Queue Guard, PR-body guards, Spec property liveness, Flag docs affected by code changes, Build Core, UI type/lint/build/E2E families); no failure, cancelled or action_required.

Findings: 0 must-fix, 1 should-fix (the unpinned count "two", non-blocking).

Implemented-by: claude/project-thread-1yvwce
Reviewed-by: session_01L6bhgV4fMGJHSdSdx3u9mK

VERDICT: PASS


Generated by Claude Code

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:spec#3 · os-support-ai · session_01WGufzgbJhFoXYsLSe5WSPP

维护者速读 (席位终稿)

  • 改了什么:18.x 升级指南里 destructive → danger 那一条迁移说明,原来说「element:button 之类直接画 Button 原件的组件保留 destructive」,现在改成:element:button 本来就写 danger、拒收 destructive;只有把 variant 原样转给 Button 原件的 record:quick_actions 和 record:alert 的 action 还收 destructive。
  • 为什么改:这句话会在下一个 18.x 发版时固化进升级指南。作者照着它在 element:button 上写 destructive,保存时就被拒;人和读指南的 AI 都会被教错。
  • 风险与回滚:只改文字(迁移条目 reason、D2 转换的注释、一个测试的用例名),没有任何 schema、取值或转换行为变化;回滚即还原本 PR。
  • 先看:packages/spec/src/migrations/entries/semantic/18.ui-page-action-block-variant-destructive-refused.ts(改的那句)、packages/spec/src/conversions/page-action-block-variant-destructive-to-danger.test.ts(新 pin,句子与三处 schema 实测绑定)、.changeset/27589-action-block-variant-entry-element-button.md(同版本 changelog 的更正段)。
  • 两分钟验证:pnpm --filter @objectstack/spec exec vitest run src/conversions/page-action-block-variant-destructive-to-danger.test.ts,应见 41 个用例全绿;把条目文件换回 origin/main 的版本再跑,新增的 3 个用例转红。
  • 需要你做的:无,席位落地。

席位意见:接受。分诊契约复核 PASS(6503382064,就在当前 head 上),没有 must-fix。唯一的 should-fix(「两个」是数量断言,pin 没绑定)不阻塞,记为偏差。

席位核对 · ACCEPT · domain:spec seat 3 · os-support-ai · session session_01WGufzgbJhFoXYsLSe5WSPP · 2026-10-29T17:15Z

Head: 00bd2dadd6527effe0d310f0726c2eb8d9e17a9f · card #27589 · claim 6500945752

  1. 形态: a draft PR to main carrying Fixes #27589: 4 paths (+76 / −9), inside the claim's surface. It changes the D3 entry's reason, the D2 conversion's docblock and a fixture comment in conversions/registry.ts, adds a pin and a @objectstack/spec patch changeset with a same-release correction paragraph for .changeset/26779. Clause-②: no / Metadata-protocol: none. check-governed-merges reports NOT governed, so the ordinary queue landing applies.
  2. 前提实测: the premise holds, and the card's own wording was corrected by measurement: ElementButtonPropsSchema.variant refuses destructive, while record:quick_actions and a record:alert action forward the primitive's enum and still take it. The contract review (6503382064, PASS, this head) re-measured the three schema facts, the printer and the pin.
  3. 门禁 check-runs (on this head): 57 runs read at 2026-10-29T17:15Z: every run is success or an expected skip, and none is red or pending. Check Changeset re-ran on the label edit and is green. Dev-side: spec 751 files and test:repo 86/86, dispatch-gates --ran 81/81 with 0 NOT-MEASURED. The one-shot negative turns 3 of 41 red with main's entry restored.
  4. 接受的偏差: the review's should-fix. The sentence names "two" record blocks that still take destructive, and the pin binds the two named rows but not the count, so a third such row would leave the guide under-counting silently. The seat lands without it: the card is release-priority p1, and the pinned rows make today's sentence true.
  5. 范围外去向: the closed card [skills-docs owed] no objectui skill eval exercises an action block's variant, so the destructive → danger rename (#26779) is untaught to an agent #27243's business reason repeated the false sentence; the seat posted a correction there (skills/** untouched, Skills-docs: none). The upgrade guide is generated at docs build, so no committed copy moves.
  6. 落地条款: the seat checked the prose faces against the diff on this head: the PR body (r0), the changeset and the rewritten strings. The seat readies the PR and arms auto-merge in this act, follows it to MERGED, and lands spec: the 18.x migration entry for the action-block destructive → danger rename says element:button keeps destructive, but element:button refuses destructive and spells it danger #27589.

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 29, 2026 17:16
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 29, 2026 17:16
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 29, 2026
Merged via the queue into main with commit 7538f27 Oct 29, 2026
58 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/project-thread-1yvwce branch October 29, 2026 18:27
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 size/s tests tooling

Projects

None yet

1 participant