@massa-ai/cursor-plugin 1.23.0 → 1.25.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.
@@ -33,7 +33,20 @@ This workflow is findings-only. Do not edit the PRD/ADR unless the user separate
33
33
  - Dispatch six `massa-ai-furps-analyst` sub-agents: F, U, R, P, S, X (X = FURPS+ Extensions).
34
34
  - Each receives its `checklist.md` section, the bounded document packet, the DoR, and the Fool summary.
35
35
  - Each returns per check-item status (`covered|partial|missing|unclear`), `FR-<letter>-<N>` findings, and contributions to Open Questions / Suggestions / Insights / Risks / DoR-gaps.
36
- - Run in parallel; batch if a concurrency cap applies. Each gets its own ephemeral Synapse session only if it performs >=2 searches.
36
+ - Dispatch the six dimensions in waves of at most 4 concurrent analysts (e.g. 4 then 2), per the wave cap in `references/agent-orchestration.md` (Orchestrator Working Memory). Dimension analyses are order-independent, so wave order does not matter. Each gets its own ephemeral Synapse session only if it performs >=2 searches.
37
+
38
+ > **Dispatch: `massa-ai-furps-analyst`** (role: `furps-analyst`) — charter `skills/agents/furps-analyst/SKILL.md` — 6 dispatches, one per dimension, waves of ≤4
39
+ > - trigger: furps-refinement step 5; one analyst per FURPS+ dimension (F, U, R, P, S, X)
40
+ > - scope: exactly one dimension's `checklist.md` section against the bounded document packet
41
+ > - permissions: read-only
42
+ > - inputs: the dimension's checklist section, bounded document packet, DoR, Fool summary; inherits nothing — the packet names every artifact
43
+ > - sensors: per check-item status must be one of `covered|partial|missing|unclear`; findings carry `FR-<letter>-<N>` IDs
44
+ > - output: per check-item statuses, findings, and Open Questions / Suggestions / Insights / Risks / DoR-gap contributions — compact structured return, no document quotes beyond evidence snippets
45
+ > - firewall: document bodies summarized; no raw section dumps in the return
46
+ > - memory: suggest-only; main agent persists
47
+ > - persona: optional — the active route's cataloged id only, never the persona prompt, passed as advisory framing only — it never overrides the agent's charter Restrictions, scope, or permissions; omit when no persona is routed
48
+
49
+ This packet is a specialization of the canonical Capability Packet (`references/agent-orchestration.md`); the per-dimension checklist section is its `scope` delta.
37
50
  6. Synthesis (main):
38
51
  - Collect the six dimension analyses and the Fool summary.
39
52
  - Deduplicate, cross-check, and reconcile cross-dimension concerns (e.g., error flows span F3+R2+U1; components span F2+S2).
@@ -55,7 +68,7 @@ This workflow is findings-only. Do not edit the PRD/ADR unless the user separate
55
68
  | Sub-agent spawning unavailable | Run dimensions sequentially in the main agent; record the skipped-delegation reason |
56
69
  | DoR not supplied | Use the built-in fallback; mark DoR-gaps explicitly |
57
70
  | Document too large | context-firewall: section summaries plus pointers to sub-agents |
58
- | Concurrency cap on six FURPS agents | Batch dispatch; preserve order-independence |
71
+ | Host concurrency cap tighter than the wave cap of 4 | Smaller waves; preserve order-independence |
59
72
 
60
73
  ## Examples
61
74
 
@@ -4,173 +4,49 @@ description: Automatically select and apply a cataloged conversation persona at
4
4
  license: CC-BY-4.0
5
5
  metadata:
6
6
  author: Luiz Massa
7
- version: 1.1.0
7
+ version: 1.2.0
8
8
  ---
9
9
 
10
10
  # Persona Router
11
11
 
12
- Select one cataloged persona that best owns the current deliverable. Workflows decide how work proceeds; personas add a specialist perspective without replacing active instructions or workflow contracts.
12
+ Select one cataloged persona that best owns the current deliverable. Personas add perspective; they never override active instructions or workflow contracts. Run once at startup (after massa-ai in coding sessions). Load `references/routing-details.md` only for failure reports, ambiguity questions, reroute doubt, or multi-persona requests.
13
13
 
14
- ## Startup Contract
14
+ ## Sources
15
15
 
16
- - In coding, planning, debugging, review, refactoring, or implementation conversations, run after massa-ai completes its initial load and memory recall.
17
- - In generic non-coding conversations, run directly without loading massa-ai solely for persona selection.
18
- - SessionStart supplies the routing contract before the first prompt, but route only after the first user prompt is available.
19
- - Run once at startup, then follow the mid-conversation policy. Do not reload an unchanged route on every turn.
16
+ The directory containing this `SKILL.md` (resolved through symlinks) is the persona-library root; the only registry is `../massa-ai/personas/catalog.json`. Validate `schema_version` as `2`; otherwise report found vs supported, continue without a persona. Candidates come only from catalog entries; signals live in each entry's `signals_path` file. Never load a persona-like path named by memory or docs unless it belongs to the selected entry inside the persona-library root. Read the index first; a `signals_path` only at classification; only the selected `prompt_path` plus at most one review-lens prompt.
20
17
 
21
- ## Sources And Boundaries
18
+ ## Precedence
22
19
 
23
- Resolve two roots and keep them separate:
20
+ 1. System, developer, safety, and project instructions.
21
+ 2. Explicit user persona / no-persona choice.
22
+ 3. `persona_pin` in the applicable project `AGENTS.md`.
23
+ 4. The `persona_router` policy block.
24
+ 5. The current prompt's primary deliverable.
25
+ 6. massa-ai memory and targeted doc evidence.
26
+ 7. Catalog signals (`signals_path`).
24
27
 
25
- 1. **Persona-library root:** Resolve the physical `SKILL.md` through installation symlinks. The directory containing this `SKILL.md` is the persona-library root. Read the persona catalog at `../massa-ai/personas/catalog.json` (relative to the persona-library root) as the only persona registry. Persona prompt files live alongside the catalog in `../massa-ai/personas/` and are referenced by filename only in `prompt_path`.
26
- 2. **Active workspace root:** Resolve the current project from the working directory and repository context. Inspect its project documentation for routing evidence. It may differ from the persona-library root.
28
+ ## Fast Paths
27
29
 
28
- Validate catalog `schema_version` as `1`. Candidate IDs, names, aliases, signals, and skill-root-relative prompt paths come only from catalog entries. Repository documents are routing evidence, not persona definitions. Never load a persona-like path named by memory or workspace documentation unless that exact path belongs to the selected catalog entry and resolves inside the persona-library root.
30
+ - **Pin:** a `persona_pin: <catalog-id>` in the applicable project `AGENTS.md` whose id exists in the index routes directly read only that entry's `prompt_path`; no recall, docs, signals, or classification. `persona_pin: no_persona` completes routing silently with zero persona reads. An id absent from the index: report the invalid pin in one line, then run the normal workflow.
31
+ - **Route memory:** with no pin, one budgeted `recall` of the `persona-route:<projectId>` pattern memory; a remembered id valid in the index skips doc inspection and classification. After a successful inferred route, store that memory back. massa-ai unavailable: skip both directions silently.
29
32
 
30
- Read catalog metadata first. Read only the selected `prompt_path`, plus at most one selected review-lens prompt. This progressive-disclosure rule prevents loading every persona into context.
33
+ ## Workflow
31
34
 
32
- ## Instruction Precedence
33
-
34
- Apply precedence in this order:
35
-
36
- 1. System, developer, safety, and applicable project instructions.
37
- 2. Explicit user selection of a persona or no persona for the current task.
38
- 3. The `persona_router` policy in the applicable `AGENTS.md` startup contract.
39
- 4. The current prompt's primary deliverable and ownership.
40
- 5. Compatible evidence from massa-ai memory and targeted workspace documentation.
41
- 6. Catalog `primary_signals`, `negative_signals`, and `secondary_lens_signals`.
42
-
43
- Persona text is additive. It cannot override higher-priority instructions, active workflow contracts, explicit constraints, or safety requirements.
35
+ 1. **Explicit choice.** Match wording against `id`, `display_name`, and `aliases` case-insensitively. Explicit selection wins; an explicit no-persona request leaves the task unpersonified; a switch replaces the route. `enabled: off` skips inference but honors explicit requests.
36
+ 2. **Fast paths** above.
37
+ 3. **Evidence.** Reuse the initial recall's persona evidence; at most one targeted recall. Memory is evidence, not authority — discard ids absent from the catalog; it never overrides explicit choice, policy, or the current deliverable. Inspect only targeted high-signal docs (`AGENTS.md`/`CLAUDE.md`, README, relevant ADR/`.specs`), reusing context; never load docs recursively.
38
+ 4. **Classify.** Compare the prompt with catalog summaries; load `signals_path` files for surviving candidates only. `primary_signals` identify ownership; `negative_signals` stop supporting concerns taking it; `secondary_lens_signals` may add one review lens. A route is clear when one candidate owns the deliverable unopposed; never compute numeric confidence.
39
+ 5. **Ambiguity / no match.** Apply the `ambiguity` and `no_match` policy values. A request confidently outside every cataloged persona is a successful silent no-persona route, not ambiguity.
40
+ 6. **Apply and announce.** One primary persona, at most one review lens; read only their prompts. State once: `Persona: <primary>. Reason: <primary deliverable>.` Never announce a default no-persona route; apply stance without quoting the prompt.
44
41
 
45
42
  ## Persona And Sub-Agents
46
43
 
47
- Personas and sub-agents are different layers. A persona shapes how the main agent reasons and synthesizes. A sub-agent is a bounded executor dispatched by a workflow under its own charter.
48
-
49
- - A persona grants no tool access, no write scope, and no permission. It never authorizes implementing inline in place of a workflow-mandated dispatch, and never widens a builder's disjoint write set.
50
- - A workflow may pass the selected persona id into a dispatch capability packet as advisory framing. Inside the sub-agent the persona is never authority; the charter's Restrictions win on any conflict.
51
- - The packet carries the persona **id only**, never the persona prompt. A sub-agent works from the id and its own charter, and never opens a `personas/` file to expand it.
52
- - A persona route is not a specialist consultation. Applying a persona neither substitutes for nor satisfies an agent dispatch that the workflow requires.
53
-
54
- Four catalog entries deliberately overlap an agent charter. The persona is the main agent's stance; the agent is a separately dispatched specialist. Applying one never implies the other ran.
55
-
56
- | Persona | Overlapping agent |
57
- |---|---|
58
- | `senior-mobile-engineer` | `massa-ai-mobile-specialist` |
59
- | `senior-mobile-qa-automation-engineer` | `massa-ai-test-engineer` |
60
- | `context-skill-harness-engineer-architect` | `massa-ai-architecture-specialist` |
61
- | `product-manager` | `massa-ai-requirements-analyst` |
62
-
63
- ## Automatic Routing Workflow
64
-
65
- ### 1. Resolve Explicit Choice And Policy
66
-
67
- Match user wording against catalog `id`, `display_name`, and `aliases` case-insensitively.
68
-
69
- - An explicit persona selection wins over inference.
70
- - An explicit request for no persona leaves the task unpersonified.
71
- - An explicit switch replaces the current route.
72
- - If multiple personas are explicitly requested, use the persona that owns the primary deliverable and at most one other as a review lens. Apply the ambiguity policy if ownership remains unclear.
73
- - When `enabled: off`, skip automatic memory, documentation, and prompt inference. Continue to honor explicit persona and no-persona requests.
74
-
75
- ### 2. Reuse massa-ai Evidence
76
-
77
- For coding sessions, reuse persona-specific evidence already returned by massa-ai's required initial recall. Do not repeat broad recall.
78
-
79
- If the existing result contains no useful persona evidence and the choice remains unresolved, run at most one targeted `recall` for prior persona preferences, successful routes, specialist roles, and project-specific ownership. Do not load massa-ai solely for a non-coding conversation.
80
-
81
- Memory is evidence, not authority:
82
-
83
- - Discard remembered persona IDs or paths absent from the current catalog.
84
- - Prefer recent, project-specific, successfully used routes over generic or old preferences.
85
- - Never let memory override an explicit user choice, applicable project policy, or the current deliverable.
86
- - Treat unavailable or empty memory as a cold start and continue to workspace documentation.
87
-
88
- ### 3. Inspect Workspace Documentation
89
-
90
- When memory is unavailable, invalid, or inconclusive, inspect only targeted high-signal documents inside the active workspace. Reuse documents already present in context before reading more.
91
-
92
- Use this priority:
93
-
94
- 1. Applicable root and nested `AGENTS.md` files and `CLAUDE.md`.
95
- 2. Root `README.md` or equivalent project overview.
96
- 3. Relevant ADR or decision indexes and entries.
97
- 4. Relevant architecture documents.
98
- 5. Relevant `.specs` project, state, architecture, or feature documents.
99
-
100
- Search filenames and headings first. Read only sections likely to identify the repository domain, primary deliverable ownership, required specialist roles, or explicit persona preferences. Do not recursively load every README, ADR, or specification. Ignore generated, dependency, secret, and globally excluded paths.
101
-
102
- Project instructions that explicitly pin or forbid a cataloged persona are stronger evidence than descriptive documentation. Stale documents, missing referenced files, or roles with no matching catalog entry cannot select a persona.
103
-
104
- ### 4. Classify The Current Prompt
105
-
106
- Classify the requested output and primary ownership, not raw keyword counts. Compare the first or current user prompt with catalog summaries and routing signals, using valid memory and documentation only as supporting context.
107
-
108
- - `primary_signals` identify the persona that owns the deliverable.
109
- - `negative_signals` prevent supporting concerns from taking ownership.
110
- - `secondary_lens_signals` may add one focused review lens for a material risk.
111
- - A supporting mention of tests, implementation, architecture, or release work does not transfer ownership unless that work is the primary deliverable.
112
-
113
- Do not calculate or report numeric confidence. A route is clear when one candidate owns the deliverable and no equally plausible candidate conflicts with it.
114
-
115
- ### 5. Resolve Ambiguity Or No Match
116
-
117
- When two or more candidates remain genuinely plausible:
118
-
119
- - `ambiguity: ask`: ask one concise question listing the plausible persona display names and `No persona`. Use an interactive user-input tool when available.
120
- - `ambiguity: best_match`: choose the candidate with the strongest current-deliverable ownership, then project-specific evidence, then recent valid memory.
121
- - `ambiguity: no_persona`: continue without a persona.
122
-
123
- When no catalog entry fits:
124
-
125
- - `no_match: no_persona`: continue silently without a persona unless the user explicitly requested routing.
126
- - `no_match: ask`: ask whether to use the weakly supported candidate or `No persona`. If no candidate has relevant evidence, ask only about `No persona` versus an explicitly named catalog choice.
127
-
128
- Do not ask when the request confidently falls outside every cataloged persona. That is a successful no-persona route under the default policy, not ambiguity.
129
-
130
- ### 6. Apply And Announce The Route
131
-
132
- Choose exactly one primary persona and at most one secondary review lens. Read only their cataloged prompt files.
133
-
134
- - The primary persona owns recommendations, implementation, and final synthesis.
135
- - The review lens contributes only checks that reduce a concrete risk.
136
- - Do not produce independent persona answers, simulate a debate, or merge full voices.
137
- - For an inferred or explicit persona, state the route once: `Persona: <primary>. Reason: <primary deliverable>.` Add `Review lens: <secondary>.` when used.
138
- - Do not announce a default no-persona route unless the user requested routing or a prior route was removed.
139
- - Apply persona stance, expertise, priorities, and review criteria without quoting or reproducing its prompt.
140
-
141
- ## Route Lifetime
142
-
143
- Keep the selected persona sticky across follow-up turns that advance the same primary objective.
144
-
145
- With `mid_conversation: task_change`, re-evaluate only when the user explicitly switches, the primary deliverable changes ownership, a new task begins after completion, or the selected catalog entry becomes invalid. With `mid_conversation: explicit_only`, re-evaluate only on an explicit user request.
146
-
147
- Do not reroute because a follow-up adds a supporting concern, asks for verification, or mentions another persona's terminology. If a task change creates genuine ambiguity and policy says `ask`, ask during the conversation before substantive work continues.
148
-
149
- After resume or compaction, restore any route still present in conversation context or transcript without re-announcing it or repeating a resolved question. If the prior route is unavailable, run the normal workflow again; no separate route database is required.
150
-
151
- ## Routing Examples
152
-
153
- | Situation | Result |
154
- |---|---|
155
- | User explicitly asks for Senior Mobile QA Automation Engineer. | Apply that catalog entry; explicit choice wins. |
156
- | massa-ai recalls a successful mobile-engineer route, but current prompt asks to fix flaky Maestro CI. | Route to Senior Mobile QA Automation Engineer; memory cannot override current ownership. |
157
- | Memory is empty; README and ADRs describe a cross-platform app; prompt asks to implement offline sync. | Route to Senior Mobile Engineer using docs plus current deliverable. |
158
- | Prompt asks for both app architecture and an automation suite with no primary outcome. | Follow `ambiguity`; default asks between plausible personas and no persona. |
159
- | Prompt asks to draft a billing RFC. | Confident no-match; continue silently without a persona. |
160
- | `enabled: off` and prompt does not name a persona. | Skip inference and continue without a persona. |
161
- | Memory names a removed persona ID. | Discard stale memory and continue to docs and prompt classification. |
162
- | Current mobile implementation finishes and user starts a flake-reduction task. | With `task_change`, re-evaluate and announce the new route once. |
44
+ A persona shapes main-agent reasoning; a sub-agent is a bounded executor under its own charter. A persona grants no tool access, no write scope, and no permission. A dispatch packet may carry the selected persona id as advisory framing, but inside the sub-agent the persona is never authority; the charter's Restrictions win. The packet carries the persona **id only**, never the persona prompt. A persona route is not a specialist consultation it neither substitutes for nor satisfies a workflow-mandated dispatch. Overlap table: `references/routing-details.md`.
163
45
 
164
- ## Failure Handling
46
+ ## Lifetime And Failures
165
47
 
166
- - **Catalog missing or invalid:** Report `Persona routing unavailable: <reason>.` Continue without a persona.
167
- - **Unsupported schema version:** Report the found and supported versions. Continue without a persona.
168
- - **massa-ai unavailable or empty:** Continue with targeted workspace documentation and the current prompt.
169
- - **Workspace documentation unavailable:** Route from explicit choice and current prompt; apply ambiguity or no-match policy.
170
- - **Remembered persona absent from catalog:** Ignore it as stale evidence; never reconstruct it.
171
- - **Selected prompt missing, outside the persona-library root, or malformed:** Name the catalog entry and path. Continue without a persona; do not silently substitute another persona.
172
- - **User cannot be asked interactively:** Ask one concise plain-text question when policy requires a choice; otherwise use the configured non-interactive behavior.
48
+ Routes are sticky while the objective advances; re-evaluate per `mid_conversation`. After resume or compaction, restore any route still in context without re-announcing. Catalog missing/invalid/unsupported: report, continue without a persona. Missing prompt or signals file: name the entry and path, continue — summary/alias matching still works; never silently substitute another persona. Detail tables: `references/routing-details.md`.
173
49
 
174
50
  ## Stop Conditions
175
51
 
176
- Routing is complete when one primary persona is applied, the user selects no persona, or policy intentionally produces a no-persona route. Persona routing itself stays inline: do not invoke a separate model router, launch subagents for persona selection, create subprocess orchestration, or persist a route database. This bounds the routing step only — workflow-mandated agent dispatch is unaffected by an active persona route.
52
+ Routing is complete when one primary persona is applied, the user selects no persona, or policy produces a no-persona route. Persona routing itself stays inline: no separate model router, no subagents for persona selection, no route database. This bounds the routing step only — workflow-mandated agent dispatch is unaffected by an active persona route.
@@ -0,0 +1,98 @@
1
+ # Persona Routing Details
2
+
3
+ Load this reference from `SKILL.md` only when one of its load conditions fires:
4
+ a failure needs reporting, ambiguity needs a user question, a mid-conversation
5
+ reroute is in doubt, or the user requests multiple personas. Routing itself
6
+ runs from `SKILL.md` alone.
7
+
8
+ ## Persona ↔ Sub-Agent Overlap
9
+
10
+ Four catalog entries deliberately overlap an agent charter. The persona is the
11
+ main agent's stance; the agent is a separately dispatched specialist. Applying
12
+ one never implies the other ran.
13
+
14
+ | Persona | Overlapping agent |
15
+ |---|---|
16
+ | `senior-mobile-engineer` | `massa-ai-mobile-specialist` |
17
+ | `senior-mobile-qa-automation-engineer` | `massa-ai-test-engineer` |
18
+ | `context-skill-harness-engineer-architect` | `massa-ai-architecture-specialist` |
19
+ | `product-manager` | `massa-ai-requirements-analyst` |
20
+
21
+ ## Multi-Persona Requests
22
+
23
+ If multiple personas are explicitly requested, the persona owning the primary
24
+ deliverable leads and at most one other becomes a review lens. Apply the
25
+ ambiguity policy if ownership remains unclear. The review lens contributes only
26
+ checks that reduce a concrete risk; never produce independent persona answers,
27
+ simulate a debate, or merge full voices.
28
+
29
+ ## Ambiguity And No-Match Behavior
30
+
31
+ When two or more candidates remain genuinely plausible:
32
+
33
+ - `ambiguity: ask` — ask one concise question listing the plausible persona
34
+ display names and `No persona`. Use an interactive user-input tool when
35
+ available; otherwise ask in plain text.
36
+ - `ambiguity: best_match` — choose the strongest current-deliverable owner,
37
+ then project-specific evidence, then recent valid memory.
38
+ - `ambiguity: no_persona` — continue without a persona.
39
+
40
+ When no catalog entry fits:
41
+
42
+ - `no_match: no_persona` — continue silently unless the user explicitly
43
+ requested routing.
44
+ - `no_match: ask` — ask about the weakly supported candidate versus
45
+ `No persona`; with no supported candidate, ask only about `No persona`
46
+ versus an explicitly named catalog choice.
47
+
48
+ Do not ask when the request confidently falls outside every cataloged persona —
49
+ that is a successful no-persona route, not ambiguity.
50
+
51
+ ## Route Lifetime Detail
52
+
53
+ With `mid_conversation: task_change`, re-evaluate only when the user explicitly
54
+ switches, the primary deliverable changes ownership, a new task begins after
55
+ completion, or the selected catalog entry becomes invalid. With
56
+ `explicit_only`, re-evaluate only on explicit request. Do not reroute because a
57
+ follow-up adds a supporting concern, asks for verification, or mentions another
58
+ persona's terminology. If a task change creates genuine ambiguity and policy
59
+ says `ask`, ask before substantive work continues. After resume or compaction,
60
+ restore any route still present in conversation context without re-announcing
61
+ it or repeating a resolved question; if unavailable, run the normal workflow
62
+ again — no separate route database exists.
63
+
64
+ ## Routing Examples
65
+
66
+ | Situation | Result |
67
+ |---|---|
68
+ | User explicitly asks for Senior Mobile QA Automation Engineer. | Apply that entry; explicit choice wins. |
69
+ | Project `AGENTS.md` pins a valid catalog id. | Pin fast path: read only that prompt; no recall, docs, signals, or classification. |
70
+ | Pin names an id absent from the catalog. | One-line invalid-pin report; continue with the normal workflow. |
71
+ | Memory recalls a successful route, current prompt asks to fix flaky Maestro CI. | Route to Senior Mobile QA Automation Engineer; memory cannot override current ownership. |
72
+ | Memory empty; docs describe a cross-platform app; prompt asks to implement offline sync. | Route to Senior Mobile Engineer from docs plus current deliverable. |
73
+ | Prompt asks for both app architecture and an automation suite, no primary outcome. | Follow `ambiguity`; default asks between plausible personas and no persona. |
74
+ | Prompt asks to draft a billing RFC. | Confident no-match; continue silently without a persona. |
75
+ | `enabled: off` and prompt names no persona. | Skip inference; continue without a persona. |
76
+ | Memory names a removed persona id. | Discard stale memory; continue to docs and classification. |
77
+ | Mobile implementation finishes; user starts a flake-reduction task. | With `task_change`, re-evaluate and announce the new route once. |
78
+
79
+ ## Failure Handling Table
80
+
81
+ - **Catalog missing or invalid:** report `Persona routing unavailable:
82
+ <reason>.` Continue without a persona.
83
+ - **Unsupported schema version:** report found and supported versions.
84
+ Continue without a persona.
85
+ - **massa-ai unavailable or empty:** continue with targeted workspace
86
+ documentation and the current prompt; skip route-memory reads and writes.
87
+ - **Workspace documentation unavailable:** route from explicit choice, pin,
88
+ and current prompt; apply the ambiguity or no-match policy.
89
+ - **Remembered persona absent from catalog:** ignore it as stale evidence;
90
+ never reconstruct it.
91
+ - **Selected prompt missing, outside the persona-library root, or malformed:**
92
+ name the catalog entry and path. Continue without a persona; never silently
93
+ substitute another persona.
94
+ - **Signals file missing during classification:** report the entry and path;
95
+ the candidate stays matchable by summary and aliases.
96
+ - **User cannot be asked interactively:** ask one concise plain-text question
97
+ when policy requires a choice; otherwise use the configured non-interactive
98
+ behavior.