vector-task-mcp 1.7.2__tar.gz → 1.7.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/PKG-INFO +1 -1
  2. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/pyproject.toml +1 -1
  3. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/src/CASES.md +90 -0
  4. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/tests/test_cases_integrity.py +98 -0
  5. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/vector_task_mcp.egg-info/PKG-INFO +1 -1
  6. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/.mcp.json +0 -0
  7. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/.python-version +0 -0
  8. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/CLAUDE.md +0 -0
  9. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/LICENSE +0 -0
  10. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/MANIFEST.in +0 -0
  11. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/README.md +0 -0
  12. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/claude-desktop-config.example.json +0 -0
  13. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/main.py +0 -0
  14. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/requirements.txt +0 -0
  15. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/run-arm64.sh +0 -0
  16. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/setup.cfg +0 -0
  17. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/src/README_AGENTS.md +0 -0
  18. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/src/__init__.py +0 -0
  19. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/src/embeddings.py +0 -0
  20. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/src/models.py +0 -0
  21. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/src/normalization.py +0 -0
  22. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/src/security.py +0 -0
  23. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/src/task_store.py +0 -0
  24. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/tests/test_normalization.py +0 -0
  25. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/tests/test_task_store.py +0 -0
  26. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/vector_task_mcp.egg-info/SOURCES.txt +0 -0
  27. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/vector_task_mcp.egg-info/dependency_links.txt +0 -0
  28. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/vector_task_mcp.egg-info/entry_points.txt +0 -0
  29. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/vector_task_mcp.egg-info/requires.txt +0 -0
  30. {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/vector_task_mcp.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vector-task-mcp
3
- Version: 1.7.2
3
+ Version: 1.7.3
4
4
  Summary: A secure, vector-based task management server for Claude Desktop using sqlite-vec and sentence-transformers
5
5
  Author-email: Xsaven <xsaven@gmail.com>
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "vector-task-mcp"
3
- version = "1.7.2"
3
+ version = "1.7.3"
4
4
  description = "A secure, vector-based task management server for Claude Desktop using sqlite-vec and sentence-transformers"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -2152,6 +2152,96 @@ mcp__vector-memory__store_memory(
2152
2152
  )
2153
2153
  ```
2154
2154
 
2155
+ ---
2156
+ ---
2157
+
2158
+ ## Workflow Scenarios
2159
+ <!-- description: Multi-step MCP operation sequences with verification. Create-then-validate, update-then-confirm patterns. -->
2160
+
2161
+ ### Create-Then-Validate
2162
+
2163
+ After task_create, immediately task_get to confirm fields persisted correctly. Prevents phantom tasks.
2164
+
2165
+ **Priority:** HIGH
2166
+
2167
+ ```python
2168
+ # Step 1: Create the task
2169
+ result = mcp__vector-task__task_create({
2170
+ "title": "Add rate limiting to API endpoints",
2171
+ "description": "Implement rate limiting middleware for all /api/* routes. Apply to controllers in app/Http/Controllers/Api/.",
2172
+ "tags": ["feature", "api", "strict:standard"],
2173
+ "estimate": 3.0,
2174
+ "priority": "high"
2175
+ })
2176
+
2177
+ # Step 2: Validate by fetching the created task
2178
+ task = mcp__vector-task__task_get({
2179
+ "task_id": result["task_id"]
2180
+ })
2181
+
2182
+ # Step 3: Confirm fields
2183
+ # task.title == "Add rate limiting to API endpoints" → title persisted
2184
+ # task.status == "pending" → correct initial status
2185
+ # "feature" in task.tags → tags persisted
2186
+ # task.estimate == 3.0 → estimate persisted
2187
+ # If task_get returns error → creation failed silently
2188
+ # If fields mismatch → data integrity issue
2189
+ ```
2190
+
2191
+ **When to use:**
2192
+ - After creating tasks with complex tag sets
2193
+ - After creating subtasks in a hierarchy (verify parent_id linkage)
2194
+ - When task_create returns success but downstream operations depend on the task existing
2195
+ - Before starting delegation that references the created task_id
2196
+
2197
+ **Iron rule alignment:**
2198
+ - `explore-before-execute` (CRITICAL): mandates exploring context before execution
2199
+ - This pattern extends it: execute-then-verify for write operations
2200
+ - Combined flow: explore (context check) → create → validate (get + confirm)
2201
+
2202
+ **Governance:** Uses compile-time preset. No additional cookbook pulls needed.
2203
+
2204
+ ---
2205
+
2206
+ ### Create-Subtask-Then-Validate-Hierarchy
2207
+
2208
+ For hierarchical tasks: create subtask, verify parent linkage.
2209
+
2210
+ ```python
2211
+ # Step 1: Verify parent exists and is accessible
2212
+ parent = mcp__vector-task__task_get({
2213
+ "task_id": "parent-42"
2214
+ })
2215
+ # Confirm: parent exists, parent.status allows subtask creation
2216
+
2217
+ # Step 2: Create subtask
2218
+ result = mcp__vector-task__task_create({
2219
+ "title": "Implement rate limiter middleware class",
2220
+ "description": "Create RateLimiterMiddleware in app/Http/Middleware/",
2221
+ "tags": ["feature", "api"],
2222
+ "estimate": 1.5,
2223
+ "parent_id": "parent-42"
2224
+ })
2225
+
2226
+ # Step 3: Validate subtask + hierarchy
2227
+ subtask = mcp__vector-task__task_get({
2228
+ "task_id": result["task_id"]
2229
+ })
2230
+ # Confirm: subtask.parent_id == "parent-42"
2231
+ # Confirm: subtask.status == "pending"
2232
+
2233
+ # Step 4: Verify parent sees child (optional)
2234
+ parent_refreshed = mcp__vector-task__task_get({
2235
+ "task_id": "parent-42"
2236
+ })
2237
+ # Confirm: result["task_id"] in parent_refreshed.children
2238
+ ```
2239
+
2240
+ **Iron rule alignment:**
2241
+ - `parent-readonly` (CRITICAL): parent task is READ-ONLY, never update parent status manually
2242
+ - Status propagation is AUTOMATIC: child→pending implies parent→pending
2243
+
2244
+ ---
2155
2245
  ---
2156
2246
 
2157
2247
  ## Gates Rules Scenarios
@@ -74,6 +74,7 @@ def get_expected_categories():
74
74
  "lightweight-lawyer-gate",
75
75
  "standard-search-patterns-quick-reference",
76
76
  "tag-taxonomy-quick-reference",
77
+ "workflow",
77
78
  ]
78
79
 
79
80
 
@@ -187,6 +188,103 @@ class TestCasesIntegrity:
187
188
  assert "[CRITICAL]" in gates_content, "gates-rules must contain CRITICAL priority rules"
188
189
  assert "[HIGH]" in gates_content, "gates-rules must contain HIGH priority rules"
189
190
 
191
+ def test_no_banned_phrases_in_new_categories(self):
192
+ """New categories (workflow) must not contain uncertainty triggers"""
193
+ content = CASES_FILE.read_text()
194
+
195
+ # Extract only new category: workflow
196
+ new_sections = []
197
+ for section_name in ["Workflow"]:
198
+ match = re.search(
199
+ rf'^## {section_name}.*?(?=^## |\Z)',
200
+ content,
201
+ re.MULTILINE | re.DOTALL
202
+ )
203
+ if match:
204
+ new_sections.append((section_name, match.group(0)))
205
+
206
+ banned_patterns = [
207
+ (r'[Tt]rigger.*[Uu]ncertainty', 'Trigger...Uncertainty'),
208
+ (r'[Ww]hen uncertain', 'when uncertain'),
209
+ (r'[Bb]efore assuming', 'before assuming'),
210
+ ]
211
+
212
+ violations = []
213
+ for section_name, section_content in new_sections:
214
+ for pattern, label in banned_patterns:
215
+ matches = re.findall(pattern, section_content)
216
+ if matches:
217
+ violations.append(f"{section_name}: found '{label}' ({len(matches)}x)")
218
+
219
+ assert not violations, (
220
+ f"Banned phrases in new categories:\n"
221
+ + "\n".join(f" - {v}" for v in violations)
222
+ + "\n\nThese phrases are uncertainty triggers banned by Brain governance."
223
+ + "\n Use compile-time presets and explicit onViolation instead."
224
+ )
225
+
226
+ def test_mcp_examples_json_syntax(self):
227
+ """MCP call examples in new categories must use JSON object syntax"""
228
+ content = CASES_FILE.read_text()
229
+
230
+ # Extract workflow section
231
+ new_sections = []
232
+ for section_name in ["Workflow"]:
233
+ match = re.search(
234
+ rf'^## {section_name}.*?(?=^## |\Z)',
235
+ content,
236
+ re.MULTILINE | re.DOTALL
237
+ )
238
+ if match:
239
+ new_sections.append((section_name, match.group(0)))
240
+
241
+ violations = []
242
+ for section_name, section_content in new_sections:
243
+ # Find all mcp__ calls
244
+ mcp_calls = re.findall(
245
+ r'(mcp__[a-z_-]+__[a-z_]+)\(([^)]*)\)',
246
+ section_content,
247
+ re.DOTALL
248
+ )
249
+ for tool_name, payload in mcp_calls:
250
+ payload_stripped = payload.strip()
251
+ if not payload_stripped:
252
+ continue # Empty call (e.g., cookbook()) is valid
253
+ # Payload must start with { (JSON object)
254
+ if not payload_stripped.startswith('{'):
255
+ violations.append(
256
+ f"{section_name}: {tool_name}() payload not JSON object: "
257
+ f"'{payload_stripped[:50]}...'"
258
+ )
259
+
260
+ assert not violations, (
261
+ f"MCP examples must use JSON object syntax:\n"
262
+ + "\n".join(f" - {v}" for v in violations)
263
+ + "\n\nCorrect: mcp__tool__op({\"key\": \"value\"})"
264
+ + "\n Wrong: mcp__tool__op(key=\"value\")"
265
+ )
266
+
267
+ def test_workflow_has_verification_step(self):
268
+ """Workflow category must contain verification/confirm pattern"""
269
+ content = CASES_FILE.read_text()
270
+
271
+ workflow_match = re.search(
272
+ r'^## Workflow.*?(?=^## |\Z)',
273
+ content,
274
+ re.MULTILINE | re.DOTALL
275
+ )
276
+
277
+ assert workflow_match, "Workflow section not found in CASES.md"
278
+
279
+ workflow_content = workflow_match.group(0)
280
+
281
+ assert re.search(r'[Vv]erif', workflow_content), (
282
+ "Workflow section must contain verification step (verify/verified/verification)"
283
+ )
284
+ assert re.search(r'[Cc]onfirm', workflow_content), (
285
+ "Workflow section must contain confirmation step (confirm/confirmed)"
286
+ )
287
+
190
288
 
191
289
  # CLI helper to show current status
192
290
  if __name__ == "__main__":
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vector-task-mcp
3
- Version: 1.7.2
3
+ Version: 1.7.3
4
4
  Summary: A secure, vector-based task management server for Claude Desktop using sqlite-vec and sentence-transformers
5
5
  Author-email: Xsaven <xsaven@gmail.com>
6
6
  License-Expression: MIT
File without changes
File without changes