@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 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thiaq/project-skill",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "type": "module",
5
5
  "private": false,
6
6
  "description": "ThiaQ project setup skill for Codex and Claude Code agents.",
@@ -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
+ ```