@thiaq/project-skill 0.1.1 → 0.1.2
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.
- package/SKILL.md +24 -0
- package/package.json +1 -1
- package/references/mcp-tools.md +259 -0
package/SKILL.md
CHANGED
|
@@ -197,11 +197,35 @@ Use `get_project_context` first. Then call the smallest useful write operation:
|
|
|
197
197
|
- `propose_access_profile_changes` for test URL, role, auth, and secret refs.
|
|
198
198
|
- `propose_safety_policy_changes` for safe/unsafe action boundaries.
|
|
199
199
|
- `list_test_ideas` after discovery.
|
|
200
|
+
- `list_operational_state` to inspect the agent-manageable workspace backlog:
|
|
201
|
+
ideas, groups, issues, journey candidates, runner work, and proposals.
|
|
202
|
+
- `update_test_idea` to soft-triage, archive, restore, or annotate test ideas.
|
|
203
|
+
- `group_test_ideas` to dedupe or collect ideas into scenario, area, or review
|
|
204
|
+
groups.
|
|
205
|
+
- `merge_test_ideas` to archive duplicate ideas under a primary idea.
|
|
200
206
|
- `propose_test_idea_promotion` to create reviewable promotion work.
|
|
201
207
|
- `list_issue_categories` for UX confusion, selector, driver, assertion, and
|
|
202
208
|
safety gaps.
|
|
209
|
+
- `create_issue_category` to store an operational issue category from evidence.
|
|
210
|
+
- `update_issue_category` to close, reopen, archive, restore, relabel, or
|
|
211
|
+
reprioritize operational issue categories.
|
|
212
|
+
- `merge_issue_categories` to archive duplicate issues under a primary issue.
|
|
203
213
|
- `create_repair_proposal` when an issue needs product, adapter, selector, or
|
|
204
214
|
assertion repair.
|
|
215
|
+
- `update_journey_candidate` to reprioritize, archive, restore, or annotate
|
|
216
|
+
candidate journeys without approving executable coverage.
|
|
217
|
+
- `cancel_runner_job` for stale queued/running discovery or scenario work.
|
|
218
|
+
- `retry_runner_job` to clone failed/stale runner work without changing original
|
|
219
|
+
evidence.
|
|
220
|
+
- `update_proposal_status` to withdraw, archive, restore, or supersede draft
|
|
221
|
+
proposals. Do not use it for final accept/reject review gates.
|
|
222
|
+
- `bulk_archive_operational_records` to dry-run and then archive large noisy
|
|
223
|
+
operational backlogs by type, status, source run, and explicit keep IDs.
|
|
224
|
+
- `reconcile_operational_state` to dry-run or apply safe stale runner cleanup.
|
|
225
|
+
|
|
226
|
+
Use soft mutation statuses instead of deletion. Evidence, run artifacts,
|
|
227
|
+
approved flows, approved journeys, manifests, safety policy, and CI tier changes
|
|
228
|
+
remain review-gated.
|
|
205
229
|
|
|
206
230
|
For tool schemas and payload examples, read
|
|
207
231
|
`references/mcp-tools.md` only when preparing MCP calls.
|
package/package.json
CHANGED
package/references/mcp-tools.md
CHANGED
|
@@ -240,3 +240,262 @@ flow code.
|
|
|
240
240
|
}
|
|
241
241
|
}
|
|
242
242
|
```
|
|
243
|
+
|
|
244
|
+
## Operational Workspace Mutations
|
|
245
|
+
|
|
246
|
+
Agents may directly manage living QA workspace state when the operation is
|
|
247
|
+
soft, reversible, and reasoned. Do not hard-delete evidence. Do not accept or
|
|
248
|
+
reject review gates. Do not mutate approved flow code, journey specs, manifests,
|
|
249
|
+
safety policy, access policy, or CI tiers.
|
|
250
|
+
|
|
251
|
+
### List Operational State
|
|
252
|
+
|
|
253
|
+
Use this before cleanup work to inspect all MCP-manageable backlog records in
|
|
254
|
+
one bounded payload.
|
|
255
|
+
|
|
256
|
+
```json
|
|
257
|
+
{
|
|
258
|
+
"name": "list_operational_state",
|
|
259
|
+
"arguments": {
|
|
260
|
+
"projectId": "project-id",
|
|
261
|
+
"limit": "50",
|
|
262
|
+
"status": "draft"
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### Update A Test Idea
|
|
268
|
+
|
|
269
|
+
Use this to triage, annotate, archive, restore, or reprioritize discovery
|
|
270
|
+
findings.
|
|
271
|
+
|
|
272
|
+
```json
|
|
273
|
+
{
|
|
274
|
+
"name": "update_test_idea",
|
|
275
|
+
"arguments": {
|
|
276
|
+
"projectId": "project-id",
|
|
277
|
+
"ideaId": "idea.dashboard.create",
|
|
278
|
+
"status": "archived",
|
|
279
|
+
"reason": "Covered by scenario group scenario.dashboard.create"
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
### Group Test Ideas
|
|
285
|
+
|
|
286
|
+
Use this to dedupe or collect findings into scenario, product-area, or review
|
|
287
|
+
groups.
|
|
288
|
+
|
|
289
|
+
```json
|
|
290
|
+
{
|
|
291
|
+
"name": "group_test_ideas",
|
|
292
|
+
"arguments": {
|
|
293
|
+
"projectId": "project-id",
|
|
294
|
+
"groupId": "scenario.dashboard.create",
|
|
295
|
+
"groupKind": "scenario",
|
|
296
|
+
"label": "Dashboard create path",
|
|
297
|
+
"ideaIds": ["idea.dashboard.create", "idea.dashboard.empty-state"],
|
|
298
|
+
"rationale": "These findings describe one scenario candidate."
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### Merge Test Ideas
|
|
304
|
+
|
|
305
|
+
Use this when several findings describe the same coverage need. The primary is
|
|
306
|
+
kept; secondaries are archived with merge evidence.
|
|
307
|
+
|
|
308
|
+
```json
|
|
309
|
+
{
|
|
310
|
+
"name": "merge_test_ideas",
|
|
311
|
+
"arguments": {
|
|
312
|
+
"projectId": "project-id",
|
|
313
|
+
"primaryIdeaId": "idea.dashboard.create",
|
|
314
|
+
"secondaryIdeaIds": ["idea.dashboard.empty-state"],
|
|
315
|
+
"reason": "Both findings describe the same dashboard create scenario."
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### Create An Issue Category
|
|
321
|
+
|
|
322
|
+
Use this to persist a new operational gap that the agent found in evidence.
|
|
323
|
+
|
|
324
|
+
```json
|
|
325
|
+
{
|
|
326
|
+
"name": "create_issue_category",
|
|
327
|
+
"arguments": {
|
|
328
|
+
"projectId": "project-id",
|
|
329
|
+
"categoryId": "selector-gap.dashboard-create",
|
|
330
|
+
"categoryType": "selector_gap",
|
|
331
|
+
"label": "Dashboard create selector gap",
|
|
332
|
+
"severity": "medium",
|
|
333
|
+
"sourceIds": ["idea.dashboard.create"],
|
|
334
|
+
"reason": "No stable role/test-id locator exists for the create action."
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
### Update An Issue Category
|
|
340
|
+
|
|
341
|
+
Use this to close, reopen, archive, restore, relabel, or reprioritize UX,
|
|
342
|
+
selector, driver, assertion, or safety gaps.
|
|
343
|
+
|
|
344
|
+
```json
|
|
345
|
+
{
|
|
346
|
+
"name": "update_issue_category",
|
|
347
|
+
"arguments": {
|
|
348
|
+
"projectId": "project-id",
|
|
349
|
+
"categoryId": "selector-gap.dashboard-create",
|
|
350
|
+
"status": "closed",
|
|
351
|
+
"reason": "Stable role locator added to the reviewed interaction contract."
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### Merge Issue Categories
|
|
357
|
+
|
|
358
|
+
Use this when multiple issues describe the same gap. The primary issue remains;
|
|
359
|
+
secondaries are archived.
|
|
360
|
+
|
|
361
|
+
```json
|
|
362
|
+
{
|
|
363
|
+
"name": "merge_issue_categories",
|
|
364
|
+
"arguments": {
|
|
365
|
+
"projectId": "project-id",
|
|
366
|
+
"primaryCategoryId": "selector-gap.dashboard-create",
|
|
367
|
+
"secondaryCategoryIds": ["selector-gap.create-button"],
|
|
368
|
+
"reason": "Both point at the same missing create-button locator."
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
### Update A Journey Candidate
|
|
374
|
+
|
|
375
|
+
Use this for ranking and triage only. It does not approve executable coverage.
|
|
376
|
+
|
|
377
|
+
```json
|
|
378
|
+
{
|
|
379
|
+
"name": "update_journey_candidate",
|
|
380
|
+
"arguments": {
|
|
381
|
+
"projectId": "project-id",
|
|
382
|
+
"candidateId": "journey-candidate-id",
|
|
383
|
+
"priority": "high",
|
|
384
|
+
"status": "active",
|
|
385
|
+
"reason": "Matches release-critical onboarding path."
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
### Cancel Runner Work
|
|
391
|
+
|
|
392
|
+
Use this for queued or running discovery/scenario jobs that are stale or unsafe.
|
|
393
|
+
Completed jobs are immutable.
|
|
394
|
+
|
|
395
|
+
```json
|
|
396
|
+
{
|
|
397
|
+
"name": "cancel_runner_job",
|
|
398
|
+
"arguments": {
|
|
399
|
+
"projectId": "project-id",
|
|
400
|
+
"runnerJobId": "runner-job-id",
|
|
401
|
+
"runnerJobRequestId": "runner-request-id",
|
|
402
|
+
"reason": "Superseded by discovery run with updated safety boundaries."
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
### Retry Runner Work
|
|
408
|
+
|
|
409
|
+
Use this to clone a failed or stale runner job/request into new queued work. The
|
|
410
|
+
original evidence remains unchanged.
|
|
411
|
+
|
|
412
|
+
```json
|
|
413
|
+
{
|
|
414
|
+
"name": "retry_runner_job",
|
|
415
|
+
"arguments": {
|
|
416
|
+
"projectId": "project-id",
|
|
417
|
+
"runnerJobId": "runner-job-id",
|
|
418
|
+
"reason": "Runner environment is now healthy."
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
### Withdraw Or Supersede A Proposal
|
|
424
|
+
|
|
425
|
+
Use this for draft proposal lifecycle cleanup. Final accept/reject remains a UI
|
|
426
|
+
review gate.
|
|
427
|
+
|
|
428
|
+
```json
|
|
429
|
+
{
|
|
430
|
+
"name": "update_proposal_status",
|
|
431
|
+
"arguments": {
|
|
432
|
+
"projectId": "project-id",
|
|
433
|
+
"proposalId": "proposal-id",
|
|
434
|
+
"status": "superseded",
|
|
435
|
+
"supersededById": "replacement-proposal-id",
|
|
436
|
+
"reason": "Merged into a broader repair proposal."
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
### Bulk Archive Operational Records
|
|
442
|
+
|
|
443
|
+
Use this for large discovery-noise resets when thousands of proposals or test
|
|
444
|
+
ideas would otherwise require one call per record. It is dry-run by default and
|
|
445
|
+
returns compact counts plus sample IDs, not full proposal or idea bodies.
|
|
446
|
+
|
|
447
|
+
By default, it targets only `proposals` and `test_ideas`. Add more record types
|
|
448
|
+
explicitly when clearing groups, issues, journey candidates, or stale runner
|
|
449
|
+
work. It never hard-deletes evidence, never archives accepted/rejected
|
|
450
|
+
proposals, never archives approved/promoted/implemented test ideas, and only
|
|
451
|
+
cancels queued/running runner work.
|
|
452
|
+
|
|
453
|
+
Preview first:
|
|
454
|
+
|
|
455
|
+
```json
|
|
456
|
+
{
|
|
457
|
+
"name": "bulk_archive_operational_records",
|
|
458
|
+
"arguments": {
|
|
459
|
+
"projectId": "project-id",
|
|
460
|
+
"recordTypes": ["proposals", "test_ideas"],
|
|
461
|
+
"sourceRunIds": ["runner.discovery.ffe22c16"],
|
|
462
|
+
"proposalTypes": ["coverage-gap", "candidate-pathway", "bug-candidate"],
|
|
463
|
+
"dryRun": "true",
|
|
464
|
+
"excludeIds": ["proposal-to-keep", "idea.to.keep"],
|
|
465
|
+
"reason": "Preview cleanup of superseded discovery noise."
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
Apply after reviewing the returned counts:
|
|
471
|
+
|
|
472
|
+
```json
|
|
473
|
+
{
|
|
474
|
+
"name": "bulk_archive_operational_records",
|
|
475
|
+
"arguments": {
|
|
476
|
+
"projectId": "project-id",
|
|
477
|
+
"recordTypes": ["proposals", "test_ideas"],
|
|
478
|
+
"sourceRunIds": ["runner.discovery.ffe22c16"],
|
|
479
|
+
"dryRun": "false",
|
|
480
|
+
"excludeIds": ["proposal-to-keep", "idea.to.keep"],
|
|
481
|
+
"reason": "Archive superseded discovery noise after preserving latest real findings."
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
### Reconcile Operational State
|
|
487
|
+
|
|
488
|
+
Use this to find stale queued/running runner work. It is dry-run by default.
|
|
489
|
+
Only set `dryRun` to `"false"` when the cancellation is safe.
|
|
490
|
+
|
|
491
|
+
```json
|
|
492
|
+
{
|
|
493
|
+
"name": "reconcile_operational_state",
|
|
494
|
+
"arguments": {
|
|
495
|
+
"projectId": "project-id",
|
|
496
|
+
"staleRunnerHours": "24",
|
|
497
|
+
"dryRun": "true",
|
|
498
|
+
"reason": "Nightly cleanup of stale queued discovery work."
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
```
|