Skip to content

feat: v3 (Current) — unified WorkItem model, 13 MCP tools, role-based workflow engine#32

Closed
jpicklyk wants to merge 126 commits intomainfrom
overhaul
Closed

feat: v3 (Current) — unified WorkItem model, 13 MCP tools, role-based workflow engine#32
jpicklyk wants to merge 126 commits intomainfrom
overhaul

Conversation

@jpicklyk
Copy link
Owner

Summary

This PR merges the overhaul branch into main, releasing MCP Task Orchestrator v2.0.0 — a complete architectural rewrite of the server.

  • Unified WorkItem model replaces the Project → Feature → Task three-tier hierarchy with a single flexible entity (depth 0–3) and a role-based lifecycle engine
  • 13 MCP tools (down from 16 in beta, 56 in v1): manage_items, query_items, manage_notes, query_notes, manage_dependencies, query_dependencies, advance_item, get_next_status, get_context, get_next_item, get_blocked_items, create_work_tree, complete_tree
  • Note schema gate system: YAML-configured schemas gate role transitions — required notes must be filled before advancing to the next workflow phase
  • HTTP transport: Ktor Streamable HTTP (MCP spec 2025-03-26) alongside existing stdio transport
  • SQLite WAL mode for concurrent multi-process read access without file locking contention
  • Claude Code plugin v1.0.14 with 6 skills (work-summary, create-item, status-progression, schema-builder, check_schema_version, deploy_to_docker) and Workflow Analyst output style
  • Complete documentation audit: all 13 tools audited against implementation; 42 discrepancies identified and resolved across api-reference.md, workflow-guide.md, and CLAUDE.md

Breaking changes

  • Schema incompatible with 2.0.0-beta-01 — fresh database required
  • All v2 container tools replaced by new tool surface (no migration path from beta)
  • v2/Clockwork architecture archived as :clockwork Gradle submodule

Bug fixes included

  • manage_dependencies(create): validation failures now return consistent batch response shape matching manage_items/manage_notes
  • SQLite: dangling JDBC Statement on setupConnection caused SQLITE_BUSY on every parallel MCP call — fixed by wrapping PRAGMAs in Statement.use {}

Test plan

  • 1,637 tests passing (0 failures, 0 errors, 0 skipped)
  • Docker build and deployment verified
  • All 13 MCP tools audited against implementation
  • Manual smoke test: work-summary, create-item skill, role transitions, dependency management
  • Real-world multi-session usage feedback (post-merge)

🤖 Generated with Claude Code

jpicklyk and others added 30 commits November 5, 2025 14:15
Removed session-start hook from plugin architecture as it duplicates
functionality provided by orchestrator-prompt.txt system prompt.

Changes:
- Removed hook files: session-start.js, session-start.sh, hooks.json
- Updated plugin.json to remove hooks reference
- Updated documentation to remove hook sections
- Fixed project-setup-workflow.md with v2.0 tool syntax and template discovery
- Updated initialize-task-orchestrator.md to guide plugin installation
- Updated migration docs to document v2.1 hook removal

Benefits:
- Eliminates redundancy: single source of truth for orchestration guidance
- Token savings: ~600 tokens when using orchestrator mode
- Cleaner architecture: one comprehensive system prompt vs fragmented hooks
- Easier maintenance: update one file instead of syncing multiple sources

Orchestrator mode (via system prompt) is now the recommended approach,
providing both orchestration logic and communication style in one file.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
… tools)

Remove features that Claude Code now provides natively, preserving the
MCP's unique value: persistent hierarchical storage, templates, rich
dependencies, token-optimized queries, and configurable status workflows.

Deleted resources (~55 skill files, 10 agent files, plugin, workflows,
output styles, config files). Removed 7 Kotlin tools: ListTagsTool,
GetTagUsageTool, RenameTagTool, QueryWorkflowStateTool, SetupProjectTool,
GetAgentDefinitionTool, RecommendAgentTool. Removed supporting services:
AgentRecommendationService, AgentDirectoryManager,
TaskOrchestratorConfigManager, AgentResources, WorkflowPromptsGuidance.

Updated McpServer.kt registration, simplified MCP resources and AI
guidance to remove Skills/Agent references.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New MCP tool that provides a higher-level interface for status transitions
using named triggers (start, complete, cancel, block, hold) instead of
raw status values. Validates transitions against the workflow config,
checks prerequisites via StatusValidator, and detects cascade events
after applying changes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add role annotations (queue, work, review, blocked, terminal) to status
definitions in default-config.yaml for all container types. Roles provide
semantic context for AI decision-making about workflow state.

Update NextStatusRecommendation.Ready with optional currentRole/nextRole
fields. StatusProgressionServiceImpl parses roles from config with
fallback inference from terminal/emergency status lists. GetNextStatusTool
includes roles in JSON output.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove ~400 lines of Skills, Agents, Orchestration Mode, Decision Gates,
and Specialist Routing content that referenced deleted features. Add
concise MCP Tools section documenting all 12 tools with usage patterns
for request_transition, scoped overview, and template discovery.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Delete claude-plugins/ directory (48 stale skill/agent files)
- Delete 7 orphaned tool docs and 6 stale doc files
- Update api-reference.md, quick-start.md, ai-guidelines.md, index.md
  to reflect current 12-tool architecture
- Remove unimplemented config sections (parallelism, automation, etc.)
- Add DEPLOYED status to ProjectStatus enum with V8 migration
- Add GetBlockedTasksTool unit tests (33 tests)
- Remove unused gradle deps (slf4j-nop, exposed-migration)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ceiling

Templates now provide brief 4-7 line prompts telling the AI WHAT to
document rather than prescriptive multi-page workflows telling HOW to
plan. This preserves the template system's value (minimum required
sections) while allowing Claude's native planning to evolve freely.

Changes:
- Trim 6 template creators from ~930 lines of contentSample to ~110
- Rename 3 templates: Task Implementation Workflow → Task Implementation,
  Bug Investigation Workflow → Bug Investigation, Testing Strategy → Test Plan
- Delete 2 redundant sections: Technical Decision Log, Testing Checkpoints
- Change 2 sections to optional: Integration Considerations, Production Readiness
- Add V9 Flyway migration to update templates in existing databases
- Update TemplateInitializerImpl with new template names
- Update migration tests for new names, counts (26→24 sections), and titles

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…gration

Replace the old MCP-tool-based deployment approach with a proper Claude Code
plugin at claude-plugins/task-orchestrator/. The plugin provides 4 lean skills
(task-orchestration, feature-orchestration, status-progression,
dependency-analysis), a SessionStart hook for auto-overview, and marketplace
distribution via the existing .claude-plugin/marketplace.json.

Also fixes ~60 stale pre-v2.0 tool name references across MCP resources and
prompts (list_templates, get_overview, create_task, etc.), adds missing
get_next_status and request_transition documentation resources, and adds YAML
frontmatter to deploy_to_docker command.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds an optional output style that transforms the main Claude session into
a pure orchestrator — strips coding instructions and adds delegation patterns.
Covers both standard subagents and experimental agent teams, with clear
distinction between MCP task orchestrator (persistent) and Claude Code
delegation (session-scoped).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…put style

Adds one-way mirroring from MCP Task Orchestrator tasks to Claude Code's
terminal task display (Ctrl+T). The output style deterministically requires
mirroring when active; the skill provides detailed mapping patterns (14 MCP
statuses → 3 CC statuses, dependency mirroring, metadata correlation).
Only tasks related to the current focus are mirrored, not the entire database.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…tyle

Add deterministic reinforcement for three high-risk skill behaviors:
partial updates (never fetch-modify-save), cascade event handling
(check parent status after transitions), and feature completion
verification (all tasks done, sections reviewed before completing).
These ensure correct behavior even when skills don't probabilistically
activate.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When a feature is completed or archived, its child tasks are transient
work items that have served their purpose. This adds a configurable
CompletionCleanupService that synchronously deletes child tasks (with
their sections and dependencies) during status transitions. Bug-tagged
tasks are retained for diagnostic value. Cleanup is config-gated via
completion_cleanup.enabled and respects existing terminal_statuses
from the workflow config to support custom flows.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move default-config.yaml from resources/claude/configuration/ to
resources/configuration/ — the claude/ prefix was a holdover from
before the plugin migration. Delete empty hooks/ directory and
remove PLUGIN-STRUCTURE.md which referenced agents and files that
no longer exist. Update all 5 references (3 tests, 2 docs).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…nd correctness

- Add .dockerignore to reduce build context from ~412MB to ~8MB
- Add non-root user (appuser:1001) to Dockerfile for security hardening
- Add OCI metadata labels to Docker image
- Optimize Dockerfile layer caching with dedicated dependency download step
- Make LOG_LEVEL env var functional via logback.xml variable substitution
- Modernize docker-compose.yml: add AGENT_CONFIG_DIR, project mount, resource
  limits, remove dead env vars (JAVA_TOOL_OPTIONS, MCP_DEBUG)
- Replace misleading docker-clean-and-build.bat with cross-platform
  docker-build.sh and docker-build.bat scripts
- Add Buildx, GHA cache, multi-platform (amd64/arm64), and Trivy scanning
  to CI/CD pipeline
- Remove dead MCP_DEBUG env var references across all documentation
- Update deploy skill, CLAUDE.md, installation guide, and troubleshooting docs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Migrate Tool.Input/Tool.Output to ToolSchema (types package reorganization)
- Update all imports from sdk root to sdk.types subpackage
- Handle nullable request.arguments with fallback to empty JsonObject
- Rename _meta to meta in GetPromptResult (API change)
- Update Role.assistant to Role.Assistant (enum case change)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Install shadow-utils via dnf for groupadd/useradd support on Amazon Linux 2023
minimal images, and move git install before Gradle dependency download since
build.gradle.kts requires git at configuration time for version calculation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Addresses arbitrary code execution vulnerability via conditional
configuration file processing (CVSS 5.9, medium severity).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The source field requires an object with source type and path, not a
plain string.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix MCP SDK version (0.7.2 -> 0.8.3)
- Fix Exposed ORM version (v1 -> 1.0.0-beta-2)
- Fix tool count (12 -> 13)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Rewrite Quick Start with two clear paths: Claude Code (plugin
  install) and Other MCP Clients (Docker pull + configure)
- Add GHCR MCP server declaration to plugin.json so plugin install
  includes the MCP server for Claude Code users
- Remove phantom references (setup_project, initialize_task_orchestrator)
- Fix MCP SDK version (0.7.2 -> 0.8.3) in Technical Stack
- Fix broken docs/plugin-installation.md link
- Reframe sub-agents as optional/configurable, not pre-packaged
- Add .mcp.json to .gitignore (local dev MCP config)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
StatusProgressionServiceImpl now loads the bundled default-config.yaml
from the classpath when no .taskorchestrator/config.yaml exists on the
filesystem. This ensures get_next_status and request_transition work
out of the box for new users without manual config setup.

Malformed user configs still fail explicitly (no silent fallback).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Audited all tool docs against source implementations and fixed ~80 discrepancies
across 12 of 13 tools. Key fixes: corrected status enum tables for all container
types, replaced old tool name references, fixed response field names and formats,
added missing response fields, removed phantom fields, added DEPRECATED notices.

Also: restructured plugin for dev use (removed bundled mcpServers), consolidated
session-start hook into plugin, updated README Quick Start and CONTRIBUTING.md
with accurate developer setup instructions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix marketplace.json owner field to match schema (name only, no url)
- Remove broken extraKnownMarketplaces from settings.json (relative
  directory paths not resolved by Claude Code, filed #23978)
- Add explicit skills and hooks fields to plugin.json manifest
- Rename hooks.json to session-hooks.json to avoid conflict with
  auto-discovery convention while keeping explicit manifest declaration

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
GetNextTaskTool and GetBlockedTasksTool were incorrectly marked as
deprecated pointing to non-existent query_tasks queryType parameters.
Also fixes error code mapping in ManageContainerTool to return proper
VALIDATION_ERROR/NOT_FOUND/CONFLICT codes instead of generic DATABASE_ERROR,
and updates stale Related tool cross-references across tool descriptions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
PreToolUse:EnterPlanMode hook guides the agent through structured planning:
template discovery, container sizing, user confirmation, and plan writing
with templates as the structural floor. PostToolUse:ExitPlanMode hook
materializes approved plans into MCP containers with UUIDs written back
into plan.md, dependency setup, and verification.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Git on Windows auto-converted LF to CRLF in shell scripts. The \r
characters embedded in JSON output caused Claude Code to show "hook
error" despite the context injection still working. Fixed all scripts
to LF and added .gitattributes to enforce LF for *.sh files.

Also updated hook scripts with refined planning workflow guidance:
templates as structural floor, multiSelect template confirmation,
and hookEventName field restored per docs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Added matcher: "startup" to the SessionStart hook so it only fires on
new sessions. Previously it had no matcher, causing it to also fire on
context compaction which interrupted the agent's current work by
prompting a full project overview.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…k sync

Add getRoleForStatus() to StatusProgressionService and include previousRole/
newRole fields in request_transition responses. Create two new plugin hooks:
- PostToolUse status-sync hook detects role boundary crossings and reminds
  the agent to update mirrored CC task status
- TaskCompleted hook enforces MCP-first completion order using a block-once
  pattern with temp file markers

Update task mirroring convention to prefix CC task subjects with [short-hash]
for visual correlation and hook-based identification. Update skills and output
style with CC-MCP sync guidance.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ng content

- Output style: 887→343 words (61% reduction). Removed sections duplicated
  by hooks (Session Start, Error Handling, Handoff) and skills (partial
  updates, cascade events). Keeps identity, response format, delegation
  pattern, and decision heuristics.

- task-mirroring skill: 836→300 words (64% reduction). Hooks handle
  post-transition sync (status-sync.sh) and completion enforcement
  (task-complete-sync.sh) deterministically. Skill now only covers
  bootstrapping — initial mirror creation, status mapping, and
  dependency mirroring.

- Cross-skill deduplication: Each concept now has a single owner skill.
  Status flows/triggers/tags → status-progression. CC mirror sync →
  task-mirroring. Partial updates → task-orchestration. Other skills
  reference the owner with one-liner pointers instead of repeating content.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ation from all skills

New hooks:
- PostToolUse on manage_container: auto-prompts CC mirror creation for new tasks
- PostToolUseFailure on MCP tools: contextual error recovery guidance
- SubagentStop: prompts MCP task status sync when subagents reference MCP entities

SessionStart matcher expanded from "startup" to "startup|resume|compact" so MCP
state reloads on session resume and after context compaction.

New skills: template-management (manage_template, apply_template coverage),
project-orchestration (project-tier lifecycle coordination).

All 7 skills rewritten to remove verbose tool-call code blocks that duplicated
the 9.4k tokens of parameter documentation already provided by tool schemas.
Skills now contain only workflow patterns, decision heuristics, and key parameter
hints. Total skill word count: 1,828 words across 7 files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
jpicklyk and others added 28 commits February 17, 2026 12:44
- marketplace.json: fix source path (task-orchestrator → clockwork),
  add current-task-orchestrator as primary entry, rename v2 entry to clockwork
- clockwork/plugin.json: rename internal name from task-orchestrator to clockwork

Both plugins installable locally. When going public, drop the clockwork entry.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Documents the requirement to bump both marketplace.json and plugin.json
versions whenever plugin content changes, to prevent Claude Code from
serving stale cached scripts/skills/hooks.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- marketplace.json: shorten plugin name from current-task-orchestrator to current
- docs/hook-integration-guide.md: update skills link from task-orchestrator/ to clockwork/

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
The current plugin's plugin.json used ../ paths (relative to its
.claude-plugin/ subdirectory) for skills, hooks, and outputStyles.
The Claude Code validator resolves these paths from the plugin source
root, so ../ escaped the plugin directory and failed validation with
"Invalid input" errors on all three fields.

Changed all three paths from ../ to ./ so they resolve correctly
from the plugin root directory, matching the pattern used by the
clockwork plugin.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
The Claude Code plugin system now requires hooks config to be a
{ "hooks": { "<EventName>": [...] } } object rather than a flat
array. Also switched command paths to use ${CLAUDE_PLUGIN_ROOT}
for reliable resolution regardless of working directory.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…alyst, bump to 1.0.4

- Remove stop-check.mjs and its hook entry (stop hooks lack conversation
  context and proved unreliable for MCP state checks)
- Update hooks-config.json to object schema (already in progress)
- Add Model Selection section to current-analyst.md output style with
  3-tier haiku/sonnet/opus guidance keyed to task type
- Bump current plugin 1.0.2 → 1.0.4

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
When a child item transitions to work role, the parent now automatically
advances from queue to work via a new first_child_started cascade event.

- Add StartCascadeConfig (enabled: true by default) loaded from config
- Detect first_child_started in detectTaskCascades() (task→feature) and
  detectFeatureCascades() (feature→project) using role-based checks
- Wire StartCascadeConfig into CascadeServiceImpl constructor via McpServer
- Add start_cascade section to default-config.yaml
- Add 6 new test cases in StartCascadeTests; update existing tests with
  required feature role mocks

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…to 1.0.5

Invalid JSON (trailing comma after last hooks entry) caused plugin load
failure. Fixed and bumped patch version per claude-plugins/CLAUDE.md policy.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove all status-string cascade detection in favor of role comparisons.
V3 architecture treats role as the canonical state — status_label is
display-only and must never trigger cascades.

- Remove first_task_started (checked taskStatus == "in-progress")
- Remove RoleAggregationConfig, loadAggregationRules(), checkRoleAggregation(),
  countTasksByStatus() — all used target_feature_status (status strings)
- Add Rule 2: all_children_in_review — when all siblings reach review or
  beyond and parent is in work, parent advances to review
- Keep first_child_started (role-based: newRole == WORK, parent == QUEUE)
- Completion cascade rewritten to check item.role == TERMINAL
- Remove role_aggregation block from default-config.yaml; clarify
  start_cascade comment with explicit Rule 1/2 descriptions
- Update cascade tests: remove aggregation tests, add 5 ReviewCascadeTests

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
… layout

Renames the skill from project-summary to work-summary for domain-agnostic
use across projects, recipes, todos, and any other container type. Redesigns
the dashboard to lead with active items and breadcrumb paths, group containers
by activity state, and collapse empty/terminal items to footer lines. Bumps
plugin to 1.0.7.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Bug fixes (current/ module):
- B1: delete false success — check Result<Boolean> payload before
  counting deletes in ManageItemsTool and ManageNotesTool
- B2: get_next_status predicts wrong next role for items without
  schema tags — mirror AdvanceItemTool's hasReviewPhase lookup
- B3: create_work_tree rejects depth=3 due to >= vs > comparison —
  align with ManageItemsTool's > MAX_DEPTH check
- B4: create_work_tree allows intra-batch circular dependencies —
  add in-memory DFS cycle check in SQLiteWorkTreeService before
  dependency insertion
- B5: start cascade not firing — add detectStartCascades() to
  CascadeDetector and wire Phase 4b into AdvanceItemTool so parent
  auto-advances QUEUE→WORK when first child starts
- B6: self-reparenting and circular reparenting allowed — add
  self-parent guard and bounded ancestor traversal in ManageItemsTool

Validation change:
- WorkItem.title: add 500-char upper bound (was uncapped)
- WorkItem.summary: raise limit from 500 to 2000 chars

All changes covered by new and updated tests; BUILD SUCCESSFUL.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add includeAncestors parameter to list-returning tools and includeChildren
to query_items overview, eliminating O(N×D) parent-walk call chains for
breadcrumb and location-aware display.

Changes:
- WorkItemRepository: add findByIds(Set<UUID>) and findAncestorChains(Set<UUID>)
  (Kotlin BFS upward traversal, ≤3 rounds for depth cap)
- SQLiteWorkItemRepository: implement both methods within one transaction
- QueryItemsTool: includeAncestors on get/search; includeChildren on global overview
- GetContextTool: includeAncestors batches all active/blocked/stalled item IDs
- GetBlockedItemsTool: includeAncestors on blocked items list
- GetNextItemTool: includeAncestors on recommendations
- AdvanceItemTool: always include title in cascade event objects (no extra DB calls)
- work-summary skill: simplified from 4 steps to 3 — get_context(includeAncestors=true)
  replaces manual parent-walk loop; dashboard now completes in 2 MCP calls
- Plugin bumped to 1.0.8

Ancestors format: [{id, title, depth}] ordered root → direct parent.
Root items get []. Children format: [{id, title, role, depth}].

618 tests passing.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Closes a workflow gap: agents creating schema-tagged items had no way to
know which queue-phase notes to fill before advance_item(trigger=start),
forcing an extra get_context call or risking a gate block.

Changes:
- ManageItemsTool: after create, calls NoteSchemaService.getSchemaForTags()
  and includes tags (always) and expectedNotes (when schema matches) in
  each created item's response entry. expectedNotes omitted when no schema
  matches. exists is always false at creation time.
- ManageItemsToolTest: 3 new tests covering schema match, no tags, and
  tags with no matching schema
- CLAUDE.md: documented manage_items create response enrichment fields

618 tests passing.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…Summary, context limit

- search total now reflects full match count (countByFilters + offset pagination)
- query_items(get) nonexistent ID error includes requestedId as structured field
- create_work_tree userSummary extracts cause from result JSON (no longer generic)
- get_context session-resume accepts limit param (1-200, default 50)

Closes observations: 48763e28, fe89d620, 00378df7, 547b74ae

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- manage_items(delete, recursive=true) deletes all descendants before the root,
  traversing leaves-first to satisfy FK ordering
- manage_items(delete) without recursive flag now returns a clean error message
  when the item has children (pre-flight findChildren check, no raw DB exception)
- Added deleteAll(Set<UUID>) to WorkItemRepository for bulk deletion
- Fixed ORM schema mismatch: NotesTable, DependenciesTable, RoleTransitionsTable
  now declare onDelete=ReferenceOption.CASCADE, matching the Flyway SQL migrations

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ner Done footer

Three display improvements (v1.0.9):
- In Progress: collapse children of active parents — if a parent is already shown
  as active, its active descendants are suppressed (parent implies active children)
- Pending Work: only show containers with non-terminal children (queue/work/review > 0);
  containers whose children are all done are excluded
- Done footer: two-tier format — named containers (≥1 child) listed by title,
  standalone items (0 children) collapsed to (+N standalone) count

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…paths

- QueryItemsTool: extract error message from result envelope in userSummary
  so agents see "Query failed: WorkItem not found: <id>" instead of bare "Query failed"
- ManageDependenciesTool: same fix — surfacing cycle/self-dep error detail
- SetupVersionSyncTest: update file paths from claude-plugins/task-orchestrator/
  to claude-plugins/clockwork/ (plugin was renamed during v3 refactor)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- git mv src/ → clockwork/src/ (history preserved)
- Create clockwork/build.gradle.kts (derived from root, with deprecation header)
- Create clockwork/DEPRECATED.md (archive docs, build/run instructions)
- Add startup deprecation warning to clockwork/src/main/kotlin/Main.kt
- Replace root build.gradle.kts with minimal aggregator (no src, apply false)
- Update settings.gradle.kts: include :clockwork alongside :current
- Dockerfile: :current:jar only in builder; update runtime-v2 copy path to
  clockwork/build/libs/; add COPY clockwork/build.gradle.kts and
  clockwork/src in builder stage
- CI: :current:test only; explicit runtime-current Docker target;
  :clockwork:printTagVersion for version validation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ent/

Phase 1 - Archive v2 docs:
- git mv docs/ → clockwork/docs/ (history preserved)
- Update ToolDocumentationResources.kt: docs/tools/ → clockwork/docs/tools/
- Fix clockwork/src/main/resources/db/migration/README.md path reference
- Update root CLAUDE.md Documentation section with correct paths

Phase 2 - Remove docs from Dockerfile:
- Remove COPY docs docs from builder stage
- Remove COPY --from=builder /app/docs /app/docs from runtime-base
- v3 (current) does not load docs at runtime

Phase 3 - Write fresh v3 docs:
- current/docs/quick-start.md — setup, config, first item
- current/docs/api-reference.md — all 13 tools with parameters and examples
- current/docs/workflow-guide.md — roles, note schemas, gates, dependencies

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…n to v1.0.12

HTTP transport:
- Dockerfile: add MCP_HTTP_HOST/PORT env vars and EXPOSE 3001
- docker-compose.yml: add current-http profile service (port 3001)
- CurrentMcpServer.kt: HTTP transport implementation via Ktor Streamable HTTP
- CLAUDE.md: document MCP_TRANSPORT/MCP_HTTP_HOST/MCP_HTTP_PORT env vars and HTTP run command
- gradle/libs.versions.toml: MCP SDK 0.8.3 → 0.8.4 (Ktor Streamable HTTP transport)

Deploy skill (/deploy_to_docker):
- Flip default target from runtime-v2 to runtime-current (v3 is now the default)
- Rename --current flag to --clockwork (v2 is now opt-in, not v3)
- Add transport mode selection step: STDIO (recommended) vs HTTP
- HTTP mode: runs detached with port 3001, named container, .mcp.json reminder
- Note SDK protocol version limitation (0.8.4 supports 2025-06-18, CC requires 2025-11-25)

Plugin v1.0.9 → v1.0.12:
- output-styles/current-analyst.md: full expansion with all 13 tools, note schema
  workflow, efficient patterns, delegation discipline, action items, analysis block rules
- skills/schema-builder/skill.md: complete rewrite with schema mechanics documentation,
  interactive phase design, config generation, and companion skill creation
- Version bumped in plugin.json, marketplace.json, and claude-plugins/CLAUDE.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Rewrites the README to accurately reflect the v3 WorkItem graph model:
- Replace Projects/Features/Tasks hierarchy with unified WorkItem depth model
- Remove v2-only sections: template system, planning tiers, completion gates
- Update tool catalog to 13 v3 tools with accurate names and descriptions
- Add Note Schemas section covering config, gates, and get_context usage
- Add role-based workflow diagram with triggers table
- Update Quick Start to match current/docs/quick-start.md (CLI-first)
- Update all doc links to current/docs/, image tag :latest → :main, SDK 0.8.4
- Align Solution framing: "summary-based handoffs" maps to Anthropic research

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add PRAGMA journal_mode=WAL to DatabaseManager: eliminates read/write
  lock contention when two container instances share the same SQLite
  volume (Claude Code spawns concurrent MCP connections per session context)
- Add PRAGMA busy_timeout=5000: prevents indefinite blocking on the rare
  write-write collision; surfaces SQLITE_BUSY after 5s instead of hanging
- Add mapRowToWorkItemSafe to SQLiteWorkItemRepository: wraps all bulk-read
  .map calls with try-catch, skips corrupt rows (e.g. title > 500 chars)
  with a WARN log rather than crashing the entire tool call
- Bump plugin to v1.0.13 with redesigned /work-summary skill: insight-driven
  dashboard with agent observation blocks, root item classification, and
  3-call parallel data collection (no redundant queries)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…create)

Validation failures (self-dependency, circular dependency) now return
`{success:true, dependencies:[], created:0, failed:N, failures:[{index,error}]}`
instead of a top-level `{success:false, error:{...}}` envelope, matching
the response shape of manage_items and manage_notes on batch rejection.

Atomic behavior is preserved. Request-level errors (invalid type parameter,
infrastructure exceptions) continue to return errorResponse unchanged.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
PRAGMA journal_mode=WAL returns a result row. Using execute() without
closing the Statement leaves a dangling prepared statement on the JDBC
connection. When Exposed later calls setTransactionIsolation() ->
ensureAutoCommit() -> COMMIT, SQLite throws SQLITE_BUSY ("SQL statements
in progress") because the open statement is still attached.

Fix: wrap all three PRAGMA calls in a single statement.use {} block so
the statement is properly closed after setupConnection runs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
New plugin skill (v1.0.14) that creates MCP work items intelligently
from conversation context:
- Scans existing containers via query_items(overview) to anchor items
  under the right category (Bugs, Features, Tech Debt, Observations, etc.)
- Detects hierarchical vs flat structure; offers to create project root
  if none exists
- Creates single items or work trees based on inferred scope
- Applies correct tags (feature-implementation, agent-observation,*)
- Pre-fills required queue-phase notes from conversation context

Also updates output style to reference /create-item in the Action Items
section for proactive agent use.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- CLAUDE.md: manage_dependencies fromTaskId/toTaskId → fromItemId/toItemId
- CLAUDE.md: query_dependencies description corrected (BFS chain+depth, not
  critical path / bottlenecks / parallelizable groups)
- workflow-guide.md: complete trigger now correctly states gates ARE enforced
  (was incorrectly described as "bypasses phase gates")
- workflow-guide.md: get_context response example corrected — missing field is
  string array, top-level key is schema (not notes), guidancePointer is at
  data root (not inside gateStatus)
- api-reference.md: complete_tree rootId mode now explicitly states root item
  is NOT completed, only descendants; added gate enforcement note for
  trigger=complete vs trigger=cancel

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
MEDIUM fixes (api-reference.md):
- manage_items: document top-level requiresVerification is ignored (use per-item)
- manage_items: add descendantsDeleted to delete response docs
- manage_items: add requiresVerification to update response docs
- manage_notes: document additive behavior of ids + itemId delete
- manage_dependencies: document unblockAt omitted from response when default null
- manage_dependencies: document RELATES_TO + unblockAt raises ValidationException
- manage_dependencies: clarify validation failures apply to all ValidationExceptions
- advance_item: document start cascade (child WORK -> parent QUEUE auto-advances)
- advance_item: add error result shape for failed transitions
- get_next_status: document suggestion field on BLOCKED role response
- create_work_tree: fix depth cap description (children can reach depth 3)
- create_work_tree: add tags field to children response example
- get_blocked_items: clarify blockerCount is unsatisfied blockers only

LOW fixes (api-reference.md + workflow-guide.md):
- manage_items: fix complexity default (null, not 5)
- manage_items: clarify delete failure is proactive check not DB constraint
- query_items: add scoped overview response example; clarify global total meaning
- manage_notes: document silent no-op on delete of non-existent note by key
- manage_dependencies: note 0-based index in batch failures
- manage_dependencies: add delete-by-relationship and deleteAll response examples
- manage_dependencies: note pattern shortcuts return same response shape
- get_next_status: enumerate recommendation field values (Ready/Blocked/Terminal)
- create_work_tree: show populated notes array example when createNotes=true
- complete_tree: enumerate skippedReason values; document all summary fields
- get_blocked_items: define blockType values (explicit vs dependency)

Skipped: L12 (flowType) — field does not exist in v3 codebase

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- current/build.gradle.kts: 0.1.0-alpha-01 → 2.0.0
- CHANGELOG.md: add [2.0.0] entry covering the full v3 (Current)
  architecture — unified WorkItem model, 13 MCP tools, role-based
  workflow engine, note schema gates, HTTP transport, WAL mode SQLite,
  Claude Code plugin v1.0.14, and complete doc audit

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@jpicklyk
Copy link
Owner Author

Closing to re-open with an updated PR that reflects all recent changes including cascade refactor, architecture bug fixes, release versioning overhaul, and documentation audit.

@jpicklyk jpicklyk closed this Feb 19, 2026
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.

1 participant