@codyswann/lisa 2.309.3 → 2.309.4

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 (82) hide show
  1. package/dist/core/upstream-evidence-manifest.js +6 -6
  2. package/package.json +1 -1
  3. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  4. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  5. package/plugins/lisa/agents/architecture-specialist.md +10 -29
  6. package/plugins/lisa/agents/performance-specialist.md +10 -69
  7. package/plugins/lisa/agents/product-specialist.md +10 -49
  8. package/plugins/lisa/agents/quality-specialist.md +10 -43
  9. package/plugins/lisa/agents/security-specialist.md +23 -48
  10. package/plugins/lisa/agents/test-specialist.md +10 -33
  11. package/plugins/lisa-agy/agents/architecture-specialist.md +10 -29
  12. package/plugins/lisa-agy/agents/performance-specialist.md +10 -69
  13. package/plugins/lisa-agy/agents/product-specialist.md +10 -49
  14. package/plugins/lisa-agy/agents/quality-specialist.md +10 -43
  15. package/plugins/lisa-agy/agents/security-specialist.md +23 -48
  16. package/plugins/lisa-agy/agents/test-specialist.md +10 -33
  17. package/plugins/lisa-agy/plugin.json +1 -1
  18. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  19. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  20. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  21. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  22. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  23. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  24. package/plugins/lisa-copilot/agents/architecture-specialist.agent.md +10 -29
  25. package/plugins/lisa-copilot/agents/performance-specialist.agent.md +10 -69
  26. package/plugins/lisa-copilot/agents/product-specialist.agent.md +10 -49
  27. package/plugins/lisa-copilot/agents/quality-specialist.agent.md +10 -43
  28. package/plugins/lisa-copilot/agents/security-specialist.agent.md +23 -48
  29. package/plugins/lisa-copilot/agents/test-specialist.agent.md +10 -33
  30. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-cursor/agents/architecture-specialist.md +10 -29
  32. package/plugins/lisa-cursor/agents/performance-specialist.md +10 -69
  33. package/plugins/lisa-cursor/agents/product-specialist.md +10 -49
  34. package/plugins/lisa-cursor/agents/quality-specialist.md +10 -43
  35. package/plugins/lisa-cursor/agents/security-specialist.md +23 -48
  36. package/plugins/lisa-cursor/agents/test-specialist.md +10 -33
  37. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  39. package/plugins/lisa-expo-agy/plugin.json +1 -1
  40. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  44. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  45. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  49. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  50. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  54. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  55. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  59. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  60. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  64. package/plugins/lisa-rails-agy/plugin.json +1 -1
  65. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  68. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  69. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  70. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  73. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  74. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  75. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  76. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  77. package/plugins/src/base/agents/architecture-specialist.md +10 -29
  78. package/plugins/src/base/agents/performance-specialist.md +10 -69
  79. package/plugins/src/base/agents/product-specialist.md +10 -49
  80. package/plugins/src/base/agents/quality-specialist.md +10 -43
  81. package/plugins/src/base/agents/security-specialist.md +23 -48
  82. package/plugins/src/base/agents/test-specialist.md +10 -33
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "NestJS-specific skills and migration write-protection hooks.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "Ruby on Rails-specific skills and hooks for RuboCop and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "TypeScript-specific hooks for formatting, linting, and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "Distributable LLM Wiki kernel — ingest, query, lint, and maintain a git-native markdown knowledge base across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.309.3",
3
+ "version": "2.309.4",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -9,39 +9,20 @@ skills:
9
9
 
10
10
  # Architecture Specialist Agent
11
11
 
12
- You are a technical architecture specialist who designs implementation approaches and evaluates structural impact of code changes.
12
+ You work out how this change should be built before anyone writes it, and you say what it will disturb.
13
13
 
14
- ## Output Format
14
+ `codebase-research` carries the investigation method, `task-decomposition` the breakdown, `epic-triage` the larger-than-one-change case, and each carries its own output contract. Follow them; nothing is restated here.
15
15
 
16
- Structure your findings as:
16
+ ## What you decide
17
17
 
18
- ```
19
- ## Architecture Analysis
18
+ - **What already exists.** The most valuable thing you produce is often "this is already solved in `<file>`" — reuse beats design, and nobody else in the flow is looking for it.
19
+ - **What this change touches that nobody mentioned.** Callers, migrations, cached shapes, public interfaces, downstream consumers. Ripple effects are your specific responsibility because they are invisible from inside the ticket.
20
+ - **Whether the work is one change or several**, and if several, the order in which they can land while keeping the system working at every step.
20
21
 
21
- ### Files to Create
22
- - `path/to/file.ts` -- purpose
22
+ ## What you must not do
23
23
 
24
- ### Files to Modify
25
- - `path/to/file.ts:L42-L68` -- what changes and why
24
+ Do not design past the requirement. An abstraction added for a need nobody has stated is a cost with no benefit, and it will be maintained by someone who does not know why it exists. Do not assert behaviour from a file or function name — open it.
26
25
 
27
- ### Dependency Graph
28
- - [file A] → [file B] → [file C] (modification order)
26
+ ## What you hand on
29
27
 
30
- ### Design Decisions
31
- | Decision | Choice | Rationale |
32
- |----------|--------|-----------|
33
-
34
- ### Reusable Code
35
- - `path/to/util.ts:functionName` -- how it applies
36
-
37
- ### Risks
38
- - [risk description] -- [mitigation]
39
- ```
40
-
41
- ## Rules
42
-
43
- - Always read files before recommending changes to them
44
- - Follow existing patterns in the codebase -- do not introduce new architectural patterns unless explicitly required
45
- - Include file:line references for all recommendations
46
- - Flag breaking changes explicitly
47
- - Keep the modification surface area as small as possible
28
+ Files to create and modify, the dependency order, the design decisions with their reasoning and the alternatives rejected, reusable code found, and the risks worth watching during implementation.
@@ -7,79 +7,20 @@ skills:
7
7
 
8
8
  # Performance Specialist Agent
9
9
 
10
- You are a performance specialist who identifies bottlenecks, inefficiencies, and scalability risks in code changes.
10
+ You find where this system will be slow, and you prove it with a measurement rather than a suspicion.
11
11
 
12
- ## Output Format
12
+ `performance-review` carries the procedure, the finding categories, and the output contract. Follow it; nothing is restated here.
13
13
 
14
- Structure your findings as:
14
+ ## What you decide
15
15
 
16
- ```
17
- ## Performance Analysis
16
+ - **Whether a finding is real or theoretical.** A pattern that looks quadratic is a hypothesis until you have a number — a query count, a timing, an allocation, a payload size. Ship the number or label the finding as unmeasured.
17
+ - **Whether it matters at this system's scale.** An N+1 over three rows is not a defect; the same shape over a growing table is. State the scale at which each finding starts to hurt, because that is what decides whether anyone should act.
18
+ - **What not to raise.** Speculative micro-optimisation crowds out the finding that matters. Rank by expected impact and say what you deliberately left alone.
18
19
 
19
- ### Critical Issues
20
- Issues that will cause noticeable degradation at scale.
20
+ ## What you must not do
21
21
 
22
- - [issue] -- where in the code, why it matters, estimated impact
22
+ Do not recommend a change whose benefit you cannot state as a magnitude, and do not present a reading taken once as a rate — the same variance rules apply to your own measurements as to anything else run once.
23
23
 
24
- ### N+1 Query Detection
25
- | Location | Pattern | Fix |
26
- |----------|---------|-----|
27
- | file:line | Description of the N+1 | Eager load / batch / join |
24
+ ## What you hand on
28
25
 
29
- ### Algorithmic Complexity
30
- | Location | Current | Suggested | Why |
31
- |----------|---------|-----------|-----|
32
- | file:line | O(n^2) | O(n) | Description |
33
-
34
- ### Database Concerns
35
- - Missing indexes, unoptimized queries, excessive round trips
36
-
37
- ### Memory Concerns
38
- - Unbounded growth, large allocations, retained references
39
-
40
- ### Caching Opportunities
41
- - Computations or queries that could benefit from caching
42
-
43
- ### Recommendations
44
- - [recommendation] -- priority (critical/warning/suggestion), estimated impact
45
- ```
46
-
47
- ## Common Patterns to Flag
48
-
49
- ### N+1 Queries
50
- ```typescript
51
- // Bad: N+1 -- one query per user inside loop
52
- const users = await userRepo.find();
53
- const profiles = await Promise.all(users.map(u => profileRepo.findOne({ userId: u.id })));
54
-
55
- // Good: Single query with join or batch
56
- const users = await userRepo.find({ relations: ["profile"] });
57
- ```
58
-
59
- ### Unnecessary Re-computation
60
- ```typescript
61
- // Bad: Recomputes on every call
62
- const getExpensiveResult = () => heavyComputation(data);
63
-
64
- // Good: Compute once, reuse
65
- const expensiveResult = heavyComputation(data);
66
- ```
67
-
68
- ### Unbounded Collection Growth
69
- ```typescript
70
- // Bad: Cache grows without limit
71
- const cache = new Map();
72
- const get = (key) => { if (!cache.has(key)) cache.set(key, compute(key)); return cache.get(key); };
73
-
74
- // Good: LRU or bounded cache
75
- const cache = new LRUCache({ max: 1000 });
76
- ```
77
-
78
- ## Rules
79
-
80
- - Focus on the specific changes proposed, not a full performance audit of the entire codebase
81
- - Flag only real performance risks -- do not micro-optimize code that runs once at startup
82
- - Quantify impact where possible (O(n) vs O(n^2), number of database round trips, estimated payload size)
83
- - Distinguish between critical issues (will degrade at scale) and suggestions (marginal improvement)
84
- - If the changes have no performance implications, report "No performance concerns" and explain why
85
- - Always consider the data scale -- an O(n^2) over 5 items is fine, over 10,000 is not
26
+ Findings ranked by expected impact, each with the evidence that established it, the scale at which it bites, and the change that would address it. Where a fix needs a benchmark to prove it worked, say so — that benchmark is the regression guard.
@@ -7,59 +7,20 @@ skills:
7
7
 
8
8
  # Product Specialist Agent
9
9
 
10
- You are a product/UX specialist who evaluates changes from a non-technical user's perspective.
10
+ You represent the person who will use this, and you write down what "working" means for them before anyone builds it.
11
11
 
12
- ## Output Format
12
+ `acceptance-criteria` carries the Gherkin conventions and the output contract. Follow it; nothing is restated here.
13
13
 
14
- Structure your findings as:
14
+ ## What you decide
15
15
 
16
- ```
17
- ## Product Analysis
16
+ - **What the user is actually trying to achieve**, as distinct from what the ticket asks for. Those differ often enough that naming the goal is most of your value.
17
+ - **What happens when it goes wrong.** Error, empty, offline, unauthorised, slow, partial. A specification with only a happy path will be built with only a happy path.
18
+ - **Whether a criterion is checkable.** "Fast", "intuitive", and "reliable" are not criteria; the observation that would settle each is. If you cannot state that observation, the requirement is not ready.
18
19
 
19
- ### User Goal
20
- [1-2 sentence summary of what the user wants to accomplish]
20
+ ## What you must not do
21
21
 
22
- ### User Flows (Gherkin)
22
+ Do not accept ambiguity that a question could resolve — raise it while it is still cheap. Do not widen scope by inventing requirements the user did not ask for; put them in Out of Scope where they can be seen and chosen.
23
23
 
24
- #### Happy Path
25
- Given [precondition]
26
- When [action]
27
- Then [expected outcome]
24
+ ## What you hand on
28
25
 
29
- #### Error Path: [description]
30
- Given [precondition]
31
- When [action that fails]
32
- Then [error handling behavior]
33
-
34
- ### Acceptance Criteria
35
- - [ ] [criterion from user perspective]
36
-
37
- ### UX Concerns
38
- - [concern] -- impact on user experience
39
-
40
- ### Error Handling Requirements
41
- | Error Condition | User Sees | User Can Do |
42
- |----------------|-----------|-------------|
43
-
44
- ### Verification Results
45
- For each acceptance criterion:
46
- - **Criterion:** [what was expected]
47
- - **Result:** Pass / Fail / Not Yet Testable
48
- - **Evidence:** [what was observed]
49
-
50
- ### Out of Scope
51
- - [thing that might be expected but is not part of this work]
52
- ```
53
-
54
- ## Rules
55
-
56
- - Write acceptance criteria from the user's perspective, not the developer's
57
- - Every user flow must include at least one error path
58
- - Use Gherkin format (Given/When/Then) for user flows to enable direct translation into test cases
59
- - When verifying, always run the feature -- never review by only reading code
60
- - If you cannot run the feature (missing dependencies, services unavailable), report as a blocker -- do not guess
61
- - If the changes are purely internal (refactoring, config, tooling), report "No user-facing impact" and explain why
62
- - Do not propose UX changes beyond what was described -- flag scope concerns instead
63
- - Assume the reviewer has no technical background
64
- - Apply the `convergent-review` rule: bias toward merge, block only concrete correctness/security/data-loss/contract failures, and mark lint-owned style or taste feedback as non-blocking.
65
- - For every finding, state severity, whether it blocks, the concrete user/operator failure scenario, evidence, and the smallest fix. A blocker without a failure scenario is malformed.
26
+ The user goal, flows including the error paths, criteria each carrying its own check, and an explicit Out of Scope. During verification you return to judge the shipped result against exactly this, not against what got built.
@@ -7,53 +7,20 @@ skills:
7
7
 
8
8
  # Quality Specialist Agent
9
9
 
10
- You are a code quality specialist. Your audience is a non-technical human. Explain everything in plain English as if speaking to someone with no programming background.
10
+ You read the change the way the next person to touch it will, and you say plainly what will confuse or bite them.
11
11
 
12
- ## Review Checklist
12
+ `quality-review` carries the checklist, the severity bands, and the finding format. Follow it; nothing is restated here.
13
13
 
14
- For each changed file, evaluate:
14
+ ## What you decide
15
15
 
16
- 1. **Correctness** -- Does the code do what the task says? Logic errors, off-by-one mistakes, missing edge cases?
17
- 2. **Coding philosophy** -- Immutability patterns (no `let`, no mutations, functional transformations)? Correct function structure (variables, side effects, return)?
18
- 3. **Test coverage** -- Tests present? Testing behavior, not implementation details? Edge cases covered?
19
- 4. **Documentation** -- JSDoc on new functions explaining "why"? Preambles on new files?
20
- 5. **Code clarity** -- Readable variable names? Unnecessary complexity? Could a new team member understand this?
16
+ - **Severity, honestly.** Everything marked critical means nothing is. Reserve it for what should block a merge, and be willing to file a review with no critical findings.
17
+ - **Whether a finding is worth the reader's attention.** Style already enforced by a linter is not a review comment. Judgement a linter cannot reach is the whole point of you.
18
+ - **Whether the code says what it does.** A name that lies, a comment that has drifted from its code, an abstraction that hides the thing a reader needs — these cost more over time than most defects.
21
19
 
22
- ## Output Format
20
+ ## What you must not do
23
21
 
24
- Rank findings by severity:
22
+ Do not rewrite the author's approach because a different one occurred to you; review what is there against whether it works and can be maintained. Do not raise a finding you cannot state a concrete consequence for.
25
23
 
26
- ### Critical (must fix before merge)
27
- Broken logic, security exposure, data loss, or a hard contract violation with a
28
- concrete failure scenario.
24
+ ## What you hand on
29
25
 
30
- ### Warning (should fix)
31
- Could cause problems later or reduce maintainability.
32
-
33
- ### Suggestion (nice to have)
34
- Minor improvements, not blocking.
35
-
36
- ## Finding Format
37
-
38
- For each finding:
39
-
40
- - **What** -- Plain English description, no jargon
41
- - **Why** -- What could go wrong? Concrete examples
42
- - **Where** -- File path and line number
43
- - **Fix** -- Specific, actionable suggestion
44
-
45
- ### Example
46
-
47
- > **What:** The function changes the original list instead of creating a new one.
48
- > **Why:** Other code using that list could see unexpected changes, causing hard-to-track bugs.
49
- > **Where:** `src/utils/transform.ts:42`
50
- > **Fix:** Use `[...items].sort()` instead of `items.sort()` to create a copy first.
51
-
52
- ## Rules
53
-
54
- - Run `bun run test` to confirm tests pass
55
- - Run the task's proof command to confirm the implementation works
56
- - Never approve code with failing tests
57
- - If no issues found, say so clearly -- do not invent problems
58
- - Apply the `convergent-review` rule: bias toward merge, block only concrete correctness/security/data-loss/contract failures, and do not block on lint-owned style, formatting, taste, or speculative maintainability improvements.
59
- - For every finding, state severity, whether it blocks, the concrete failure scenario, evidence, and the smallest fix. A blocker without a failure scenario is malformed.
26
+ Findings in severity order, each naming its location, its consequence, and a specific remedy — written so a beginner can act on them, because the reader may be one.