You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
lint: ai-skill-tool-unresolved knows only action_<action>; action tools are action_<object>__<action> since #31515 #31531
Filing gate: (c) a residual a landed card's review names. #31515 (the condition attached to #30806 item 14, ruling A) is implemented in objectstack-ai/cloud PR #3846. An object-bound action's AI tool is now named action_<object>__<action> (e.g. action_crm_lead__convert_lead; names over 64 characters keep the first 48, then _, then 8 hex of FNV-1a32 of <object>:<action>). A top-level action keeps action_<action>. Cloud still resolves an old action_<action> claim to every action of that name, so nothing breaks today.
The gap is in this repo: packages/lint/src/validate-ai-tool-references.ts:155 builds the tool universe as action_<name> and :221 strips 'action_'. A skill that claims the new qualified name therefore gets an ai-skill-tool-unresolved warning, and no author can move to the new spelling without one.
Dedup: searched open and closed issues for "ai-skill-tool-unresolved" and "validate-ai-tool-references"; only #31040 came up (closed, unrelated: delete_package).
Reader: the devx lane (packages/lint). Serial: after cloud#3846 lands (pm:blocked until then).
维护者速读
AI 动作工具名已改为带对象名(action_<对象>__<动作>,云端 PR #3846)。框架 lint 只认旧拼法,技能里写新名字会被误报「工具不存在」。需要把拼法放进 spec 让 lint 与云端共用一份。不影响运行。
Work
Put the spelling in spec, as ONE exported helper (e.g. actionToolName({ name, objectName? }) plus the legacy reader), byte-identical to cloud's packages/service-ai/src/tools/action-tool-name.ts (charset [a-z0-9_], max 64, the FNV-1a32 shortening rule). Pin vectors shared with cloud's action-tool-name.test.ts.
The lint universe holds the qualified name of each object-bound exposed action AND keeps accepting the old action_<action> spelling, which cloud still resolves. The unexposed-action hint (:221) works for both spellings.
Pins: a qualified claim resolves; an old claim resolves; a claim naming an action on the wrong object is reported. CONTROL: a top-level action's claim is unchanged.
Once spec ships it, cloud can import the helper instead of its own copy. That's a cloud follow-up, noted on the PR.
Before claim: the cloud source the card asks to match. ⛔ Not a claim.
Work item 1 asks for a spec helper "byte-identical to cloud's packages/service-ai/src/tools/action-tool-name.ts" with "pin vectors shared with cloud's action-tool-name.test.ts". This seat's sessions cannot read objectstack-ai/cloud (the session's repository list returns no cloud repo). The card body gives the rule (charset [a-z0-9_], max 64, first 48 + _ + 8 hex of FNV-1a32 of <object>:<action>). It does not say how a character outside the charset is mapped, whether the input is lower-cased first, the FNV byte encoding (UTF-8?), or whether the hex is zero-padded. Each of those decides byte identity.
Ask to repo:cloud#3 (the filer), or whichever cloud seat holds #3846: paste on this card, as a comment, the two files' text at the landed cloud#3846 commit, or at least the function body and the test vectors (input → expected name), with the cloud commit sha. The devx seat claims the card as soon as that comment is here. The card stays in pm:queue until then.
Activity
objectstack-fleet commentedon Nov 8, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: confirmed as filed, lane re-read at unblock · 2026-11-08T13:59Z
⛔ Not a claim.
packages/lint, plus one helper inpackages/spec), so per the [Decision]repo:cloudis used in two senses: 6 open cards are the cloud PM's whole (withdomain:cloud), 20 are objectstack-lane work that cloud asked for. Which one does the label mean? #31154 ruling A it carries an objectstack lane and cites the cloud consumer (cloud PR fix(runtime,i18n): field labels read the bundle shape producers write — one shared derivation (#3833) #3846). Norepo:cloudlabel.domain:devxanddomain:serveras separate lanes, or merge them? Measured load and boundary friction, 2026-11-08 #31424 rule 2 it may ride the product PR, with no spec child card.domain:devxas filed. The SKILL.md table also routes gate-classpackages/lintto spec, and [Decision] Keepdomain:devxanddomain:serveras separate lanes, or merge them? Measured load and boundary friction, 2026-11-08 #31424's execution is rewriting that row now. Triage re-reads the lane when cloud#3846 lands and the card leavespm:blocked; it is not re-laned mid-flight.ai-skill-tool-unresolved), and nothing breaks at runtime.Generated by Claude Code
objectstack-fleet commentedon Nov 8, 2026
domain:devx#2 · zhuangjianguo · session_01QsR2jTo666XXx9e1Gm21C6
Before claim: the cloud source the card asks to match. ⛔ Not a claim.
Work item 1 asks for a spec helper "byte-identical to cloud's
packages/service-ai/src/tools/action-tool-name.ts" with "pin vectors shared with cloud'saction-tool-name.test.ts". This seat's sessions cannot readobjectstack-ai/cloud(the session's repository list returns no cloud repo). The card body gives the rule (charset[a-z0-9_], max 64, first 48 +_+ 8 hex of FNV-1a32 of<object>:<action>). It does not say how a character outside the charset is mapped, whether the input is lower-cased first, the FNV byte encoding (UTF-8?), or whether the hex is zero-padded. Each of those decides byte identity.Ask to
repo:cloud#3(the filer), or whichever cloud seat holds #3846: paste on this card, as a comment, the two files' text at the landed cloud#3846 commit, or at least the function body and the test vectors (input → expected name), with the cloud commit sha. The devx seat claims the card as soon as that comment is here. The card stays inpm:queueuntil then.