Goal
Turn @bounded-systems/verbspec from a prx-internal workspace package into a shared layer across the @bounded-systems libraries (prx, keeperd, …): author a verb once as a typed VerbSpec, project it to every surface (CLI, MCP, OpenAPI, OpenRPC, JSON-RPC/NDJSON, Anthropic tool), no drift.
Done so far
Remaining
Open design questions
- Source of truth: Zod vs an IDL. Keep Zod as the authoring source and emit OpenRPC/OpenAPI (current direction — schema is the runtime validator), or move to a declarative IDL (TypeSpec / OpenRPC) and generate Zod/TS? Recommendation: stay Zod-sourced; reach for TypeSpec only if authoring across many services starts to dominate.
- OpenRPC params style. Currently by-name Content Descriptors from the input's top-level properties; revisit if any verb needs by-position params.
Tracking the shared-layer effort discussed in session.
https://claude.ai/code/session_01XvpnMDCnzCvn4MjDL15vi1
Goal
Turn
@bounded-systems/verbspecfrom a prx-internal workspace package into a shared layer across the@bounded-systemslibraries (prx, keeperd, …): author a verb once as a typedVerbSpec, project it to every surface (CLI, MCP, OpenAPI, OpenRPC, JSON-RPC/NDJSON, Anthropic tool), no drift.Done so far
@bounded-systems/verbspec(PR Extract verbspec into @bounded-systems/verbspec package #594).Remaining
z.toJSONSchema,input.parse/safeParse). Adopting the~standardinterface lets consumers bring Valibot/ArkType. Note:z.toJSONSchemais Zod-specific, so a validator-agnostic JSON-Schema path is needed (per-lib converter, or require schemas that can emit JSON Schema).@bounded-systems/verbspec. PolyForm-Noncommercial ⇒ a private registry (GitHub Packages or similar), not public npm.pathsmapping).sign/verify/status/commit/push/getPublicKeyas aVerbSpecregistry, serve the NDJSON protocol viadispatchNdjson, and derivelib/keeper.tsclient types from the verboutputschemas.Open design questions
Tracking the shared-layer effort discussed in session.
https://claude.ai/code/session_01XvpnMDCnzCvn4MjDL15vi1