Skip to content

schemas: MeshActionRegistry adds implementsAbb — participants declare their ABB slots - #224

Merged
mdheller merged 1 commit into
mainfrom
feat/mar-implementsAbb
Jul 30, 2026
Merged

schemas: MeshActionRegistry adds implementsAbb — participants declare their ABB slots#224
mdheller merged 1 commit into
mainfrom
feat/mar-implementsAbb

Conversation

@mdheller

Copy link
Copy Markdown
Contributor

Second move in the Michael-agent capability-integration work. #223 gave us role-named components; this lets a participant claim the roles it fills.

participants[*].implementsAbb: ['ABB.03', 'ABB.07']

A consumer walking the registry for an ABB (Michael's route_by_abb, solution-ranker's candidate shortlist) filters on this. Absent/empty means the participant is not claimed as a slot filler — the consumer won't consider it.

The field only establishes the CLAIM, not its truth. Verification is the consumer's job: walk the ABB's protocol + requiredCapabilities, confirm the participant delivers each. That split is deliberate — a validator here can reject unknown ABB.NN patterns but cannot know whether a participant actually satisfies the protocol without running the caller.

Verification

  • 7 new validator cases (bare number, three-digit, wrong namespace, duplicates, unknown pattern, empty absent, well-shaped present)
  • Existing 15 shape cases still pass
  • make validate green

… their ABB slots

Second move in the Michael-agent capability-integration work. #223 (ArchitecturalBuildingBlock)
gave us role-named components; this lets a participant CLAIM the roles it fills.

    participants[*].implementsAbb: ["ABB.03", "ABB.07"]

A consumer walking the registry for an ABB (Michael's `route_by_abb`, or solution-ranker's
candidate shortlist) filters on this. Absent/empty means the participant is not claimed as a
slot filler — the consumer won't consider it.

This field only establishes the CLAIM, not its truth. Verification is the consumer's job:
walk the ABB's protocol + requiredCapabilities, confirm the participant delivers each. That
split is deliberate — a validator here can reject unknown `ABB.NN` patterns but cannot know
whether a participant actually satisfies the protocol without running the caller. Making
that split explicit stops any misplaced trust in "the registry validated this so it must work."

Enforced by 7 new validator cases (unknown pattern, bare number, three-digit, wrong
namespace, duplicates, empty ⇒ absent-shaped, present ⇒ well-shaped). Existing 15 shape
cases still pass. `make validate` green.

The example receipt now shows two participants claiming ABB.01/02 — so a consumer can
already dry-run the walk and get a non-trivial shortlist.
Copilot AI review requested due to automatic review settings July 30, 2026 07:06
@mdheller
mdheller merged commit 61e4ed5 into main Jul 30, 2026
9 checks passed

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR extends the MeshActionRegistry participant schema to let participants declare which Architectural Building Blocks (ABBs) they claim to implement via participants[*].implementsAbb, enabling ABB-based candidate discovery by consumers.

Changes:

  • Added implementsAbb (array of ABB.NN identifiers) to schemas/MeshActionRegistry.json participant objects.
  • Updated examples/mesh-action-registry.example.json to include ABB claims for sample participants.
  • Extended tools/validate_mesh_action_registry.py with new positive/negative validation cases for implementsAbb.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

File Description
tools/validate_mesh_action_registry.py Adds validator cases for the new implementsAbb participant field.
schemas/MeshActionRegistry.json Introduces the implementsAbb field with pattern + uniqueness constraints.
examples/mesh-action-registry.example.json Demonstrates implementsAbb usage in the canonical example registry.

Comment on lines +106 to +112
# implementsAbb — new field. Absent is fine (participant claims no ABB slots); present must be
# non-empty when set, and each entry must match the ABB.NN pattern.
print(" implementsAbb")
case("implementsAbb absent (participant claims no ABB slots)",
broken(lambda b: b["participants"][0].pop("implementsAbb", None)), True)
case("implementsAbb with a valid ABB claim",
broken(lambda b: b["participants"][0].__setitem__("implementsAbb", ["ABB.03"])), True)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants