Unify command vocabulary across CLI, MCP and agent surfaces#2
Merged
Conversation
Introduce a shared controlled vocabulary (verbs, entity types, loci, serialization families) that all command surfaces name operations from, while keeping each surface's dispatch independent (Option B). - Add ical4j-command-core module defining Verb, EntityType, Locus, SerializationFamily and SendMethod enums (vocabulary only, no dispatch) - CLI: standardise delete->remove, strategy new->generate, and reframe calendar/card CRUD as import/export; restructure command packages - MCP: rename service methods to canonical verbs (list*, add/remove, import*, get*) and drop the dead CLI reach-through in WorkspaceService - Agent: align @tool names to the generate verb; wire core dependency - Docs: document the canonical vocabulary in command-protocols.md and README.md as the source of truth - OpenSpec: add command-vocabulary spec and archive the change Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The AddCollection, RemoveCollection and ListCommand tests targeted a dependency-injected design, but the commands used the CommandConfig singleton and were not unit-testable (they threw on construction/run). - AddCollection/RemoveCollection now extend AbstractWorkspaceCommand, adding a (Consumer, ObjectStore) constructor and withCollectionName builder with an injected-store fast path; the CLI path via CommandConfig is preserved for non-injected use - ListCommand accepts an injectable CommandConfig; ListCommandTest is rewritten to verify real collection-name listing instead of a stub string Full build (core, cli, mcp) is green: 13/13 CLI tests pass. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The connector/serializer/extensions SNAPSHOTs only existed in the local maven cache and are not published to any CI-reachable repository, so CI could not resolve them. Pin to released versions available on Maven Central; the project compiles and all tests pass against them. - ical4j-connector 2.0.0-beta2-SNAPSHOT -> 2.0.0-beta1 - ical4j-serializer 0.4.0-develop-SNAPSHOT -> 0.4.1 - ical4j-extensions 2.0.1-develop-SNAPSHOT -> 2.0.0 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Introduces a shared controlled vocabulary — canonical verbs, entity types, loci, and serialization families — that all command surfaces (CLI, MCP, agent) name operations from. Surfaces share the names but keep their own dispatch (Option B: shared vocabulary, separate dispatch).
What changed
ical4j-command-coremodule —Verb,EntityType,Locus,SerializationFamily,SendMethodenums (vocabulary only, no dispatch; JPMS module).delete→remove; strategy groupnew→generate(+create-calendar/card→calendar/card); calendar/card CRUD reframed asimport/export; depends on core.list*,add/remove,import*,get*); removed the deadListCommandreach-through inWorkspaceService(Option B).@Toolnames aligned to thegenerateverb;publish/request/replymap to specialisedsend; core dependency wired.docs/command-protocols.mdandREADME.mdnow document the vocabulary as source of truth.command-vocabularyspec; the change is archived underopenspec/changes/archive/.Verification
core,cli,mcpall compile; agent module compiles (left disabled insettings.gradleas before).openspec validatepasses.Notes / follow-ups (pre-existing, out of scope)
ListCommandTest,AddCollectionTest,RemoveCollectionTest) test unfinished stub commands and are not touched by this change.static final Stringconstants in core.🤖 Generated with Claude Code