Skip to content

docs(adr): ADR-0048 §5 describes the namespace-prefix lint as it now ships - #30988

Merged
os-zhuang merged 2 commits into
mainfrom
claude/project-thread-uogs4i
Nov 6, 2026
Merged

os-zhuang merged 2 commits into
mainfrom
claude/project-thread-uogs4i

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Elon · project thread

domain:devx#1 · os-elon-musk · session_016WV4cyadQ5Zhih2y1GNTQm

Fixes #30804
Clause-②: no
Metadata-protocol: none

维护者速读

What changes

ADR-0048 §5's first bullet described the old naming/namespace-prefix: a warning on seven types (app, page, dashboard, flow, action, report, dataset) that exempted only the namespace-named app and sys_ names. It now describes the rule as it ships after #30842 and #30927:

The bullet links both maintainer rulings it rests on:

No other line of the ADR changes. Its status, decision and addenda are untouched.

Why

Ruling C on #30798 (maintainer, verbatim 「同意 c」): every package-authored metadata name carries its namespace, phased. Phase 2 (#30804) shipped as #30842 (the lint and os generate) and #30927 (the example renames and the guest_portal exemption). This one-file PR brings the ADR's phasing list in line and closes the card.

Acceptance notes

  • Tier H. This touches docs/adr/**, so it needs a governed approver (os-zhuang or hotlong). Auto-merge is not armed.
  • Changeset: none. It is a docs-only PR and releases nothing, so it carries the skip-changeset label.
  • Two other sentences in the ADR mention the rule and stay as written. §3.4 item 4 (the os lint rule "keeps authoring hygiene") and the paragraph after it (a package shipping two page/home items "stays covered by the naming/namespace-prefix lint") are both still true.

Verification

  • Every identifier the bullet names exists on main at 9d313f3ac: NAME_JUDGED_ELSEWHERE, carriesPackageNamespace and PLATFORM_REQUESTED_BARE_NAMES.
  • Local gates: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack at 3329301de derived 21 commands. All 21 ran and exited 0, and --ran reconciles 21 derived / 21 run / 0 NOT-MEASURED.
Gates run at 3329301 (21)
node scripts/check-adr-links.mjs :: exit 0
node scripts/check-adr-links.mjs --self-test :: 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/ci/plan-test-core-shards.mjs --self-test :: exit 0
pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0
pnpm check:adr-anchors :: exit 0
pnpm check:adr-index :: exit 0
pnpm check:adr-symbol-anchors :: exit 0
pnpm check:ci-filter-parity :: exit 0
pnpm check:closed-ceremony-text :: exit 0
pnpm check:cross-package-test-inputs :: exit 0
pnpm check:doc-authoring :: exit 0
pnpm check:driver-memory-census :: exit 0
pnpm check:gitlink-declared :: exit 0
pnpm check:nul-bytes :: exit 0
pnpm check:pm-governed-merges :: exit 0
pnpm check:pm-prior-rulings :: exit 0
pnpm check:refd-timer-probe :: exit 0
pnpm check:watch-hint-literal :: exit 0

Human Minimum

  • 1. Schemas start as Zod; packages/spec holds no runtime logic. (packages/spec not touched.)
  • 2. Every name I added uses the casing for its kind. (No names added.)
  • 3. No formatter ran; pnpm lint passes. (Markdown only.)
  • 4. One issue, one branch off an up-to-date main, one pull request.
  • 5. A change that publishes carries a changeset, and both declaration lines are filled in here. (Publishes nothing: skip-changeset.)
  • 6. packages/spec touched: its generated artifacts are regenerated and committed. (n/a)
  • 7. No hand edits to content/docs/references/, packages/*/CHANGELOG.md or content/docs/releases/.
  • 8. Title, body and comments are in English.
  • The Before Submitting list in CONTRIBUTING.md is done.

🤖 Generated with Claude Code

https://claude.ai/code/session_016WV4cyadQ5Zhih2y1GNTQm

…ships

The §5 bullet still said `naming/namespace-prefix` warns on seven types
and only exempts the namespace-named app and `sys_` names. Under ruling C
on #30798 it warns on every bare package-authored name in every manifest
collection. The bullet now names what the rule leaves to other checks,
what counts as carrying the namespace (including the `<ns>.<short>`
capability names, maintainer ruling 2026-11-06T11:08Z), the
platform-requested `guest_portal` exemption (maintainer ruling
2026-11-06T14:57Z), and that the refusal is phase 3 (#30806).

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016WV4cyadQ5Zhih2y1GNTQm
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:devx#1 · os-elon-musk · session_016WV4cymvo9YoyLwKCXXBNw

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 3329301de627d0641656676cd12f40a4396cda2c
Local-runs: none
Scope: docs/adr/0048-cross-package-metadata-collision.md + packages/cli/src/commands/lint.ts, packages/cli/src/utils/project-namespace.ts, packages/spec/src/meta-spelling/manifest-collection-spelling.ts, packages/rest/src/form-routes.ts, docs/adr/0138-guest-model-anonymous-principal-doors-grants-and-organization.md

Independence: this review ran in a sub-agent at CONTRACT_REVIEW_TIER, separate from the drafter (card-thread session session_016WV4cyadQ5Zhih2y1GNTQm). Inputs were card #30804 (body and all 8 comments), PR #30988 (body, file list, diff against main at 000a4c0d), the check-runs on the head, and the cited code read off origin/main. The PR body's account was not trusted; every claim below was checked against the tree.

Face: reviewFace on the file list answers rules (a path the governed register names), hits = docs/adr/0048-cross-package-metadata-collision.md. The diff is one file, +17/-3, one commit (3329301de), replacing the first bullet of ADR-0048 §5. No other line of the ADR moves (status line, §3.4, the three addenda untouched).

① Derived judgments

  • Accept-set: no change. No schema, no Zod, no runtime, no CLI code in the diff. The lint's accept set (which names os lint warns on) was changed by fix(cli): os lint warns on every bare package-authored metadata name, and os generate writes them prefixed #30842 (1697d5ca9) and refactor(examples): every example-authored metadata name carries its package namespace #30927 (9d313f3ac), both merged before this head; this PR describes that shipped behaviour and widens or narrows nothing. Right.
  • Public surface: no change. No export, no error code, no rule id, no door. The identifiers the bullet names (naming/namespace-prefix, docs/namespace-prefix, PLATFORM_REQUESTED_BARE_NAMES, defineStack) all exist on main as spelled. Right.
  • Governed surface: Tier H. docs/adr/** is a Tier H register row, so this PASS record does not lift the landing by itself; an authorized APPROVED review by a GOVERNED_APPROVERS account (os-zhuang or hotlong) is still owed, and the owning seat lands it afterwards. The PR is a draft with auto-merge not armed and no review on it, which is the correct posture. Right.
  • Decision status: descriptive, not a new decision. The bullet records two maintainer rulings already on the card (comments 6683456244 and 6687835712) and the phase-2 ship; it reverses no accepted text, so no new ADR or status-line amendment is owed (AGENTS.md Prime Directive 13). Right.

② Semver level

  • skip-changeset label present on the PR; Check Changeset concluded success. The diff publishes nothing (a docs/adr markdown file; no package under packages/* touched), so no changeset is owed. Right.
  • Clause-②: no on the PR body. No capability is taken away at any consumer and no refusal is made real by this diff; the lint widening that fix(cli): os lint warns on every bare package-authored metadata name, and os generate writes them prefixed #30842 shipped carried its own @objectstack/cli patch changeset there. The declaration matches what the diff publishes. Right.
  • Metadata-protocol: none. No metadata type, collection or spelling changes. Right.

③ Boundary flags

  • Dev report for this PR (comment 6689005734): open_questions: [], security_findings: none, out_of_scope_findings: []. One deviation declared: the staged one-file patch was rewritten to cite both rulings with links and to name the guest_portal exemption. That is the seat's own order (comment 6687835712: "cites this ruling and the 11:08Z dotted-capability ruling"). Answered.
  • Earlier open questions on the card, all closed before this head: (a) dotted capability names carry the namespace, ruled 2026-11-06T11:08Z (comment 6683456244), and the bullet records it; (b) guest_portal exempt, ruled 2026-11-06T14:57Z, option (a) (comment 6687835712), and the bullet records it; (c) functions are outside PLURAL_TO_SINGULAR and are not judged, flagged for phase 3 (Bare-name phase 3: defineStack and the save door refuse a bare package-authored name; ADR-0129 and ADR-0048 amended; migration of stored and external references (ruling C on #30798) #30806). The bullet states functions as unjudged, which is what the code does, and leaves the phase-3 question where the dev report put it. Answered; (c) stays carried on Bare-name phase 3: defineStack and the save door refuse a bare package-authored name; ADR-0129 and ADR-0048 amended; migration of stored and external references (ruling C on #30798) #30806, which is open and labelled pm:blocked.
  • Tier H approval: not yet granted. The PR body names it, the dev report names it, and the seat's landing comment names it. Escalated to the owning seat as the one remaining landing condition; no seat may approve under any account.
  • Check-runs on 3329301de at review time: 19 success, 20 skipped, 0 failure, 4 still in_progress (Test Core (1/8), Type Check · debt ledger, Type Check · consumer gates, Lint · CI, release & engine gates). Check Documentation Links, Check Changeset, Governed Surface Queue Guard, PR-body guards, Lint · PM dispatch-gates and Lint · docs & code guards are green. The landing waits on the four to complete; none contradicts this record.

④ Design judgment

docs/adr/0048-cross-package-metadata-collision.md (the only hit), judged against its first consumer (the phase-3 dev on #30806 and any reader of the §5 phasing list) and its execution plan (the §5 phase list and the 2026-11-06 addendum's phasing), each factual claim read against the code on main:

  1. "warns on every bare package-authored top-level name in every manifest collection" — namespacePrefixIssues (lint.ts L261-341) iterates Object.keys(PLURAL_TO_SINGULAR) (30 keys in packages/spec/src/meta-spelling/manifest-collection-spelling.ts) and skips the three in NAME_JUDGED_ELSEWHERE, so 27 collections are judged. The doc comment calls PLURAL_TO_SINGULAR "the spec's manifest-collection map", so the bullet's vocabulary is the code's. Holds.
  2. "gives the rename as its fix" — the finding carries fix: renamed where renamed is the namespace, an underscore and the bare name (L287-298). Holds.
  3. "does not judge objects (defineStack refuses those), views (named for their object), docs (docs/namespace-prefix), extensions, translation bundles, fields, functions, or an item that declares overrides" — NAME_JUDGED_ELSEWHERE lists exactly objects (ADR-0129 refusal in defineStack and os validate), views (derived object.key), docs (docs/namespace-prefix, ADR-0046; the rule id is live in collect-docs). objectExtensions, picklistExtensions, translations, fields and functions are not keys of PLURAL_TO_SINGULAR, so the loop never reaches them; the doc comment (L208-215) gives the same reasons. isOverrideDeclaration (L435-437) exempts an item whose overrides is set (ADR-0146 D2). Holds.
  4. The predicate's four arms — carriesPackageNamespace (project-namespace.ts L84-89): name === namespace, name.startsWith(namespace + '_'), name.startsWith(namespace + '.'), name.startsWith('sys_'). The bullet names all four and no fifth. Holds. On the dot arm the bullet says "a dotted capability name", following the 11:08Z ruling's own words ("holds for capability names only, because no other type's name pattern admits a dot"); the code's arm is collection-agnostic, but SnakeCaseIdentifierSchema on app, page and permission-set names admits no dot, so the arm is reachable for the capability shape in practice. See should-fix (b).
  5. guest_portal exemption and its reason — PLATFORM_REQUESTED_BARE_NAMES = { permissions: ['guest_portal'] } (lint.ts L372-374), consulted through isPlatformRequestedBareName in the bare-name condition (L286). packages/rest/src/form-routes.ts L653 builds the public-form submit context with permissions: ['guest_portal'], and ADR-0138 D8's ledger row for "the form doors' guest_portal set name" reads keep. The bullet's reason ("the public form doors request it by that bare name") is what the code and ADR-0138 say, and the constant name is spelled as exported. The exemption covers that one name in that one collection, as the ruling confined it. Holds. (ADR-0138's row still points at rest-server.ts#registerFormEndpoints for the door while the context is built in form-routes.ts; that is ADR-0138's pointer, outside this diff, and the bullet avoids it by saying "form doors".)
  6. "also reports a name declared twice in one package" — the duplicate finding (L303-335) runs only for DUPLICATE_KEYED_TYPES: apps, pages, dashboards, flows, actions (keyed objectName:name), reports, datasets. The claim is true for those seven and silent about the other twenty judged collections, where a same-name pair is not reported by this rule (positions, permission sets and capabilities are refused at registration by the 2026-10-08 addendum instead). See should-fix (a). §3.4's "two page/home in one package stays covered" and the TL;DR item 4 remain true, as the PR body says.
  7. Warning-only; refusal is phase 3 (Bare-name phase 3: defineStack and the save door refuse a bare package-authored name; ADR-0129 and ADR-0048 amended; migration of stored and external references (ruling C on #30798) #30806) — both findings carry severity: 'warning' (L291, L329); the doc comment forbids promoting it here. Bare-name phase 3: defineStack and the save door refuse a bare package-authored name; ADR-0129 and ADR-0048 amended; migration of stored and external references (ruling C on #30798) #30806 is "Bare-name phase 3: defineStack and the save door refuse a bare package-authored name", open. Holds.
  8. Rulings linked — comments 6683456244 (posted 11:10Z, ruling at 11:08Z) and 6687835712 (posted 14:58Z, ruling 14:57Z) exist on Bare-name phase 2: the namespace-prefix lint warns on every bare non-object name; first-party templates and examples adopt the prefix (ruling C on #30798) #30804 and say what the bullet attributes to them; the issuecomment links resolve, and Check Documentation Links is green. Holds.
  9. Execution plan — the bullet stays [done] in the §5 list, points phase 3 at Bare-name phase 3: defineStack and the save door refuse a bare package-authored name; ADR-0129 and ADR-0048 amended; migration of stored and external references (ruling C on #30798) #30806, and does not touch the 2026-11-06 addendum's phasing paragraph (phase 1 Bare-name phase 1: refuse a second package holding a non-object name whose consumers resolve without package context (ruling C on #30798) #30803, phase 2 Bare-name phase 2: the namespace-prefix lint warns on every bare non-object name; first-party templates and examples adopt the prefix (ruling C on #30798) #30804/Bare-name phase 2: the published authoring skills teach one rule, every metadata name carries the namespace (ruling C on #30798) #30805, phase 3 Bare-name phase 3: defineStack and the save door refuse a bare package-authored name; ADR-0129 and ADR-0048 amended; migration of stored and external references (ruling C on #30798) #30806), so the two accounts agree. The first consumer (the Bare-name phase 3: defineStack and the save door refuse a bare package-authored name; ADR-0129 and ADR-0048 amended; migration of stored and external references (ruling C on #30798) #30806 dev) is told that PLATFORM_REQUESTED_BARE_NAMES is the exemption and that carriesPackageNamespace is the predicate, which matches the 11:08Z ruling's item 2 (move the predicate into spec as the one shared predicate). Holds.

Attempts to break it: a package that declares no manifest.namespace is not judged (L285 ns &&), and the bullet does not say so; "package-authored" plus "carries the namespace" implies a namespace to carry, and the object rule holds the same posture, so no reader is misled into a false warning, but the omission is noted below. No claim in the bullet contradicts §3.4 beyond what the 2026-11-06 addendum already narrows, and nothing in it depends on the PR body's account.

Findings:

  • should-fix (a) — claim 6 overstates the duplicate finding's reach. Suggested wording: "also reports a name declared twice in one package for apps, pages, dashboards, flows, actions (per objectName), reports and datasets". Not a must-fix: it is not a new claim relative to the bullet it replaces, no consumer acts on it, and the contract direction it states is right.
  • should-fix (b) — claim 4's "capability name" is narrower than the predicate's dot arm, which is collection-agnostic; a phrasing such as "a dotted ns.short name, the capability shape" keeps the ruling's intent without under-describing the code. Not a must-fix: phase 3 reads the shared predicate, not this sentence, by the same ruling.
  • should-fix (c) — the bullet could add that a package declaring no namespace is not judged (L285). Optional.

No must-fix. The bullet holds against the cited code and against the scenario it is accepted against (the §5 phasing list telling a reader, and the phase-3 dev, what os lint does today).

Implemented-by: claude/project-thread-uogs4i
Reviewed-by: session_016WV4cymvo9YoyLwKCXXBNw

VERDICT: PASS

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:devx#1 · os-elon-musk · session_016WV4cymvo9YoyLwKCXXBNw

维护者速读

席位核对 · ACCEPT · #30804 · 2026-11-06T15:59Z

Head-sha: 3329301de627d0641656676cd12f40a4396cda2c

@objectstack-fleet objectstack-fleet Bot added the pm:awaiting-merge PR only: landing waits on the maintainer's own review and merge (SKILL.md 复核 ②); never on an issue label Nov 6, 2026
…ing and the namespace guard reach

The contract review on the bullet found it said the duplicate finding
covers every collection, while it runs only for apps, pages, dashboards,
flows, actions, reports and datasets. The bullet now says so, says a
package with no `manifest.namespace` is not judged, and describes the
dot clause as the dotted `<ns>.<short>` shape rather than capabilities
alone, which is what the predicate checks.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016WV4cyadQ5Zhih2y1GNTQm
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:devx#1 · os-elon-musk · session_016WV4cymvo9YoyLwKCXXBNw

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 50f6f409f4ed9b161d90b8ad568cc014a1657c9c
Local-runs: none
Scope: docs/adr/0048-cross-package-metadata-collision.md + packages/cli/src/commands/lint.ts, packages/cli/src/utils/project-namespace.ts, packages/spec/src/meta-spelling/manifest-collection-spelling.ts, packages/rest/src/form-routes.ts, docs/adr/0138-guest-model-anonymous-principal-doors-grants-and-organization.md

Independence: delta review by the same sub-agent reviewer that rendered the PASS record on 3329301de, at CONTRACT_REVIEW_TIER, separate from the drafter (card-thread session session_016WV4cyadQ5Zhih2y1GNTQm). Inputs: the compare diff 3329301de...50f6f409f, the check-runs on 50f6f409f, and the same cited code on origin/main (unchanged since the first record; origin/main still at 000a4c0d). The PR body's account was not relied on.

Delta: one commit (50f6f409f, "docs(adr): the ADR-0048 §5 lint bullet names where the duplicate finding and the namespace guard reach"), one file, one hunk, +12/-10, entirely inside the §5 first bullet. The three should-fix items of the prior record are the only changes; the prior record's judgments ①–④ carry over except where this record says otherwise.

① Derived judgments

  • Accept-set: no change. Still a markdown-only diff; no code, schema or rule id moves. Right.
  • Public surface: no change. Every identifier the bullet names remains as spelled on main (naming/namespace-prefix, docs/namespace-prefix, manifest.namespace, objectName, PLATFORM_REQUESTED_BARE_NAMES, defineStack). Right.
  • Governed surface: Tier H, unchanged. The PR is still a draft; it has gained the pm:awaiting-merge label, which does not stand in for the GOVERNED_APPROVERS review that docs/adr/** requires. This record does not lift the Tier H landing. Right.
  • Decision status: descriptive. The commit names reach, not a new decision. Right.

② Semver level

  • skip-changeset label still present; nothing under packages/* touched; no changeset owed. Right.
  • Clause-②: no and Metadata-protocol: none on the PR body still match a diff that publishes nothing. Right.

③ Boundary flags

  • No new dev flag on the card for this head; the compare carries exactly the three should-fix items and nothing else, so no new boundary question is raised. Answered.
  • Tier H approval: still owed (os-zhuang or hotlong). Escalated to the owning seat, as before.
  • Check-runs on 50f6f409f at review time: 8 success (Auto Label, Test UI, Dogfood Regression Gate, filter, Check Documentation Links, PR-body guards, Check PR Size, Governed Surface Queue Guard), 16 skipped, 13 in_progress (the Lint · and Type Check · families, Plan Test Core shards), 0 failure. The landing waits on the 13 to complete and on Check Changeset, Test Core and Build Core to report; none contradicts this record.

④ Design judgment

docs/adr/0048-cross-package-metadata-collision.md, the only hit, judged on the three changed claims and on whether the commit introduces a new inaccuracy, each against the code on main:

  1. should-fix (c), the namespace guard — new text: "in every manifest collection of a package that declares manifest.namespace (a package without one is not judged)". namespacePrefixIssues reads stack.manifest?.namespace into ns only when it is a non-empty string (lint.ts L263-264) and gates the bare-name finding on ns (L283-284). The sentence matches; "declares" also covers the empty-string case, which the code treats as none. Holds.
  2. should-fix (b), the dot arm — new text: "is a dotted ns.short name, the capability shape". carriesPackageNamespace (project-namespace.ts L87) tests name.startsWith(namespace + '.') on every collection; the bullet no longer restricts the arm to capability names and keeps the 11:08Z ruling's framing as the shape it exists for. Holds.
  3. should-fix (a), the duplicate finding — new text: "reports a name declared twice in one package among its apps, pages, dashboards, flows, actions (per objectName), reports and datasets". DUPLICATE_KEYED_TYPES (lint.ts L416-432) holds exactly apps, pages, dashboards, flows, actions (registry key objectName:name, falling to GLOBAL_ACTION_OBJECT_KEY when object-less), reports, datasets. Seven named, seven in the code, "per objectName" is the composite key in one phrase. Holds.
  4. No other claim moved. The skips list, the four predicate arms, the guest_portal exemption with its reason and constant, both ruling links, warning-only status and the phase-3 pointer (Bare-name phase 3: defineStack and the save door refuse a bare package-authored name; ADR-0129 and ADR-0048 amended; migration of stored and external references (ruling C on #30798) #30806) are byte-identical apart from re-wrapping. Re-read against the first record's claims 1-9: all still hold.
  5. Nothing else in the file moved. The compare diff touches one hunk at L334-357, inside the §5 first bullet; the status line, §3.4, the TL;DR and the three addenda are untouched. Check Documentation Links is green on this head, so the re-wrapped issuecomment links still resolve.
  6. New inaccuracy introduced: none found. The parenthetical "a package without one is not judged" is scoped to this rule by its sentence and does not claim the other os lint rules skip such a package.

Findings: none. No must-fix, no should-fix. The bullet now matches the code on every claim the first record checked and the three it corrected.

Implemented-by: claude/project-thread-uogs4i
Reviewed-by: session_016WV4cymvo9YoyLwKCXXBNw

VERDICT: PASS

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:devx#1 · os-elon-musk · session_016WV4cymvo9YoyLwKCXXBNw

席位核对 · ACCEPT (delta) · #30804 · 2026-11-06T16:10Z

Head-sha: 50f6f409f4ed9b161d90b8ad568cc014a1657c9c

  • Delta: one commit, the same file, a +12/−10 wording change inside the §5 first bullet. It folds in exactly the three should-fix items of the prior record:
    • the namespace guard (ns &&);
    • the dot arm as "a dotted <ns>.<short> name, the capability shape";
    • the seven DUPLICATE_KEYED_TYPES.
      No other line moves.
  • Contract review: delta PASS at CONTRACT_REVIEW_TIER on this head, by the same reviewer, with no findings. The "accepted deviations" in the prior ACCEPT are now fixed, not carried.
  • Gates: the dev reports 21 of 21 derived gates exiting 0 at this head. CI on this head has no failure so far.
  • Landing: unchanged. Tier H needs an APPROVED review by os-zhuang or hotlong, who are requested. After that the seat lands it.

@os-zhuang
os-zhuang marked this pull request as ready for review November 6, 2026 16:11
@os-zhuang
os-zhuang enabled auto-merge November 6, 2026 16:11
@os-zhuang
os-zhuang added this pull request to the merge queue Nov 6, 2026
Merged via the queue into main with commit d5106ae Nov 6, 2026
42 checks passed
@os-zhuang
os-zhuang deleted the claude/project-thread-uogs4i branch November 6, 2026 17:11
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 pm:awaiting-merge PR only: landing waits on the maintainer's own review and merge (SKILL.md 复核 ②); never on an issue size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants