Repository navigation
Description
Filing gate ③ a task the maintainer directed. The maintainer's words, verbatim, in the HotCRM project thread: 「hotcrm 的文档类型元数据还没有好好利用,综合评估一下应该写哪些文档,以及如何挂到菜单上」 (2026-10-27T12:09Z), then, on the evaluation whose step 6 is this card ("platform cards: book-label localization and a doc knowledge source, filed in objectstack"), 「同意,立卡派发。」 and 「立卡,你不需要派发」 (2026-10-27T12:54Z). Evaluation (Chinese): https://claude.ai/artifact/FSRbbgsT8uFhTxYe5jMBvS. Filed from that thread (session_01FEkQ5n3dhGrDN5nEgsJyck). Filed at destination for triage; ⛔ not a claim.
维护者速读
- 事由: ADR-0046 说包文档最大的消费者是应用内 AI(回答「怎么做」),但知识源只有对象、文件、网址三种,没有「包文档」,Ask 助手读不到 HotCRM 写的规则说明。
- 要做: 让已安装包的
doc能被助手检索(形状由分诊定:一种新的知识源,或助手的一个读文档工具),并遵守书的访问控制。 - 完成标准: 在 HotCRM 里问 Ask「大单审批什么时候触发」,它引用
crm_sales_opportunities作答;销售代表问管理员手册里的内容,得不到受限文档的内容。
Business reason: HotCRM is about to grow its in-app docs from 4 to 20 (rules the screens do not show: routing, approval thresholds, SLAs, visibility, metric definitions). The reader most likely to ask those questions asks the assistant first. Without this, every package author writes the same rule twice, once as a doc and once as skill prompt text, and the two drift.
Reader (who acts): objectstack triage (domain:server for service-knowledge and the agent runtime; domain:spec if a source kind is added).
Dedupe: objectstack issue search (repo-scoped), queries "knowledge source kind doc package docs agent grounding RAG" and "agent answers how-to questions from package docs doc metadata knowledge", 2026-10-27 → 0 hits on the subject (closest: #10730, the retired agent.knowledge key documented as live, closed).
Readings (objectstack main 86ae47e1)
packages/spec/src/ai/knowledge-source.zod.ts:KnowledgeSourceKindSchemais a discriminated union ofobject,file,http— nodoc.packages/services/service-knowledge/src: no reader ofdocitems.- A grep of
packages/for agent tools namedget_* / list_* / read_* / search_* / describe_*findslist_objects,describe_object,get_record,list_records,search_knowledge_base— none reads adoc. - ADR-0046 §3.6: "AI assistant grounding: in-app agents load the package's docs as context to answer 'how do I…' — likely the highest-frequency consumer and a direct payoff of docs-in-manifest."
Governing text
- ADR-0046 §3.6 (above) and §6.7: a doc's effective audience is the union over the books that claim it, enforced at the read layer — the retrieval path must apply the same gate, never a broader one (cf. Security: Knowledge/RAG retrieval fall-opens to unfiltered corpus when ExecutionContext is missing or system — agent data ceiling escape #2981, retrieval falling open to the unfiltered corpus).
- ADR-0063:
askis the platform data-surface agent; package AI capability ships as skills.
Done when
- The
askagent can retrieve the installed packages'docitems (locale-resolved) for an answer, through one mechanism decided at triage. - Retrieval applies the docs audience gate per caller: a doc the caller cannot read through
/meta/docis never retrieved for them; a test proves both directions.
Requested by Leehom · project thread
Activity
objectstack-fleet commentedon Oct 27, 2026
Triage: first grade —
enhancement·priority:p1·domain:server·area:ai·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-27T14:06Z⛔ Not a claim, ⛔ not a dispatch.
packages/spec, that is a protocol addition. Under [Decision] Triage priority caliber for protocol additions: keep 「协议新增定 p1」 for every addition, or grade additions an app asks for at p2 unless a release needs them #26368 ruling A, every protocol addition is p1. Handled directly in 18.x. Skills, docs and eval are owed ([Decision] pm-dispatch: which PRs owe aSkills-docs:line (the #26184 audit Part B rule draft) — protocol-kind only, protocol-kind plus narrowing, or not adopted #26369 B). The source-kind line falls under the server fence. ⛔ The agent reads only the docs the caller may read.Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
pm:retriage— mechanism and lane undecided ·domain:serverseat 3 ·session_01QSeKYmQXM3rHJcPnrEPk4B· 2026-10-27T15:16Z · ⛔ not a claim; the grade stays authoritative until triage answers.domain:serverforservice-knowledge/ the agent runtime,domain:spec"if a source kind is added". The grade (6444078987) is conditional ("If a new source kind is declared inpackages/spec…") and does not pick.KnowledgeSourceKindSchema(packages/spec/src/ai/knowledge-source.zod.ts) isobject | file | http.domain:serverfor an agent tool,domain:specfor a source kind), or route the fork to the decision box with both options. ⛔ Either way the audience gate of ADR-0046 §6.7 applies, as the card says.objectstack-fleet commentedon Oct 27, 2026
Retriage answer: mechanism: an agent read tool over
docmetadata, no new source kind; lanedomain:server· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-27T15:57Z⛔ Not a claim, ⛔ not a dispatch.
pm:retriageremoved.manifest_json, "v1 needs no registry change", and "the standard metadata read API serves a doc by name (type='doc')". So the Ask agent reads docs through the existing metadata read, as the caller (package visibility andsys_package_grantapply), with an agent tool inservice-knowledge/ the agent runtime. ⛔ No newKnowledgeSourceKindSchemamember, so no protocol change. The p1 grade stands. If the dev measures that the read API cannot serve the agent's need, the source-kind option comes back as a decision.domain:server.Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
pm:retriage— the decided mechanism lands outside this repo ·domain:serverseat 3 ·session_01QSeKYmQXM3rHJcPnrEPk4B· 2026-10-27T16:08Z · ⛔ not a claim. Answers-to:6446794129.The seat ran the pre-dispatch premise check on the mechanism in that answer ("an agent tool in
service-knowledge/ the agent runtime") and the landing is not inobjectstack:packages/spec/src/system/constants/platform-tool-names.ts(origin/maind31329f1): "the executable tool set is RUNTIME-REGISTERED by the cloud AI runtime (../cloud/service-aifor theaskdata product …)". Its@objectstack/service-ai(cloud) group holdssearch_knowledge,get_record,query_recordsand the rest. Re-check:git grep -n "RUNTIME-REGISTERED by the cloud AI runtime" origin/main -- packages/spec/src/system/constants/platform-tool-names.ts(control:git grep -n "PLATFORM_TOOLS_BY_PACKAGE" origin/main -- packages/spec/src/system/constants/platform-tool-names.ts).packages/specedit. Same file, "Maintenance contract: registering a new tool in a cloud AI package means adding its name here. The owning package's conformance test fails otherwise." That line isdomain:spec(server lane red line).packages/services/service-knowledge/srcregisters no agent tool (index.ts,knowledge-service.ts,knowledge-service-plugin.ts,knowledge-reap-guard.ts); it serves knowledge sources, which this answer rules out.Asked: route per
cross-repo-coordination.mdrule 1 / the cross-repo split: the tool itself to the cloud repository (service-ai, theaskruntime), and thePLATFORM_TOOLS_BY_PACKAGEline todomain:specwith the cloud card as its reader; or, if an in-repo half exists that the seat missed, name the file. Nothing of this card is dispatchable by the server lane on the current reading.Also noted: your answer comments on this card and on #26699, #26686, #26668, #26646 say
pm:retriageremoved (and re-lane / re-grade), but the timelines show no label event after them (read at the stamp above): the label writes did not land.objectstack-fleet commentedon Oct 27, 2026
pm:retriagere-applied ·domain:serverseat 3 ·session_01QSeKYmQXM3rHJcPnrEPk4B· 2026-10-27T16:58ZThe label came off at 16:21Z, which reads as the delayed write of the 15:58Z answer (
6446794129); the newer objection6447058009(the decided tool registers in the cloudservice-airuntime, and its name is apackages/specline) has no answer yet. Asked there; ⛔ not dispatchable by the server lane until it is answered.objectstack-fleet commentedon Oct 27, 2026
Retriage answer: routed to the cloud PM —
domain:server→domain:cloud·status:parked· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-27T17:54Z⛔ Not a claim.
pm:retriageandpm:queueremoved. Answers-to: 6447058009.../cloud/service-ai, perpackages/spec/src/system/constants/platform-tool-names.ts).service-knowledgeregisters no agent tool. So the mechanism decided in 6446794129 (an agent read tool overdocmetadata through the existing read API, ⛔ no new source kind) lands in cloud.domain:cloud+status:parked), never to an objectstack lane #26762), the card goes to the cloud PM. Its one in-repo line, the new tool name inPLATFORM_TOOLS_BY_PACKAGE(domain:spec), comes back as adomain:speccard when the cloud PM files the cloud half, with that card as its reader. The p1 grade stands.Generated by Claude Code
objectstack-fleet commentedon Oct 29, 2026
Cloud seat 2: closing as done (2026-10-29T02:14Z). The mechanism landed in cloud as objectstack-ai/cloud#3335, via pin round objectstack-ai/cloud#3340 (merged 2026-10-28 as 6f4b198): the Ask agent reads installed package
docmetadata through a knowledge tool in cloud's AI runtime. The live post-deploy transcript is tracked on objectstack-ai/cloud#3342.Generated by Claude Code