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
Re-categorize module classes by function instead of the current core vs integration split, then reshape the record object around that categorization and fold locator into the module descriptor.
This is a design proposal / discussion — feedback welcome before implementation.
Motivation
Modules naturally fall into two functional groups:
Type-defining modules — they determine what the record is / how it is consumed: a2a (A2A card), mcp (MCP server), agentskills (Agent Skill), and likely acp, agentspec.
Informational modules — they carry additional information about the record: evaluation, observability.
The current core vs integration taxonomy does not mirror this: e.g. agentskills lives under core/language_model but is type-defining, while evaluation/observability are core but informational. Categorizing by function makes the taxonomy meaningful and lets the record express the distinction structurally.
Proposed changes
1. Module taxonomy
Replace the core / integration categories with two function-based categories (names TBD — see open questions), roughly:
type category: a2a, mcp, agentskills, acp, agentspec, plus a generic type module — a concrete, protocol-agnostic default so every record can satisfy the required type attribute even when it isn't one of the specific protocols.
info category: evaluation, observability
language_model and prompt are likely no longer needed and are candidates for deprecation rather than re-categorization — to be confirmed during design.
2. record object
Add a required attribute scoped to the type category — every record must declare at least one type-defining module. (This is the enforced-scoping use case from the validator/UI work; once Enforce class_type taxonomy scope in the runtime validator and the schema UI link #476 lands, scoping a class_t attribute to a category is enforced end to end.)
Keep an optional attribute scoped to the info category for the informational modules.
This replaces the previously-floated integration_types idea (which was based on the integration category) with a functional categorization.
3. Fold locator into the existing descriptor object, drop top-level locators
objects/descriptor.json is already an OCI-like artifact descriptor (urls, media_type, artifact_type, size, digest, …) and is already embedded in every module — the base module's artifact attribute is "type": "descriptor". It overlaps heavily with objects/locator.json (type, urls, annotations). Proposal:
Fold locator's distinguishing fields (notably its type enum: helm_chart, container_image, package, source_code, binary, url) into the existingobjects/descriptor.json.
Artifact locations therefore live on the module that owns them (through its artifact/descriptor), rather than as a flat top-level list.
Remove the top-level record.locators attribute, and remove/deprecate objects/locator.json.
Proto (record.proto, module/descriptor messages) and the runtime validator/sample fixtures will need matching updates.
Open questions
Naming of the new required attribute.type is the first instinct, but it now both (a) declares the record's type-defining modules and (b) subsumes the former locator role (where the artifact lives), so it should convey "what this record is / how to obtain it" better than locator did. Candidates to consider: interfaces, manifests, connectors, entrypoints, endpoints, surfaces, kinds, or types. And the optional counterpart for informational modules: keep modules, or extensions / metadata / aspects / info.
Exact category names, the contents of the generic type module, and confirming deprecation of language_model/prompt.
How much of locator (the type enum) belongs on the merged descriptor vs is inferable from media/artifact type.
Migration/back-compat for existing records that use top-level locators and the core/integration module names.
Summary
Re-categorize module classes by function instead of the current
corevsintegrationsplit, then reshape therecordobject around that categorization and foldlocatorinto the moduledescriptor.This is a design proposal / discussion — feedback welcome before implementation.
Motivation
Modules naturally fall into two functional groups:
a2a(A2A card),mcp(MCP server),agentskills(Agent Skill), and likelyacp,agentspec.evaluation,observability.The current
corevsintegrationtaxonomy does not mirror this: e.g.agentskillslives undercore/language_modelbut is type-defining, whileevaluation/observabilityarecorebut informational. Categorizing by function makes the taxonomy meaningful and lets therecordexpress the distinction structurally.Proposed changes
1. Module taxonomy
Replace the
core/integrationcategories with two function-based categories (names TBD — see open questions), roughly:a2a,mcp,agentskills,acp,agentspec, plus a generictypemodule — a concrete, protocol-agnostic default so every record can satisfy the required type attribute even when it isn't one of the specific protocols.evaluation,observabilitylanguage_modelandpromptare likely no longer needed and are candidates for deprecation rather than re-categorization — to be confirmed during design.2.
recordobjectThis replaces the previously-floated
integration_typesidea (which was based on theintegrationcategory) with a functional categorization.3. Fold
locatorinto the existingdescriptorobject, drop top-levellocatorsobjects/descriptor.jsonis already an OCI-like artifact descriptor (urls,media_type,artifact_type,size,digest, …) and is already embedded in every module — the base module'sartifactattribute is"type": "descriptor". It overlaps heavily withobjects/locator.json(type,urls,annotations). Proposal:locator's distinguishing fields (notably itstypeenum: helm_chart, container_image, package, source_code, binary, url) into the existingobjects/descriptor.json.artifact/descriptor), rather than as a flat top-level list.record.locatorsattribute, and remove/deprecateobjects/locator.json.Out of scope / sequencing
record.proto, module/descriptor messages) and the runtime validator/sample fixtures will need matching updates.Open questions
typeis the first instinct, but it now both (a) declares the record's type-defining modules and (b) subsumes the formerlocatorrole (where the artifact lives), so it should convey "what this record is / how to obtain it" better thanlocatordid. Candidates to consider:interfaces,manifests,connectors,entrypoints,endpoints,surfaces,kinds, ortypes. And the optional counterpart for informational modules: keepmodules, orextensions/metadata/aspects/info.typemodule, and confirming deprecation oflanguage_model/prompt.locator(thetypeenum) belongs on the mergeddescriptorvs is inferable from media/artifact type.locatorsand thecore/integrationmodule names.