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
Implement ADR-0063/0064: split ask/build agents by surface; tool scoping #2168
../cloud/service-ai-studio: make build the canonical id (currently still metadata_assistant); register metadata_assistant as the permanent alias.
Prose sweep: "Data/Metadata Assistant" → ask/build; aliases live only in the alias table.
Skill ↔ agent affinity (ADR-0063 §3)
Add surface: 'ask' | 'build' | 'both' to SkillSchema (spec/src/ai/skill.zod.ts); backfill the four built-in skills.
Tool scoping (ADR-0064)
Remove the global fall-through in tool resolution; resolve wildcards against skill-claimed names only (kill the actions_executor empty-array + fall-through hack).
Add a surface:'both'schema_reader skill owning describe_object/list_objects/query_data; stop dual-listing by comment.
Make incompatible skill↔agent binding a fast load error in resolveActiveSkills.
Tests: tools(ask) contains no create_*/*_metadata/blueprint tools (cloud + OSS); authoring tools present only under build.
Withdraw tenant custom agents (ADR-0063 §2)
spec/src/kernel/metadata-plugin.zod.ts: set agent type allowRuntimeCreate:false, allowOrgOverride:false.
Filter custom agents from the runtime catalog; drop the app.defaultAgent custom-agent guidance in the cloud plugin.
Deferred
D4 deployment guardrail-floor schema — defer (no tenant agent to floor once the above lands).
frameworkfeat(ai): split ask/build agents by surface + tool scoping (ADR-0063/0064) #2181 (merged, main e411a8219) — surface on SkillSchema/AgentSchema; ask persona split (dropped the unified INTENT-FIRST classifier + buildRegisterActive shim); schema_reader (surface:'both') for the shared reads; affinity enforced as a load error in resolveActiveSkills; agent type allowRuntimeCreate:false, allowOrgOverride:false + catalog filtered to platform agents; data-chat-agent.ts→ask-agent.ts.
cloud objectstack-ai/cloud#417 (merged, main 3d72d8790) — build agent surface:'build' + attaches schema_reader; metadata_authoring/solution_design → surface:'build'; stopped dual-listing the shared reads; dropped the custom-agent guidance.
objectui — no change needed: surface binding (alias groups, isBuildAgent/isAskAgent, aiStudio gate, hidden picker) already in place.
Checklist: persona split ✅, naming ✅, surface field + backfill ✅, tool scoping (no global fall-through; tools(ask) carries no authoring tools — asserted) ✅, withdraw tenant agents ✅. D4 left deferred per the issue.
Note: several items were already done in main ahead of the ADR text (the ask rename; the resolver was already skill-scoped; build was already canonical+aliased). The cloud .framework-sha bump also required binding 18 control-plane script actions to satisfy framework's unrelated new action-script guard.
Keeping this as the single live tracker for ADR-0063/0064; closed #2165 (the near-duplicate follow-up) as superseded.
The code split is done (this issue's checklist + #2181 + cloud#417). The one tail this was reopened for — the prose sweep / surface documentation — was the third-party skill-authoring contract skills/objectstack-ai/SKILL.md, which still described the old ADR-0040 unified data_chat assistant. That's fixed in #2194:
SKILL.md rewritten to the two surface-bound agents (ask/build); data_chat/metadata_assistant reduced to alias-table mentions only.
surface: 'ask'|'build'|'both' field + built-in skill affinities documented; tools = union of surface-compatible skills' tools (no global fall-through).
surface:'build' skills documented as inert on OSS — intentional tiering, with graceful build-intent degradation.
docs/adr/PRIORITIZATION.md stale 0040 row reconciled.
After #2194 merges, the only outstanding item is D4 (deployment guardrail-floor), which remains deferred (no tenant agent to floor once withdrawal landed). Suggest closing this once #2194 is in and the D4 deferral is acknowledged.
Docs tail (what this was reopened for): the third-party skill-authoring contract skills/objectstack-ai/SKILL.md still described the old ADR-0040 unified data_chat assistant — fixed in docs(skills): sweep objectstack-ai SKILL.md to the ask/build two-agent model (ADR-0063/0064) #2194 (merged 9796cee4): rewritten to the ask/build two-surface model, surface field documented, surface:'build' documented as inert-on-OSS (intentional tiering), PRIORITIZATION.md 0040 row reconciled.
Duplicate follow-up #2165 closed as superseded by this issue.
D4 (deployment guardrail-floor schema) remains deferred — no tenant agent to floor once withdrawal landed; tracked in the audit (docs/audits/2026-06-ask-build-agent-development-assessment.md), not blocking.
Closing — ADR-0063/0064 fully landed bar the deferred D4.
⚠️ Closing not_planned — the premise of this card is falsified. PM session_01FGca3Gt5irhBoVcVwFfoVY, 2026-09-10T09:0xZ. Correction is on me, not on anyone who read it.
This card said EnvSettingsRoutesPlugin is an orphan workaround that exists only because cloud#1963 req 6 forbade framework changes, and that the next host door should go through the framework's registerDomainHandler instead of copying it.
The second half is wrong, measured on origin/main. objectstack dd2184a (#16741, merged 2026-09-08) built exactly that next host door — mountStorageRoutes, for kernels with no http-server — and its docblock names the settings bridge as the working precedent it followed, verbatim:
The settings service already has a working answer to the same shape: the host mounts registerSettingsRoutes on its raw app and dispatches into the environment kernel's route table.
It did not use registerDomainHandler, did not add a /storage dispatcher domain, and did not touch route-ledger.ts. So the shape this card called an orphan is the shape the framework adopted; the only thing #16741 changed is that the composition of the gates now lives inside the owning package rather than on the host's side, which is a refinement of the same pattern, not a replacement for it.
⇒ There is nothing to migrate and nothing to warn the next card away from. Leaving this card open would actively mis-route the next host door.
Why I got it wrong: the checkout I read is pinned at 8b37a09 (2026-09-08T03:59Z), 288 commits behind origin/main; #16741 merged about two hours after that pin. Every framework reading in this card, and in the comment I posted on #1969 the same day, is accurate for that tree and stale for today's. See objectstack#17354 for the same correction on the framework side.
⛔ Do not reopen this as a "migrate the settings door" card without a fresh reading — as of origin/main today there is no divergence to close.
Activity
chore(console-ai): prose sweep to ask/build agent naming (ADR-0063)
feat(ai): split ask/build agents by surface + tool scoping (ADR-0063/…
xuyushun441-sys commentedon Jun 22, 2026
Implemented and merged across framework + cloud:
e411a8219) —surfaceon SkillSchema/AgentSchema;askpersona split (dropped the unified INTENT-FIRST classifier +buildRegisterActiveshim);schema_reader(surface:'both') for the shared reads; affinity enforced as a load error inresolveActiveSkills;agenttypeallowRuntimeCreate:false, allowOrgOverride:false+ catalog filtered to platform agents;data-chat-agent.ts→ask-agent.ts.3d72d8790) —buildagentsurface:'build'+ attachesschema_reader;metadata_authoring/solution_design→surface:'build'; stopped dual-listing the shared reads; dropped the custom-agent guidance.Checklist: persona split ✅, naming ✅, surface field + backfill ✅, tool scoping (no global fall-through; tools(ask) carries no authoring tools — asserted) ✅, withdraw tenant agents ✅. D4 left deferred per the issue.
Note: several items were already done in main ahead of the ADR text (the ask rename; the resolver was already skill-scoped; build was already canonical+aliased). The cloud .framework-sha bump also required binding 18 control-plane script actions to satisfy framework's unrelated new action-script guard.
xuyushun441-sys commentedon Jun 22, 2026
Keeping this as the single live tracker for ADR-0063/0064; closed #2165 (the near-duplicate follow-up) as superseded.
The code split is done (this issue's checklist + #2181 + cloud#417). The one tail this was reopened for — the prose sweep /
surfacedocumentation — was the third-party skill-authoring contractskills/objectstack-ai/SKILL.md, which still described the old ADR-0040 unifieddata_chatassistant. That's fixed in #2194:ask/build);data_chat/metadata_assistantreduced to alias-table mentions only.surface: 'ask'|'build'|'both'field + built-in skill affinities documented; tools = union of surface-compatible skills' tools (no global fall-through).surface:'build'skills documented as inert on OSS — intentional tiering, with graceful build-intent degradation.docs/adr/PRIORITIZATION.mdstale 0040 row reconciled.After #2194 merges, the only outstanding item is D4 (deployment guardrail-floor), which remains deferred (no tenant agent to floor once withdrawal landed). Suggest closing this once #2194 is in and the D4 deferral is acknowledged.
docs(skills): sweep objectstack-ai SKILL.md to the ask/build two-agen…
xuyushun441-sys commentedon Jun 22, 2026
All 13 checklist items are done; ticked above. Summary:
surfacefield + skill backfill,schema_reader(both), no global fall-through, affinity load error,agenttype closed (allowRuntimeCreate:false), catalog filtered,ask-agent.tsrename. Alias ESM/CJS sharing follow-up in fix(service-ai): share agent-alias registry across ESM/CJS builds + decouple agent catalog from it #2190.buildcanonical +metadata_assistantpermanent alias, build skillssurface:'build', droppedapp.defaultAgentguidance. (Cross-repo; please confirm from the cloud repo — not visible here.)skills/objectstack-ai/SKILL.mdstill described the old ADR-0040 unifieddata_chatassistant — fixed in docs(skills): sweep objectstack-ai SKILL.md to the ask/build two-agent model (ADR-0063/0064) #2194 (merged9796cee4): rewritten to theask/buildtwo-surface model,surfacefield documented,surface:'build'documented as inert-on-OSS (intentional tiering),PRIORITIZATION.md0040 row reconciled.Duplicate follow-up #2165 closed as superseded by this issue.
D4 (deployment guardrail-floor schema) remains deferred — no tenant agent to floor once withdrawal landed; tracked in the audit (
docs/audits/2026-06-ask-build-agent-development-assessment.md), not blocking.Closing — ADR-0063/0064 fully landed bar the deferred D4.
docs: align AI guides + ADR-0040 with the ask/build two-agent model (…
hotlong commentedon Sep 10, 2026
not_planned— the premise of this card is falsified. PMsession_01FGca3Gt5irhBoVcVwFfoVY, 2026-09-10T09:0xZ. Correction is on me, not on anyone who read it.This card said
EnvSettingsRoutesPluginis an orphan workaround that exists only because cloud#1963 req 6 forbade framework changes, and that the next host door should go through the framework'sregisterDomainHandlerinstead of copying it.The second half is wrong, measured on
origin/main. objectstackdd2184a(#16741, merged 2026-09-08) built exactly that next host door —mountStorageRoutes, for kernels with nohttp-server— and its docblock names the settings bridge as the working precedent it followed, verbatim:It did not use
registerDomainHandler, did not add a/storagedispatcher domain, and did not touchroute-ledger.ts. So the shape this card called an orphan is the shape the framework adopted; the only thing #16741 changed is that the composition of the gates now lives inside the owning package rather than on the host's side, which is a refinement of the same pattern, not a replacement for it.⇒ There is nothing to migrate and nothing to warn the next card away from. Leaving this card open would actively mis-route the next host door.
Why I got it wrong: the checkout I read is pinned at
8b37a09(2026-09-08T03:59Z), 288 commits behindorigin/main; #16741 merged about two hours after that pin. Every framework reading in this card, and in the comment I posted on #1969 the same day, is accurate for that tree and stale for today's. See objectstack#17354 for the same correction on the framework side.⛔ Do not reopen this as a "migrate the settings door" card without a fresh reading — as of
origin/maintoday there is no divergence to close.Generated by Claude Code