Skip to content

catalog-entry schema: adopt returns_result_set (pack-spec 4.20.0) #40

Description

@piersdd

What to build

Adopt the pack-spec 4.20.0 returns_result_set key in the catalog-entry schema, so plugin authors can declare it.

returns_result_set — boolean, default true, on the per-tool granularity block. Declares whether the tool returns a result set at all.

Why

scope_filtering: none means two different things, and this repo's own schema description says both:

"none: tool has no concept of scope (data is naturally unscoped, or the plugin punts entirely)."

Only the second is the failure mode DD-333 refuses. The first — no result set to scope — is a different claim the verdict table cannot express, so it refuses tools the contract was never written about.

Ratified in stallari-harness ADR-0042 § Amendment 2026-08-21 (0f1aced2). Normative definition and the version bump land upstream in Groupthink-dev/stallari-pack-spec#20.

Blocked by

  • Groupthink-dev/stallari-pack-spec#20 — pack-spec 4.20.0 defines the key. Adopting it here first would ship a schema ahead of its own specification.

Scope

Write set:

  • schemas/catalog-entry.schema.json — add returns_result_set to the granularity block. The block is additionalProperties: false, so this edit is what makes the key declarable at all.
  • scripts/catalog-entry.schema.test.js — cases for present-true, present-false, and absent.
  • scripts/build-catalog.js — only if it needs to carry the key through; check before assuming it does.

Acceptance criteria

  1. schemas/catalog-entry.schema.json accepts returns_result_set as a boolean on the granularity block, and it is not added to that block's required array.
  2. A catalog entry that omits the key still validates, and every existing plugin JSON in plugins/tools/ validates unchanged — 59 files, 20 of which carry a granularity block.
  3. A catalog entry declaring returns_result_set: false validates.
  4. A non-boolean value is rejected.
  5. scripts/catalog-entry.schema.test.js covers 1–4, and the existing suite stays green.
  6. The non_conformance_rationale derivation in build-catalog.js is untouched. The new key is not a non-conformance signal — see DD-338 Phase B.1.b — HA/tailscale/syncthing catalog flips #20 for why conflating the two would mislabel a shape fact as a diligence failure.

Evidence

Measured at da20179: 59 JSON files under plugins/tools/, 20 carrying a granularity block, 19 declaring at least one scope_filtering: "none", 243 such declarations in total, 78 of them in cloudflare-blade-mcp.json. All of them keep their current verdict — the default is true.

Refs Groupthink-dev/stallari-harness#1026, Groupthink-dev/stallari-harness#1027, Groupthink-dev/stallari-pack-spec#20.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    boundary:noneOperator-audited: no trust/privilege boundary; exempt from the flow.py boundary floorenhancementNew feature or requestready-for-agenttriaged agent-dispatchable

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions