This commit is contained in:
2026-04-15 12:56:00 -06:00
parent ff3419a714
commit 63b6678e73
82 changed files with 14800 additions and 3310 deletions
+68
View File
@@ -0,0 +1,68 @@
# Test Plan: Roles
## Feature description
Roles define a system prompt + optional model/temperature/MCP config
that customizes LLM behavior. Roles can be built-in or user-defined
(markdown files). Roles are "role-likes" — sessions and agents also
implement the RoleLike trait.
## Behaviors to test
### Role loading
- [x] Built-in roles load correctly (shell, code)
- [ ] User-defined roles load from markdown files (requires filesystem)
- [x] Role parses model_id from metadata
- [x] Role parses temperature, top_p from metadata
- [x] Role parses enabled_tools from metadata
- [x] Role parses enabled_mcp_servers from metadata
- [ ] Role with no model_id inherits current model (requires retrieve_role + client config)
- [ ] Role with no temperature inherits from AppConfig (requires retrieve_role)
- [ ] Role with no top_p inherits from AppConfig (requires retrieve_role)
### retrieve_role
- [ ] Retrieves by name from file system
- [ ] Resolves model via Model::retrieve_model
- [ ] Falls back to current model if role has no model_id
- [ ] Sets temperature/top_p from AppConfig when role doesn't specify
### use_role (scope transition)
- [x] Sets role on RequestContext (use_role_obj_sets_role)
- [ ] Triggers rebuild_tool_scope (async, deferred to plan 05/08)
- [ ] MCP servers start if role has enabled_mcp_servers (deferred to plan 05)
- [ ] MCP meta functions added to function list (deferred to plan 05)
- [ ] Previous role cleared when switching (deferred to plan 08)
- [x] Role-like temperature/top_p take effect (role_set_temperature_works)
### exit_role
- [x] Clears role from RequestContext (exit_role_clears_role)
- [ ] Followed by bootstrap_tools to restore global tool scope (async, deferred)
- [ ] MCP servers from role are stopped (deferred to plan 05)
- [ ] Global MCP servers restored (deferred to plan 05)
### use_prompt (temp role)
- [x] Creates a TEMP_ROLE_NAME role with the prompt text (use_prompt_creates_temp_role)
- [x] Uses current model
- [x] Activates via use_role_obj
### extract_role
- [ ] Returns role from agent if agent active (deferred to plan 04)
- [ ] Returns role from session if session active with role (deferred to plan 03)
- [x] Returns standalone role if active (extract_role_returns_standalone_role)
- [x] Returns default role if none active (extract_role_returns_default_when_nothing_active)
### One-shot role messages (REPL)
- [ ] `.role coder write hello` sends message with role, then exits role
- [ ] Original state restored after one-shot
## Context switching scenarios
- [ ] Role → different role: old role replaced, MCP swapped
- [ ] Role → session: role cleared, session takes over
- [ ] Role with MCP → exit: MCP servers stop, global MCP restored
- [ ] No MCP → role with MCP: servers start
- [ ] Role with MCP → role without MCP: servers stop
## Old code reference
- `src/config/mod.rs``use_role`, `exit_role`, `retrieve_role`
- `src/config/role.rs``Role` struct, parsing
- `src/config/request_context.rs``use_role`, `exit_role`, `use_prompt`, `retrieve_role`