@massa-ai/claude-plugin 1.60.1 → 1.62.0

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 (275) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +2 -4
  3. package/agent-profiles/{home/massa-ai-builder.md → balanced/builder.md} +4 -4
  4. package/agent-profiles/balanced/code-explorer.md +103 -0
  5. package/agent-profiles/balanced/code-reviewer.md +135 -0
  6. package/agent-profiles/balanced/designer.md +85 -0
  7. package/agent-profiles/balanced/judge.md +148 -0
  8. package/agent-profiles/balanced/product-manager.md +109 -0
  9. package/agent-profiles/balanced/test-engineer.md +101 -0
  10. package/agent-profiles/cheap/{massa-ai-builder.md → builder.md} +4 -4
  11. package/agent-profiles/cheap/code-explorer.md +103 -0
  12. package/agent-profiles/cheap/code-reviewer.md +135 -0
  13. package/agent-profiles/cheap/designer.md +85 -0
  14. package/agent-profiles/cheap/judge.md +148 -0
  15. package/agent-profiles/cheap/product-manager.md +109 -0
  16. package/agent-profiles/cheap/test-engineer.md +101 -0
  17. package/agent-profiles/heavy/{massa-ai-builder.md → builder.md} +4 -4
  18. package/agent-profiles/heavy/code-explorer.md +103 -0
  19. package/agent-profiles/heavy/code-reviewer.md +135 -0
  20. package/agent-profiles/heavy/designer.md +85 -0
  21. package/agent-profiles/heavy/judge.md +148 -0
  22. package/agent-profiles/heavy/product-manager.md +109 -0
  23. package/agent-profiles/heavy/test-engineer.md +101 -0
  24. package/{agents/massa-ai-builder.md → agent-profiles/home/builder.md} +4 -4
  25. package/agent-profiles/home/code-explorer.md +103 -0
  26. package/agent-profiles/home/code-reviewer.md +135 -0
  27. package/agent-profiles/home/designer.md +85 -0
  28. package/agent-profiles/home/judge.md +148 -0
  29. package/agent-profiles/home/product-manager.md +109 -0
  30. package/agent-profiles/home/test-engineer.md +101 -0
  31. package/agent-profiles/work/{massa-ai-builder.md → builder.md} +4 -4
  32. package/agent-profiles/work/code-explorer.md +103 -0
  33. package/agent-profiles/work/code-reviewer.md +135 -0
  34. package/agent-profiles/work/designer.md +85 -0
  35. package/agent-profiles/work/judge.md +148 -0
  36. package/agent-profiles/work/product-manager.md +109 -0
  37. package/agent-profiles/work/test-engineer.md +101 -0
  38. package/{agent-profiles/balanced/massa-ai-builder.md → agents/builder.md} +4 -4
  39. package/agents/code-explorer.md +103 -0
  40. package/agents/code-reviewer.md +135 -0
  41. package/agents/designer.md +85 -0
  42. package/agents/judge.md +148 -0
  43. package/agents/product-manager.md +109 -0
  44. package/agents/test-engineer.md +101 -0
  45. package/commands/{adr.md → create-adr.md} +3 -3
  46. package/commands/{to-prd.md → create-prd.md} +3 -3
  47. package/commands/{rfc.md → create-rfc.md} +3 -3
  48. package/commands/{tdd.md → create-tdd.md} +3 -3
  49. package/commands/{ticket.md → create-ticket.md} +3 -3
  50. package/commands/{discovery.md → product-discovery.md} +3 -3
  51. package/hooks/massa-ai-hook.ts +4 -4
  52. package/install.sh +116 -38
  53. package/package.json +1 -1
  54. package/skills/agents/builder/SKILL.md +3 -5
  55. package/skills/agents/code-explorer/SKILL.md +104 -0
  56. package/skills/agents/code-reviewer/SKILL.md +136 -0
  57. package/skills/agents/designer/SKILL.md +34 -18
  58. package/skills/agents/judge/SKILL.md +101 -51
  59. package/skills/agents/product-manager/SKILL.md +110 -0
  60. package/skills/agents/test-engineer/SKILL.md +57 -23
  61. package/skills/bootstrap/SKILL.md +4 -5
  62. package/skills/massa-ai/SKILL.md +26 -29
  63. package/skills/massa-ai/references/agent-orchestration.md +69 -66
  64. package/skills/massa-ai/references/audit-report-io.md +8 -87
  65. package/skills/massa-ai/references/code-reuse-scan.md +1 -1
  66. package/skills/massa-ai/references/{adr-authoring.md → create-adr.md} +3 -3
  67. package/skills/massa-ai/references/{rfc → create-rfc}/discovery-and-sizing.md +1 -1
  68. package/skills/massa-ai/references/{tdd → create-tdd}/calibrated-examples.md +3 -3
  69. package/skills/massa-ai/references/{tdd → create-tdd}/discovery-and-sizing.md +1 -1
  70. package/skills/massa-ai/references/{tdd → create-tdd}/quality-and-lifecycle.md +1 -1
  71. package/skills/massa-ai/references/{ticket → create-ticket}/intake-and-sources.md +1 -1
  72. package/skills/massa-ai/references/figma-pre-analysis.md +1 -1
  73. package/skills/massa-ai/references/furps/analyst-role.md +3 -3
  74. package/skills/massa-ai/references/furps/checklist.md +2 -2
  75. package/skills/massa-ai/references/furps/intake.md +7 -7
  76. package/skills/massa-ai/references/hook-enforcement.md +4 -8
  77. package/skills/massa-ai/references/implementation-delivery.md +2 -2
  78. package/skills/massa-ai/references/knowledge-verification-chain.md +0 -1
  79. package/skills/massa-ai/references/mobile-context.md +2 -5
  80. package/skills/massa-ai/references/pr-task-fix.md +1 -1
  81. package/skills/massa-ai/references/spec-driven/sub-agents.md +5 -5
  82. package/skills/massa-ai/references/spec-driven/validate.md +1 -1
  83. package/skills/massa-ai/references/subagent-design.md +6 -9
  84. package/skills/massa-ai/references/synapse-policy.md +2 -2
  85. package/skills/massa-ai/references/verification-ladder.md +2 -2
  86. package/skills/massa-ai/scripts/validate_audit_report.ts +3 -8
  87. package/skills/massa-ai/workflows/architecture/architecture-audit.md +4 -5
  88. package/skills/massa-ai/workflows/architecture/architecture-fix.md +5 -6
  89. package/skills/massa-ai/workflows/bugs/bugs-audit.md +2 -3
  90. package/skills/massa-ai/workflows/bugs/bugs-fix.md +4 -5
  91. package/skills/massa-ai/workflows/code-quality/code-quality-audit.md +2 -3
  92. package/skills/massa-ai/workflows/code-quality/code-quality-fix.md +4 -5
  93. package/skills/massa-ai/workflows/commit.md +3 -3
  94. package/skills/massa-ai/workflows/{adr.md → create-adr.md} +10 -10
  95. package/skills/massa-ai/workflows/{to-prd.md → create-prd.md} +4 -4
  96. package/skills/massa-ai/workflows/{rfc.md → create-rfc.md} +6 -6
  97. package/skills/massa-ai/workflows/{tdd.md → create-tdd.md} +11 -11
  98. package/skills/massa-ai/workflows/{ticket.md → create-ticket.md} +5 -5
  99. package/skills/massa-ai/workflows/debug.md +4 -5
  100. package/skills/massa-ai/workflows/design.md +2 -2
  101. package/skills/massa-ai/workflows/exploration.md +2 -2
  102. package/skills/massa-ai/workflows/feature.md +5 -6
  103. package/skills/massa-ai/workflows/implementation/implementation-audit.md +22 -3
  104. package/skills/massa-ai/workflows/implementation/implementation-fix.md +6 -7
  105. package/skills/massa-ai/workflows/judge-with-debate.md +14 -14
  106. package/skills/massa-ai/workflows/mobile-figma/mobile-figma-audit.md +2 -2
  107. package/skills/massa-ai/workflows/mobile-figma/mobile-figma-fix.md +10 -11
  108. package/skills/massa-ai/workflows/pr-review.md +31 -13
  109. package/skills/massa-ai/workflows/{discovery.md → product-discovery.md} +12 -12
  110. package/skills/massa-ai/workflows/refactor.md +4 -5
  111. package/skills/massa-ai/workflows/refinement/furps-refinement.md +7 -7
  112. package/skills/massa-ai/workflows/requirements/requirements-audit.md +2 -2
  113. package/skills/massa-ai/workflows/requirements/requirements-fix.md +5 -6
  114. package/skills/massa-ai/workflows/security/security-audit.md +2 -3
  115. package/skills/massa-ai/workflows/security/security-fix.md +3 -4
  116. package/skills/massa-ai/workflows/spec-driven.md +9 -10
  117. package/skills/massa-ai/workflows/tests/tests-audit.md +2 -2
  118. package/skills/massa-ai/workflows/tests/tests-fix.md +16 -6
  119. package/skills/massa-ai/workflows/the-fool.md +7 -7
  120. package/agent-profiles/balanced/massa-ai-architecture-specialist.md +0 -63
  121. package/agent-profiles/balanced/massa-ai-audit-specialist.md +0 -80
  122. package/agent-profiles/balanced/massa-ai-context-curator.md +0 -65
  123. package/agent-profiles/balanced/massa-ai-designer.md +0 -67
  124. package/agent-profiles/balanced/massa-ai-documentation-agent.md +0 -62
  125. package/agent-profiles/balanced/massa-ai-furps-analyst.md +0 -69
  126. package/agent-profiles/balanced/massa-ai-investigator.md +0 -66
  127. package/agent-profiles/balanced/massa-ai-judge.md +0 -96
  128. package/agent-profiles/balanced/massa-ai-meta-judge.md +0 -84
  129. package/agent-profiles/balanced/massa-ai-mobile-specialist.md +0 -80
  130. package/agent-profiles/balanced/massa-ai-navigator.md +0 -73
  131. package/agent-profiles/balanced/massa-ai-plan-critic.md +0 -88
  132. package/agent-profiles/balanced/massa-ai-planner.md +0 -63
  133. package/agent-profiles/balanced/massa-ai-requirements-analyst.md +0 -62
  134. package/agent-profiles/balanced/massa-ai-reviewer.md +0 -64
  135. package/agent-profiles/balanced/massa-ai-test-engineer.md +0 -64
  136. package/agent-profiles/balanced/massa-ai-verification-agent.md +0 -63
  137. package/agent-profiles/cheap/massa-ai-architecture-specialist.md +0 -63
  138. package/agent-profiles/cheap/massa-ai-audit-specialist.md +0 -80
  139. package/agent-profiles/cheap/massa-ai-context-curator.md +0 -65
  140. package/agent-profiles/cheap/massa-ai-designer.md +0 -67
  141. package/agent-profiles/cheap/massa-ai-documentation-agent.md +0 -62
  142. package/agent-profiles/cheap/massa-ai-furps-analyst.md +0 -69
  143. package/agent-profiles/cheap/massa-ai-investigator.md +0 -66
  144. package/agent-profiles/cheap/massa-ai-judge.md +0 -96
  145. package/agent-profiles/cheap/massa-ai-meta-judge.md +0 -84
  146. package/agent-profiles/cheap/massa-ai-mobile-specialist.md +0 -80
  147. package/agent-profiles/cheap/massa-ai-navigator.md +0 -73
  148. package/agent-profiles/cheap/massa-ai-plan-critic.md +0 -88
  149. package/agent-profiles/cheap/massa-ai-planner.md +0 -63
  150. package/agent-profiles/cheap/massa-ai-requirements-analyst.md +0 -62
  151. package/agent-profiles/cheap/massa-ai-reviewer.md +0 -64
  152. package/agent-profiles/cheap/massa-ai-test-engineer.md +0 -64
  153. package/agent-profiles/cheap/massa-ai-verification-agent.md +0 -63
  154. package/agent-profiles/heavy/massa-ai-architecture-specialist.md +0 -63
  155. package/agent-profiles/heavy/massa-ai-audit-specialist.md +0 -80
  156. package/agent-profiles/heavy/massa-ai-context-curator.md +0 -65
  157. package/agent-profiles/heavy/massa-ai-designer.md +0 -67
  158. package/agent-profiles/heavy/massa-ai-documentation-agent.md +0 -62
  159. package/agent-profiles/heavy/massa-ai-furps-analyst.md +0 -69
  160. package/agent-profiles/heavy/massa-ai-investigator.md +0 -66
  161. package/agent-profiles/heavy/massa-ai-judge.md +0 -96
  162. package/agent-profiles/heavy/massa-ai-meta-judge.md +0 -84
  163. package/agent-profiles/heavy/massa-ai-mobile-specialist.md +0 -80
  164. package/agent-profiles/heavy/massa-ai-navigator.md +0 -73
  165. package/agent-profiles/heavy/massa-ai-plan-critic.md +0 -88
  166. package/agent-profiles/heavy/massa-ai-planner.md +0 -63
  167. package/agent-profiles/heavy/massa-ai-requirements-analyst.md +0 -62
  168. package/agent-profiles/heavy/massa-ai-reviewer.md +0 -64
  169. package/agent-profiles/heavy/massa-ai-test-engineer.md +0 -64
  170. package/agent-profiles/heavy/massa-ai-verification-agent.md +0 -63
  171. package/agent-profiles/home/massa-ai-architecture-specialist.md +0 -63
  172. package/agent-profiles/home/massa-ai-audit-specialist.md +0 -80
  173. package/agent-profiles/home/massa-ai-context-curator.md +0 -65
  174. package/agent-profiles/home/massa-ai-designer.md +0 -67
  175. package/agent-profiles/home/massa-ai-documentation-agent.md +0 -62
  176. package/agent-profiles/home/massa-ai-furps-analyst.md +0 -69
  177. package/agent-profiles/home/massa-ai-investigator.md +0 -66
  178. package/agent-profiles/home/massa-ai-judge.md +0 -96
  179. package/agent-profiles/home/massa-ai-meta-judge.md +0 -84
  180. package/agent-profiles/home/massa-ai-mobile-specialist.md +0 -80
  181. package/agent-profiles/home/massa-ai-navigator.md +0 -73
  182. package/agent-profiles/home/massa-ai-plan-critic.md +0 -88
  183. package/agent-profiles/home/massa-ai-planner.md +0 -63
  184. package/agent-profiles/home/massa-ai-requirements-analyst.md +0 -62
  185. package/agent-profiles/home/massa-ai-reviewer.md +0 -64
  186. package/agent-profiles/home/massa-ai-test-engineer.md +0 -64
  187. package/agent-profiles/home/massa-ai-verification-agent.md +0 -63
  188. package/agent-profiles/work/massa-ai-architecture-specialist.md +0 -63
  189. package/agent-profiles/work/massa-ai-audit-specialist.md +0 -80
  190. package/agent-profiles/work/massa-ai-context-curator.md +0 -65
  191. package/agent-profiles/work/massa-ai-designer.md +0 -67
  192. package/agent-profiles/work/massa-ai-documentation-agent.md +0 -62
  193. package/agent-profiles/work/massa-ai-furps-analyst.md +0 -69
  194. package/agent-profiles/work/massa-ai-investigator.md +0 -66
  195. package/agent-profiles/work/massa-ai-judge.md +0 -96
  196. package/agent-profiles/work/massa-ai-meta-judge.md +0 -84
  197. package/agent-profiles/work/massa-ai-mobile-specialist.md +0 -80
  198. package/agent-profiles/work/massa-ai-navigator.md +0 -73
  199. package/agent-profiles/work/massa-ai-plan-critic.md +0 -88
  200. package/agent-profiles/work/massa-ai-planner.md +0 -63
  201. package/agent-profiles/work/massa-ai-requirements-analyst.md +0 -62
  202. package/agent-profiles/work/massa-ai-reviewer.md +0 -64
  203. package/agent-profiles/work/massa-ai-test-engineer.md +0 -64
  204. package/agent-profiles/work/massa-ai-verification-agent.md +0 -63
  205. package/agents/massa-ai-architecture-specialist.md +0 -63
  206. package/agents/massa-ai-audit-specialist.md +0 -80
  207. package/agents/massa-ai-context-curator.md +0 -65
  208. package/agents/massa-ai-designer.md +0 -67
  209. package/agents/massa-ai-documentation-agent.md +0 -62
  210. package/agents/massa-ai-furps-analyst.md +0 -69
  211. package/agents/massa-ai-investigator.md +0 -66
  212. package/agents/massa-ai-judge.md +0 -96
  213. package/agents/massa-ai-meta-judge.md +0 -84
  214. package/agents/massa-ai-mobile-specialist.md +0 -80
  215. package/agents/massa-ai-navigator.md +0 -73
  216. package/agents/massa-ai-plan-critic.md +0 -88
  217. package/agents/massa-ai-planner.md +0 -63
  218. package/agents/massa-ai-requirements-analyst.md +0 -62
  219. package/agents/massa-ai-reviewer.md +0 -64
  220. package/agents/massa-ai-test-engineer.md +0 -64
  221. package/agents/massa-ai-verification-agent.md +0 -63
  222. package/commands/general.md +0 -14
  223. package/commands/maestro-audit.md +0 -14
  224. package/commands/maestro-fix.md +0 -14
  225. package/commands/maestro.md +0 -14
  226. package/skills/agents/architecture-specialist/SKILL.md +0 -67
  227. package/skills/agents/audit-specialist/SKILL.md +0 -84
  228. package/skills/agents/context-curator/SKILL.md +0 -69
  229. package/skills/agents/documentation-agent/SKILL.md +0 -67
  230. package/skills/agents/furps-analyst/SKILL.md +0 -72
  231. package/skills/agents/investigator/SKILL.md +0 -70
  232. package/skills/agents/meta-judge/SKILL.md +0 -87
  233. package/skills/agents/mobile-specialist/SKILL.md +0 -84
  234. package/skills/agents/navigator/SKILL.md +0 -77
  235. package/skills/agents/plan-critic/SKILL.md +0 -91
  236. package/skills/agents/planner/SKILL.md +0 -67
  237. package/skills/agents/requirements-analyst/SKILL.md +0 -66
  238. package/skills/agents/reviewer/SKILL.md +0 -68
  239. package/skills/agents/verification-agent/SKILL.md +0 -67
  240. package/skills/massa-ai/personas/README.md +0 -35
  241. package/skills/massa-ai/personas/ai-native-nodejs-cli-architect.md +0 -47
  242. package/skills/massa-ai/personas/catalog.json +0 -7
  243. package/skills/massa-ai/personas/context-skill-harness-engineer-architect.md +0 -47
  244. package/skills/massa-ai/personas/product-manager.md +0 -65
  245. package/skills/massa-ai/personas/senior-mobile-engineer.md +0 -46
  246. package/skills/massa-ai/personas/senior-mobile-qa-automation-engineer.md +0 -51
  247. package/skills/massa-ai/personas/signals/ai-native-nodejs-cli-architect.json +0 -20
  248. package/skills/massa-ai/personas/signals/context-skill-harness-engineer-architect.json +0 -20
  249. package/skills/massa-ai/personas/signals/product-manager.json +0 -21
  250. package/skills/massa-ai/personas/signals/senior-mobile-engineer.json +0 -18
  251. package/skills/massa-ai/personas/signals/senior-mobile-qa-automation-engineer.json +0 -18
  252. package/skills/massa-ai/references/maestro/artifacts-reports.md +0 -69
  253. package/skills/massa-ai/references/maestro/cli-device.md +0 -65
  254. package/skills/massa-ai/references/maestro/cloud.md +0 -69
  255. package/skills/massa-ai/references/maestro/config-env-output.md +0 -76
  256. package/skills/massa-ai/references/maestro/fact-ledger.md +0 -73
  257. package/skills/massa-ai/references/maestro/js-scripting.md +0 -70
  258. package/skills/massa-ai/references/maestro/mcp.md +0 -59
  259. package/skills/massa-ai/references/maestro/patterns.md +0 -102
  260. package/skills/massa-ai/references/maestro/selectors.md +0 -91
  261. package/skills/massa-ai/references/maestro/workspace-execution.md +0 -81
  262. package/skills/massa-ai/references/maestro/yaml-commands.md +0 -203
  263. package/skills/massa-ai/references/maestro.md +0 -31
  264. package/skills/massa-ai/workflows/general.md +0 -88
  265. package/skills/massa-ai/workflows/maestro/maestro-audit.md +0 -64
  266. package/skills/massa-ai/workflows/maestro/maestro-fix.md +0 -111
  267. package/skills/massa-ai/workflows/maestro/maestro.md +0 -80
  268. package/skills/persona-router/SKILL.md +0 -52
  269. package/skills/persona-router/references/routing-details.md +0 -98
  270. /package/skills/massa-ai/references/{rfc → create-rfc}/ATTRIBUTION.md +0 -0
  271. /package/skills/massa-ai/references/{rfc → create-rfc}/document-contract.md +0 -0
  272. /package/skills/massa-ai/references/{rfc → create-rfc}/quality-and-lifecycle.md +0 -0
  273. /package/skills/massa-ai/references/{tdd → create-tdd}/document-contract.md +0 -0
  274. /package/skills/massa-ai/references/{ticket → create-ticket}/atlassian-fix.md +0 -0
  275. /package/skills/massa-ai/references/{ticket → create-ticket}/templates-and-quality.md +0 -0
@@ -0,0 +1,101 @@
1
+ ---
2
+ name: test-engineer
3
+ description: Testing agent. Plan unit, integration, edge-case, negative-scenario, and acceptance-coverage tests, run the findings-only tests audit lens, and implement test fixes from a saved tests audit report. Mode is selected by the capability packet (plan, audit, or fix). Audit mode writes nothing; plan mode is read-only unless explicitly scoped to write test files; fix mode writes only test files, always with a disjoint write set. Focuses only on testing; no production code changes outside test files.
4
+ model: sonnet
5
+ effort: high
6
+ ---
7
+ <!-- massa-ai-owned: true -->
8
+ # Test Engineer Agent Skill
9
+
10
+ ## Mission
11
+ Make a test suite catch the five distinct error classes it must cover — business-logic errors, code no test touched, hardcoded-example brittleness, built-the-wrong-thing, and drift over time — by planning the tests, auditing the ones that exist, and implementing test fixes.
12
+
13
+ ## Responsibilities
14
+ - Run exactly one mode per dispatch, selected by the packet `mode` field: `plan`, `audit`, or `fix`.
15
+ - Map acceptance coverage to spec criteria.
16
+ - Design variation/property-style test cases — vary inputs beyond the fixture example (bounds, parameter changes) — technique-level, library-neutral.
17
+
18
+ ## Restrictions
19
+ - Unknown `mode`: return `Blocked` naming the valid modes `plan`, `audit`, `fix`; a missing `mode` takes the default in Inputs.
20
+ - Focus only on testing.
21
+ - No production code changes outside test files.
22
+ - Write only in `fix` mode (or `plan` mode when explicitly scoped to write test files), always with a disjoint write set (same constraint as `builder`); `audit` mode writes nothing.
23
+ - Never weaken, skip, or delete an existing test assertion to make a suite pass.
24
+ - Never load the `massa-ai` router skill; the dispatching workflow owns routing.
25
+
26
+ ## Inputs
27
+ - `mode`: `plan` | `audit` | `fix` (defaults to `plan`).
28
+ - `lens`: `audit` mode only — one of `tests` (the single lens this charter runs; optional).
29
+ - `scope`: the feature, module, spec, audit target, or saved-report findings to handle.
30
+ - `inputs`: acceptance criteria, recalled facts, existing test conventions, the saved tests audit report (`fix` mode).
31
+ - `permissions`: read-only default; write test files only when explicitly scoped + disjoint, and never in `audit` mode.
32
+ - `sensors`: test runner commands, coverage tools.
33
+
34
+ ## Modes
35
+
36
+ ### Mode: `plan`
37
+ Testing strategy before or after implementation.
38
+
39
+ - Define unit test cases for core logic and integration test cases for boundaries.
40
+ - Identify edge cases and negative scenarios.
41
+ - Produce a test plan aligned with acceptance criteria.
42
+
43
+ Output:
44
+ - Status: Complete | Partial | Blocked
45
+ - Scope: test plan or test files written
46
+ - Evidence: test commands, coverage output, acceptance-criteria mapping
47
+ - Findings: test plan (unit, integration, edge, negative, acceptance)
48
+ - Risks and skipped checks
49
+ - Exact next step
50
+
51
+ ### Mode: `audit`
52
+ Findings-only tests lens: coverage, regression protection, assertion quality, fixture reliability, variation, and missing deterministic sensors in a concrete target. Shares `references/audit-scope.md` (scope rules) and `references/audit-report-io.md` (report format) with every audit lens; per-lens reference `workflows/tests/tests-audit.md`. Read-only; no fix actions are taken.
53
+
54
+ Output:
55
+ - Status: Complete | Partial | Blocked
56
+ - Scope: area audited + tests lens
57
+ - Evidence: `path:line` pointers, test-run and coverage results
58
+ - Findings: ranked list (severity, location, problem, suggestion) in the project audit-report format
59
+ - Risks and skipped checks
60
+ - Exact next step
61
+
62
+ ### Mode: `fix`
63
+ Implement the confirmed findings of a saved tests audit report inside test files only, per `workflows/tests/tests-fix.md`.
64
+
65
+ Output:
66
+ - Status: Complete | Partial | Blocked
67
+ - Scope: test files changed, per finding ID
68
+ - Evidence: test commands and results, proof each new or changed test fails without the behavior it guards
69
+ - Findings: per-finding implementation summary
70
+ - Risks and skipped checks
71
+ - Exact next step
72
+
73
+ ## Invocation
74
+ ### Use when
75
+ - A workflow needs a test strategy before or after implementation, or acceptance criteria need coverage mapping (`plan`).
76
+ - A workflow needs a findings-only tests audit (`audit`).
77
+ - The `tests-fix` workflow closes saved tests audit findings (`fix`).
78
+ - The user asks for a test plan or test cases.
79
+
80
+ ### Do not use when
81
+ - No acceptance criteria, spec, or audit report exists.
82
+ - The task is a docs-only change with no testable behavior.
83
+ - The fix needs production code changes (route to `builder`).
84
+
85
+ ## massa-ai Integration
86
+ - Context Firewall: summarize test output; return the plan, coverage map, or findings, not raw logs.
87
+ - Verification Ladder: behavioral (tests) and file-integrity (no validation assets weakened).
88
+ - Massa-ai Memory: suggest durable test-pattern memories only when a testing convention is established; main agent persists.
89
+ - Synapse: none (test work is not a repeated-search task).
90
+ - References (paths relative to the `massa-ai` skill directory): `references/verification-ladder.md`, `references/code-annotation.md`, `references/root-cause-scripts.md`, `references/audit-scope.md`, `references/audit-report-io.md`.
91
+
92
+ ## Validation Sensors
93
+ - Every acceptance criterion maps to at least one test case.
94
+ - Edge cases and negative scenarios are enumerated.
95
+ - Test runner commands are named.
96
+ - `audit`: every finding has a `path:line` pointer and follows `references/audit-report-io.md`; no file written.
97
+ - `fix`: the diff stays inside test files and the assigned write set; no validation asset weakened.
98
+
99
+ ## Memory Boundary
100
+ Suggest durable memories only when a reusable testing convention or fixture pattern is established. The main agent persists. Do not persist one-off test plans or audit results.
101
+
@@ -1,13 +1,13 @@
1
1
  ---
2
- description: "Use this workflow to record a finalized or being-finalized architecture decision; route open options to rfc and implementation planning to tdd. — explicit massa-ai 'adr' workflow"
2
+ description: "Use this workflow to record a finalized or being-finalized architecture decision; route open options to create-rfc and implementation planning to create-tdd. — explicit massa-ai 'create-adr' workflow"
3
3
  argument-hint: "[task description]"
4
4
  ---
5
5
  <!-- massa-ai:generated workflow-command -->
6
6
 
7
- Explicit massa-ai workflow invocation: `adr`.
7
+ Explicit massa-ai workflow invocation: `create-adr`.
8
8
 
9
9
  Load the massa-ai router skill if not already loaded (dedupe guard), then
10
- route to workflow `adr` under routing precedence 1 (explicit route) —
10
+ route to workflow `create-adr` under routing precedence 1 (explicit route) —
11
11
  do not reclassify. Pass the following as the task description; if empty,
12
12
  the workflow's own intake gathers it.
13
13
 
@@ -1,13 +1,13 @@
1
1
  ---
2
- description: "Turn the current conversation into a PRD. Use when the user asks to create, synthesize, or convert existing discussion and codebase context into a Product Requirements Document without another interview. Do NOT use for implementation plans, architecture design docs, RFCs, TDDs, or discovery interviews that require new product questioning. — explicit massa-ai 'to-prd' workflow"
2
+ description: "Turn the current conversation into a PRD. Use when the user asks to create, synthesize, or convert existing discussion and codebase context into a Product Requirements Document without another interview. Do NOT use for implementation plans, architecture design docs, RFCs, TDDs, or discovery interviews that require new product questioning. — explicit massa-ai 'create-prd' workflow"
3
3
  argument-hint: "[task description]"
4
4
  ---
5
5
  <!-- massa-ai:generated workflow-command -->
6
6
 
7
- Explicit massa-ai workflow invocation: `to-prd`.
7
+ Explicit massa-ai workflow invocation: `create-prd`.
8
8
 
9
9
  Load the massa-ai router skill if not already loaded (dedupe guard), then
10
- route to workflow `to-prd` under routing precedence 1 (explicit route) —
10
+ route to workflow `create-prd` under routing precedence 1 (explicit route) —
11
11
  do not reclassify. Pass the following as the task description; if empty,
12
12
  the workflow's own intake gathers it.
13
13
 
@@ -1,13 +1,13 @@
1
1
  ---
2
- description: "Use this workflow when a significant technical, process, product, vendor, tool, or policy decision is still open and stakeholders need a structured proposal before committing. — explicit massa-ai 'rfc' workflow"
2
+ description: "Use this workflow when a significant technical, process, product, vendor, tool, or policy decision is still open and stakeholders need a structured proposal before committing. — explicit massa-ai 'create-rfc' workflow"
3
3
  argument-hint: "[task description]"
4
4
  ---
5
5
  <!-- massa-ai:generated workflow-command -->
6
6
 
7
- Explicit massa-ai workflow invocation: `rfc`.
7
+ Explicit massa-ai workflow invocation: `create-rfc`.
8
8
 
9
9
  Load the massa-ai router skill if not already loaded (dedupe guard), then
10
- route to workflow `rfc` under routing precedence 1 (explicit route) —
10
+ route to workflow `create-rfc` under routing precedence 1 (explicit route) —
11
11
  do not reclassify. Pass the following as the task description; if empty,
12
12
  the workflow's own intake gathers it.
13
13
 
@@ -1,13 +1,13 @@
1
1
  ---
2
- description: "Use this workflow to write a Technical Design Document once one product direction is selected and no unresolved API, data, security, or rollout decision blocks implementation. — explicit massa-ai 'tdd' workflow"
2
+ description: "Use this workflow to write a Technical Design Document once one product direction is selected and no unresolved API, data, security, or rollout decision blocks implementation. — explicit massa-ai 'create-tdd' workflow"
3
3
  argument-hint: "[task description]"
4
4
  ---
5
5
  <!-- massa-ai:generated workflow-command -->
6
6
 
7
- Explicit massa-ai workflow invocation: `tdd`.
7
+ Explicit massa-ai workflow invocation: `create-tdd`.
8
8
 
9
9
  Load the massa-ai router skill if not already loaded (dedupe guard), then
10
- route to workflow `tdd` under routing precedence 1 (explicit route) —
10
+ route to workflow `create-tdd` under routing precedence 1 (explicit route) —
11
11
  do not reclassify. Pass the following as the task description; if empty,
12
12
  the workflow's own intake gathers it.
13
13
 
@@ -1,13 +1,13 @@
1
1
  ---
2
- description: "Use this workflow to draft, review, create, or resume creation of Jira Epics, issues, or sub-tasks through Atlassian MCP, the only tracker and mutation path. — explicit massa-ai 'ticket' workflow"
2
+ description: "Use this workflow to draft, review, create, or resume creation of Jira Epics, issues, or sub-tasks through Atlassian MCP, the only tracker and mutation path. — explicit massa-ai 'create-ticket' workflow"
3
3
  argument-hint: "[task description]"
4
4
  ---
5
5
  <!-- massa-ai:generated workflow-command -->
6
6
 
7
- Explicit massa-ai workflow invocation: `ticket`.
7
+ Explicit massa-ai workflow invocation: `create-ticket`.
8
8
 
9
9
  Load the massa-ai router skill if not already loaded (dedupe guard), then
10
- route to workflow `ticket` under routing precedence 1 (explicit route) —
10
+ route to workflow `create-ticket` under routing precedence 1 (explicit route) —
11
11
  do not reclassify. Pass the following as the task description; if empty,
12
12
  the workflow's own intake gathers it.
13
13
 
@@ -1,13 +1,13 @@
1
1
  ---
2
- description: "Product discovery and brainstorming workflow — act as a sharp product thinking partner to explore problem spaces, generate and stress-test ideas, and spar on strategy before anything is spec-ready, ending with a mandatory offer to synthesize the conversation into a PRD via the to-prd workflow. Use when the user wants to brainstorm a product problem, idea, opportunity, or direction with no concrete code target. Do NOT use for codebase understanding (exploration), converting a finished discussion into a PRD (to-prd), or any implementation work. — explicit massa-ai 'discovery' workflow"
2
+ description: "Product discovery and brainstorming workflow — act as a sharp product thinking partner to explore problem spaces, generate and stress-test ideas, and spar on strategy before anything is spec-ready, ending with a mandatory offer to synthesize the conversation into a PRD via the create-prd workflow. Use when the user wants to brainstorm a product problem, idea, opportunity, or direction with no concrete code target. Do NOT use for codebase understanding (exploration), converting a finished discussion into a PRD (create-prd), or any implementation work. — explicit massa-ai 'product-discovery' workflow"
3
3
  argument-hint: "[task description]"
4
4
  ---
5
5
  <!-- massa-ai:generated workflow-command -->
6
6
 
7
- Explicit massa-ai workflow invocation: `discovery`.
7
+ Explicit massa-ai workflow invocation: `product-discovery`.
8
8
 
9
9
  Load the massa-ai router skill if not already loaded (dedupe guard), then
10
- route to workflow `discovery` under routing precedence 1 (explicit route) —
10
+ route to workflow `product-discovery` under routing precedence 1 (explicit route) —
11
11
  do not reclassify. Pass the following as the task description; if empty,
12
12
  the workflow's own intake gathers it.
13
13
 
@@ -227,7 +227,7 @@ function readModelLine(filePath: string): string | null {
227
227
 
228
228
  /**
229
229
  * The ≤2-line session-start drift report (agent-runtime-drift): version
230
- * drift (live bundle vs recorded state), agent drift (active investigator
230
+ * drift (live bundle vs recorded state), agent drift (active code-reviewer
231
231
  * model vs the recorded profile's variant), and the host env override that
232
232
  * nullifies every per-agent model at runtime. Null when every recording
233
233
  * agrees — silent when healthy. Read-only (INV5); every failure degrades to
@@ -253,13 +253,13 @@ export function buildSessionStartDoctorLine(
253
253
 
254
254
  const profile = claude?.modelProfile?.profile;
255
255
  if (typeof profile === "string" && profile) {
256
- const activeModel = readModelLine(path.join(pluginRoot, "agents", "massa-ai-investigator.md"));
256
+ const activeModel = readModelLine(path.join(pluginRoot, "agents", "code-reviewer.md"));
257
257
  const variantModel = readModelLine(
258
- path.join(pluginRoot, "agent-profiles", profile, "massa-ai-investigator.md"),
258
+ path.join(pluginRoot, "agent-profiles", profile, "code-reviewer.md"),
259
259
  );
260
260
  if (activeModel && variantModel && activeModel !== variantModel) {
261
261
  lines.push(
262
- `[massa-ai] agent drift: investigator ${activeModel} vs ${profile} variant ${variantModel} — re-run the profile switch`,
262
+ `[massa-ai] agent drift: code-reviewer ${activeModel} vs ${profile} variant ${variantModel} — re-run the profile switch`,
263
263
  );
264
264
  }
265
265
  }
package/install.sh CHANGED
@@ -350,7 +350,7 @@ NODE
350
350
  # ── Skills bundling (PDO-08, 09 / D3 two-writer ownership) ──────────────────
351
351
  # scripts/install-skills.sh remains the single writer once it has already
352
352
  # claimed this platform (skillsOwner: "repo" in the shared install-state.json).
353
- # This plugin installs its bundled massa-ai/persona-router skills into the
353
+ # This plugin installs its bundled massa-ai/profile/bootstrap skills into the
354
354
  # SAME harness skills directory (~/.claude/skills, not this plugin's cache)
355
355
  # only when that has not happened, mirroring the MCP single-writer precedent
356
356
  # (test-mcp-single-writer.sh). A repo checkout's own --apply always takes
@@ -374,6 +374,44 @@ try {
374
374
  NODE
375
375
  }
376
376
 
377
+ # C4: line 1 is the enumerated owner ("plugin" | "none" — never the raw
378
+ # recorded value, so a hostile multi-line skillsOwner cannot smuggle a name
379
+ # into the list); every further line is a harness skill this plugin recorded
380
+ # as installed and no longer ships. The recorded list is the ownership proof,
381
+ # so an unrecorded directory of the same name is never touched.
382
+ plugin_skills_record() {
383
+ local runner="$1"
384
+ "$runner" - "$HARNESS_STATE_FILE" "$HARNESS_HOST" <<'NODE'
385
+ const fs = require("fs");
386
+ const [, , file, host] = process.argv;
387
+ try {
388
+ const data = JSON.parse(fs.readFileSync(file, "utf8"));
389
+ const rec = data && data.platforms && data.platforms[host];
390
+ const owned = !!rec && rec.skillsOwner === "plugin";
391
+ const current = ["massa-ai", "profile", "bootstrap"];
392
+ const retired = owned && Array.isArray(rec.skills)
393
+ ? rec.skills.filter((s) => typeof s === "string" && /^[a-z0-9][a-z0-9-]*$/.test(s) && !current.includes(s))
394
+ : [];
395
+ process.stdout.write([owned ? "plugin" : "none", ...retired].join("\n"));
396
+ } catch {
397
+ process.stdout.write("none");
398
+ }
399
+ NODE
400
+ }
401
+
402
+ # Removes every retired name in a plugin_skills_record output. The subshell
403
+ # body scopes `set -f` and a newline-only IFS, so no name is ever
404
+ # glob-expanded or split on a space.
405
+ remove_retired_skills() (
406
+ set -f
407
+ IFS=$'\n'
408
+ state_retired_skills="$(printf '%s\n' "$1" | sed 1d)"
409
+ for name in $state_retired_skills; do
410
+ rm -rf "$HARNESS_SKILLS_DIR/$name"
411
+ vecho " - removed retired harness skill $HARNESS_SKILLS_DIR/$name"
412
+ done
413
+ )
414
+
377
415
  install_bundled_skills() {
378
416
  local runner=""
379
417
  if command -v node &>/dev/null; then runner="node"
@@ -389,7 +427,7 @@ install_bundled_skills() {
389
427
  fi
390
428
 
391
429
  local installed=0 name src dest
392
- for name in massa-ai persona-router profile bootstrap; do
430
+ for name in massa-ai profile bootstrap; do
393
431
  src="$SCRIPT_DIR/skills/$name"
394
432
  [[ -d "$src" ]] || continue
395
433
  dest="$HARNESS_SKILLS_DIR/$name"
@@ -404,6 +442,11 @@ install_bundled_skills() {
404
442
  done
405
443
  vecho " + ${installed} harness skills installed to $HARNESS_SKILLS_DIR (plugin-owned)"
406
444
 
445
+ # C4: retired skills go BEFORE the record is rewritten — the recorded list
446
+ # is the only ownership proof, so a removal that fails (set -e aborts here)
447
+ # leaves it in place for the next run to retry.
448
+ remove_retired_skills "$(plugin_skills_record "$runner")"
449
+
407
450
  "$runner" - "$HARNESS_STATE_FILE" "$HARNESS_HOST" "$TARGET" <<'NODE'
408
451
  const fs = require("fs");
409
452
  const path = require("path");
@@ -418,7 +461,8 @@ if (typeof data.platforms !== "object" || data.platforms === null || Array.isArr
418
461
  }
419
462
  data.version = 2;
420
463
  const prev = data.platforms[host];
421
- data.platforms[host] = { root, skillsOwner: "plugin", skills: ["massa-ai", "persona-router", "profile", "bootstrap"] };
464
+ const current = ["massa-ai", "profile", "bootstrap"];
465
+ data.platforms[host] = { root, skillsOwner: "plugin", skills: current };
422
466
  // The whole-record replace must not drop fields a previous successful install
423
467
  // wrote (R2) — re-attach them. modelProfile (T10, MPS-03 round-trip
424
468
  // obligation) is engine-owned; installRoute is installer-owned but written by
@@ -448,26 +492,16 @@ uninstall_bundled_skills() {
448
492
  else return 0
449
493
  fi
450
494
 
451
- # harness_skills_owner collapses to "repo" | "none"; uninstall only ever
452
- # acts on an exact "plugin" record, so query the raw value directly.
453
- local raw_owner
454
- raw_owner="$("$runner" - "$HARNESS_STATE_FILE" "$HARNESS_HOST" <<'NODE'
455
- const fs = require("fs");
456
- const [, , file, host] = process.argv;
457
- try {
458
- const data = JSON.parse(fs.readFileSync(file, "utf8"));
459
- const rec = data && data.platforms && data.platforms[host];
460
- process.stdout.write(rec ? String(rec.skillsOwner) : "none");
461
- } catch {
462
- process.stdout.write("none");
463
- }
464
- NODE
465
- )"
466
- [[ "$raw_owner" == "plugin" ]] && {
495
+ # Line 1 of the record is the enumerated owner; uninstall only ever acts on
496
+ # an exact "plugin" record.
497
+ local record
498
+ record="$(plugin_skills_record "$runner")"
499
+ [[ "${record%%$'\n'*}" == "plugin" ]] && {
467
500
  local name
468
- for name in massa-ai persona-router profile bootstrap; do
501
+ for name in massa-ai profile bootstrap; do
469
502
  rm -rf "$HARNESS_SKILLS_DIR/$name"
470
503
  done
504
+ remove_retired_skills "$record"
471
505
  rmdir "$HARNESS_SKILLS_DIR" 2>/dev/null || true
472
506
  echo " - removed plugin-owned harness skills from $HARNESS_SKILLS_DIR"
473
507
  }
@@ -678,16 +712,20 @@ apply_recorded_profile_after_update() {
678
712
  return 0
679
713
  fi
680
714
  mkdir -p "$install_path/agents"
681
- for f in "$variant_dir/"massa-ai-*.md; do
715
+ for f in "$variant_dir/"*.md; do
682
716
  [[ -f "$f" ]] || continue
683
717
  name="$(basename "$f")"
718
+ if [[ -e "$install_path/agents/$name" || -L "$install_path/agents/$name" ]] && ! is_owned_agent "$install_path/agents/$name"; then
719
+ echo " ⚠ $install_path/agents/$name exists and is not massa-ai-owned — skipped" >&2
720
+ continue
721
+ fi
684
722
  cp "$f" "$install_path/agents/$name"
685
723
  copied=$((copied + 1))
686
724
  done
687
725
  if [[ "$copied" -gt 0 ]]; then
688
726
  vecho " ↷ re-applied recorded model profile '$profile' (${copied} files) to $install_path/agents"
689
727
  else
690
- vecho " ↷ recorded model profile '$profile' variant directory has no massa-ai-*.md files — nothing to re-apply"
728
+ vecho " ↷ recorded model profile '$profile' variant directory has no agent files — nothing to re-apply"
691
729
  fi
692
730
  }
693
731
 
@@ -827,13 +865,49 @@ remove_file_route_artifacts() {
827
865
  done
828
866
  fi
829
867
  if [[ -d "$TARGET/agents" ]]; then
830
- for src in "$TARGET/agents/"massa-ai-*.md; do
831
- [[ -f "$src" ]] || continue
868
+ for src in "$TARGET/agents/"*.md; do
869
+ is_owned_agent "$src" || continue
832
870
  rm -f "$src"
833
871
  done
834
872
  fi
835
873
  }
836
874
 
875
+ # >>> massa-ai agent ownership predicates >>>
876
+ # Byte-identical in every plugin installer and scripts/lib/installer-shared.sh
877
+ # (plugin tarballs cannot source repo-only libs); the TS twin is
878
+ # packages/shared/src/profile-switch/ownership.ts, and
879
+ # scripts/__tests__/agent-ownership-parity.test.ts holds all copies and both
880
+ # languages to identical verdicts. Ownership is a content marker, never a
881
+ # filename; the legacy rule lets an upgrade prune the pre-rename
882
+ # massa-ai-<name> files — exact names only, never an open massa-ai-* glob.
883
+ MASSA_AI_OWNED_MARKER_MD='<!-- massa-ai-owned: true -->'
884
+ MASSA_AI_LEGACY_AGENT_NAMES=" architecture-specialist audit-specialist builder context-curator designer documentation-agent furps-analyst investigator judge meta-judge mobile-specialist navigator plan-critic planner requirements-analyst reviewer test-engineer verification-agent "
885
+ is_legacy_agent() {
886
+ local b="${1##*/}"
887
+ b="${b%.*}"
888
+ [[ "$b" == massa-ai-* && "$MASSA_AI_LEGACY_AGENT_NAMES" == *" ${b#massa-ai-} "* ]]
889
+ }
890
+ has_owned_marker() {
891
+ awk -v m="$MASSA_AI_OWNED_MARKER_MD" 'NR==1{if($0!="---")exit;next} !c&&$0=="---"{c=1;next} c{ok=($0==m);exit} END{exit !ok}' "$1" 2>/dev/null
892
+ }
893
+ is_owned_agent() {
894
+ [[ -f "$1" && ! -L "$1" ]] || return 1
895
+ is_legacy_agent "$1" || has_owned_marker "$1"
896
+ }
897
+ is_owned_agent_toml() {
898
+ [[ -f "$1" && ! -L "$1" ]] || return 1
899
+ [[ "$(head -n1 "$1")" == "# massa-ai-owned" ]]
900
+ }
901
+ is_owned_agent_link() {
902
+ [[ -L "$1" ]] || return 1
903
+ is_legacy_agent "$1" && return 0
904
+ local b="${1##*/}" t
905
+ t="$(readlink "$1")"
906
+ [[ "$t" == */opencode-plugin/agents/"$b" || "$t" == */plugins/massa-ai/agent-profiles/*/"$b" ]] && return 0
907
+ [[ -f "$1" ]] && has_owned_marker "$1"
908
+ }
909
+ # <<< massa-ai agent ownership predicates <<<
910
+
837
911
  # ── Uninstall ───────────────────────────────────────────────────────────────
838
912
  if [[ "$UNINSTALL" -eq 1 ]]; then
839
913
  echo "Uninstalling massa-ai Claude Code plugin (scope: $SCOPE)..."
@@ -856,15 +930,15 @@ if [[ "$UNINSTALL" -eq 1 ]]; then
856
930
  done
857
931
  echo " - removed massa-ai-* commands from $TARGET/commands/"
858
932
  fi
859
- # Remove every massa-ai-owned subagent specialist. All of them are generated
860
- # from skills/agents/*/SKILL.md, so the massa-ai- name prefix is the ownership
861
- # marker; user agents without that prefix are untouched.
933
+ # Remove every massa-ai-owned subagent specialist: the body marker, or a
934
+ # legacy massa-ai-<name> file (is_owned_agent). A user's own agent, even
935
+ # one named like a massa-ai agent, is untouched.
862
936
  if [[ -d "$TARGET/agents" ]]; then
863
- for src in "$TARGET/agents/"massa-ai-*.md; do
864
- [[ -f "$src" ]] || continue
937
+ for src in "$TARGET/agents/"*.md; do
938
+ is_owned_agent "$src" || continue
865
939
  rm -f "$src"
866
940
  done
867
- echo " - removed massa-ai-* subagent specialists from $TARGET/agents/"
941
+ echo " - removed massa-ai-owned subagent specialists from $TARGET/agents/"
868
942
  fi
869
943
  echo ""
870
944
  echo "Done. User hooks, keys, and non-massa-ai agents preserved."
@@ -892,7 +966,7 @@ if [[ "$PLUGIN_ROUTE" -eq 1 ]]; then
892
966
  for src in "$SCRIPT_DIR/commands/"*.md; do
893
967
  [[ -f "$src" ]] && command_count=$((command_count + 1))
894
968
  done
895
- for src in "$SCRIPT_DIR/agents/"massa-ai-*.md; do
969
+ for src in "$SCRIPT_DIR/agents/"*.md; do
896
970
  [[ -f "$src" ]] && specialist_count=$((specialist_count + 1))
897
971
  done
898
972
  remove_file_route_artifacts
@@ -925,8 +999,8 @@ else
925
999
  vecho " - removed retired command $(basename "$f")"
926
1000
  done
927
1001
 
928
- # Subagent specialists (generated from skills/agents/*/SKILL.md, navigator
929
- # included). The massa-ai- name prefix is the ownership marker used by uninstall.
1002
+ # Subagent specialists (generated from skills/agents/*/SKILL.md). Each carries the body ownership marker used by prune and
1003
+ # uninstall; a same-named file the user owns is skipped, never overwritten.
930
1004
  #
931
1005
  # Model-profile re-apply (T8, MPS-04): if a switch previously recorded a
932
1006
  # profile for this host, and the bundle ships that profile's variant, the
@@ -951,9 +1025,13 @@ else
951
1025
  fi
952
1026
  fi
953
1027
 
954
- for src in "$ACTIVE_AGENTS_SRC/"massa-ai-*.md; do
1028
+ for src in "$ACTIVE_AGENTS_SRC/"*.md; do
955
1029
  [[ -f "$src" ]] || continue
956
1030
  name="$(basename "$src")"
1031
+ if [[ -e "$TARGET/agents/$name" || -L "$TARGET/agents/$name" ]] && ! is_owned_agent "$TARGET/agents/$name"; then
1032
+ echo " ⚠ $TARGET/agents/$name exists and is not massa-ai-owned — skipped" >&2
1033
+ continue
1034
+ fi
957
1035
  cp "$src" "$TARGET/agents/$name"
958
1036
  vecho " + $name"
959
1037
  specialist_count=$((specialist_count + 1))
@@ -966,10 +1044,10 @@ else
966
1044
  # model-profile variant) no longer ships. Never prune-then-copy — an
967
1045
  # interrupted run must never leave the user with fewer agents than before.
968
1046
  # Removal population is the destination directory (D2); ownership test is
969
- # the massa-ai- name prefix (install.sh:775-777).
970
- for f in "$TARGET/agents/"massa-ai-*.md; do
971
- [[ -f "$f" ]] || continue
1047
+ # is_owned_agent — so legacy massa-ai-<name> files are pruned on upgrade.
1048
+ for f in "$TARGET/agents/"*.md; do
972
1049
  [[ -f "$ACTIVE_AGENTS_SRC/$(basename "$f")" ]] && continue
1050
+ is_owned_agent "$f" || continue
973
1051
  rm -f "$f"
974
1052
  vecho " - removed retired specialist $(basename "$f")"
975
1053
  done
@@ -977,7 +1055,7 @@ else
977
1055
  install_variant_tree
978
1056
  fi
979
1057
 
980
- # Skills bundling (PDO-08, 09): install massa-ai/persona-router into the
1058
+ # Skills bundling (PDO-08, 09): install massa-ai/profile/bootstrap into the
981
1059
  # shared harness skills directory, unless scripts/install-skills.sh already
982
1060
  # owns it for this platform.
983
1061
  vecho ""
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@massa-ai/claude-plugin",
3
- "version": "1.60.1",
3
+ "version": "1.62.0",
4
4
  "description": "massa-ai plugin for Claude Code — semantic code search, durable memory, symbol graph, and context compression",
5
5
  "files": [
6
6
  "agents",
@@ -4,8 +4,7 @@ description: Write-permitted implementation agent. Implement approved plans by m
4
4
  license: MIT
5
5
  metadata:
6
6
  author: Luiz Massa
7
- version: "1.0.0"
8
- model_tier: standard
7
+ version: "1.1.0"
9
8
  permission: write
10
9
  ---
11
10
 
@@ -25,8 +24,7 @@ Implement an approved plan or task by modifying source code with a disjoint writ
25
24
  - Never perform reviews.
26
25
  - Never generate implementation plans.
27
26
  - Never write outside the assigned disjoint write set.
28
- - Never load the `massa-ai` or `persona-router` routers, and never open a `personas/` prompt file; the dispatching workflow owns routing and persona selection.
29
- - A `persona` supplied in the capability packet shapes emphasis only; these Restrictions win on any conflict.
27
+ - Never load the `massa-ai` router skill; the dispatching workflow owns routing.
30
28
 
31
29
  ## Inputs
32
30
  - `scope`: exact files and modules to modify (disjoint write set).
@@ -51,7 +49,7 @@ Implement an approved plan or task by modifying source code with a disjoint writ
51
49
  ### Do not use when
52
50
  - No plan or task is approved.
53
51
  - The write set overlaps another active agent.
54
- - The task needs architectural decisions (route to architecture-specialist or planner first).
52
+ - The task needs architectural decisions (route to `code-reviewer` in `guide` mode first).
55
53
 
56
54
  ## massa-ai Integration
57
55
  - Context Firewall: summarize diffs and command output; return evidence, not raw dumps.