Skip to content

Commit 286fab4

Browse files
Update TASK_QUEUE.json: T1-T4, T9, T11 completed
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 8553b14 commit 286fab4

File tree

2 files changed

+132
-0
lines changed

2 files changed

+132
-0
lines changed

TASK_QUEUE.json

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
{
2+
"project": "temporal-spring-ai",
3+
"tasks": [
4+
{
5+
"id": "T1",
6+
"title": "Add unit tests for type conversion",
7+
"description": "Test ChatModelTypes <-> Spring AI types round-trip in ActivityChatModel and ChatModelActivityImpl. Cover messages (all roles), tool calls, media content, model options, embeddings, vector store types.",
8+
"severity": "high",
9+
"category": "tests",
10+
"depends_on": [],
11+
"status": "completed"
12+
},
13+
{
14+
"id": "T2",
15+
"title": "Add unit tests for tool detection and conversion",
16+
"description": "Test TemporalToolUtil.convertTools() with activity stubs, local activity stubs, @DeterministicTool, @SideEffectTool, Nexus stubs, and rejection of unknown types. Test TemporalStubUtil detection methods.",
17+
"severity": "high",
18+
"category": "tests",
19+
"depends_on": [],
20+
"status": "completed"
21+
},
22+
{
23+
"id": "T3",
24+
"title": "Add replay test for determinism",
25+
"description": "Create a workflow that uses ActivityChatModel with tools, run it once to produce history, then replay from that history to verify determinism. Cover activity tools, @DeterministicTool, and @SideEffectTool.",
26+
"severity": "high",
27+
"category": "tests",
28+
"depends_on": [],
29+
"status": "completed"
30+
},
31+
{
32+
"id": "T4",
33+
"title": "Add unit tests for plugin registration",
34+
"description": "Test SpringAiPlugin.initializeWorker() registers correct activities based on available beans. Test single model, multi-model, with/without VectorStore, with/without EmbeddingModel.",
35+
"severity": "medium",
36+
"category": "tests",
37+
"depends_on": [],
38+
"status": "completed"
39+
},
40+
{
41+
"id": "T5",
42+
"title": "Fix UUID.randomUUID() in workflow context",
43+
"description": "Replace UUID.randomUUID() with Workflow.randomUUID() in LocalActivityToolCallbackWrapper.call(). One-line fix.",
44+
"severity": "high",
45+
"category": "bugfix",
46+
"depends_on": ["T3"],
47+
"status": "todo",
48+
"notes": "Do after replay test exists so we can verify the fix."
49+
},
50+
{
51+
"id": "T6",
52+
"title": "Split SpringAiPlugin for optional deps",
53+
"description": "Refactor so VectorStore, EmbeddingModel, and MCP are handled by separate @ConditionalOnClass auto-configuration classes. Core SpringAiPlugin only references ChatModel. compileOnly scope stays correct.",
54+
"severity": "high",
55+
"category": "refactor",
56+
"depends_on": ["T4"],
57+
"status": "todo",
58+
"notes": "Do after plugin registration tests exist so we can verify the refactor doesn't break registration. Also resolves T10 (unnecessary MCP reflection)."
59+
},
60+
{
61+
"id": "T7",
62+
"title": "Add max iteration limit to ActivityChatModel tool loop",
63+
"description": "Add a configurable max iteration count (default ~10) to the recursive call() loop in ActivityChatModel. Throw after limit to prevent infinite recursion from misbehaving models.",
64+
"severity": "medium",
65+
"category": "bugfix",
66+
"depends_on": ["T1"],
67+
"status": "todo",
68+
"notes": "Do after type conversion tests exist to verify we don't break the call flow."
69+
},
70+
{
71+
"id": "T8",
72+
"title": "Replace fragile stub detection with SDK internals",
73+
"description": "TemporalStubUtil string-matches on internal handler class names. Since the plugin is in the SDK repo, use internal APIs or instanceof checks. Add tests to catch breakage.",
74+
"severity": "medium",
75+
"category": "refactor",
76+
"depends_on": ["T2"],
77+
"status": "todo",
78+
"notes": "Do after tool detection tests exist so we can verify the refactor."
79+
},
80+
{
81+
"id": "T9",
82+
"title": "Document static CALLBACK_REGISTRY lifecycle",
83+
"description": "Add javadoc to LocalActivityToolCallbackWrapper explaining the leak risk when workflows are evicted mid-execution. Consider adding a size metric or periodic cleanup.",
84+
"severity": "medium",
85+
"category": "improvement",
86+
"depends_on": [],
87+
"status": "completed"
88+
},
89+
{
90+
"id": "T10",
91+
"title": "Remove unnecessary MCP reflection",
92+
"description": "SpringAiPlugin uses Class.forName() for McpClientActivityImpl which is in the same module. Will be resolved by T6 (split into conditional configs).",
93+
"severity": "low",
94+
"category": "refactor",
95+
"depends_on": ["T6"],
96+
"status": "todo",
97+
"notes": "Likely resolved automatically by T6."
98+
},
99+
{
100+
"id": "T11",
101+
"title": "Add UnsupportedOperationException for stream()",
102+
"description": "Override stream() in ActivityChatModel to throw UnsupportedOperationException with a clear message that streaming is not supported through activities.",
103+
"severity": "low",
104+
"category": "improvement",
105+
"depends_on": [],
106+
"status": "completed"
107+
},
108+
{
109+
"id": "T12",
110+
"title": "Verify all 5 samples run end-to-end",
111+
"description": "Run chat, MCP, multi-model, RAG, and sandboxing samples interactively against a dev server. Verify tool calling works for each.",
112+
"severity": "medium",
113+
"category": "testing",
114+
"depends_on": ["T6"],
115+
"status": "todo",
116+
"notes": "Blocked on T6 because samples currently need runtimeOnly workaround for the compileOnly issue."
117+
},
118+
{
119+
"id": "T13",
120+
"title": "Remove includeBuild from samples-java",
121+
"description": "Once temporal-spring-ai is published to Maven Central, remove the includeBuild('../sdk-java') block from samples-java/settings.gradle and the grpc-util workaround from core/build.gradle.",
122+
"severity": "low",
123+
"category": "cleanup",
124+
"depends_on": [],
125+
"status": "blocked",
126+
"notes": "Blocked on SDK release. Not actionable yet."
127+
}
128+
],
129+
"execution_order_rationale": "Tests first (T1-T4) in parallel since they're independent. Then fixes that benefit from test coverage: T5 (UUID fix, verified by T3), T6 (plugin split, verified by T4), T7 (loop limit, verified by T1), T8 (stub detection, verified by T2). Then downstream: T10 (resolved by T6), T9/T11 (independent improvements). T12 after T6. T13 blocked on release."
130+
}

temporal-spring-ai/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,10 @@ dependencies {
4545
testImplementation project(':temporal-testing')
4646
testImplementation "org.mockito:mockito-core:${mockitoVersion}"
4747
testImplementation 'org.springframework.boot:spring-boot-starter-test'
48+
testImplementation 'org.springframework.ai:spring-ai-rag'
4849

4950
testRuntimeOnly group: 'ch.qos.logback', name: 'logback-classic', version: "${logbackVersion}"
51+
testRuntimeOnly "org.junit.platform:junit-platform-launcher"
5052
}
5153

5254
tasks.test {

0 commit comments

Comments
 (0)