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.
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/PKG-INFO +1 -1
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/pyproject.toml +1 -1
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/src/CASES.md +90 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/tests/test_cases_integrity.py +98 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/vector_task_mcp.egg-info/PKG-INFO +1 -1
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/.mcp.json +0 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/.python-version +0 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/CLAUDE.md +0 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/LICENSE +0 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/MANIFEST.in +0 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/README.md +0 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/claude-desktop-config.example.json +0 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/main.py +0 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/requirements.txt +0 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/run-arm64.sh +0 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/setup.cfg +0 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/src/README_AGENTS.md +0 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/src/__init__.py +0 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/src/embeddings.py +0 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/src/models.py +0 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/src/normalization.py +0 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/src/security.py +0 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/src/task_store.py +0 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/tests/test_normalization.py +0 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/tests/test_task_store.py +0 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/vector_task_mcp.egg-info/SOURCES.txt +0 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/vector_task_mcp.egg-info/dependency_links.txt +0 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/vector_task_mcp.egg-info/entry_points.txt +0 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/vector_task_mcp.egg-info/requires.txt +0 -0
- {vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/vector_task_mcp.egg-info/top_level.txt +0 -0
|
@@ -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__":
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vector_task_mcp-1.7.2 → vector_task_mcp-1.7.3}/vector_task_mcp.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|