diff --git a/docs/reports/FOLLOWUP_module_taxonomy_refactor_20260627_recoverable.md b/docs/reports/FOLLOWUP_module_taxonomy_refactor_20260627_recoverable.md new file mode 100644 index 00000000..ce03efe4 --- /dev/null +++ b/docs/reports/FOLLOWUP_module_taxonomy_refactor_20260627_recoverable.md @@ -0,0 +1,131 @@ +# Followup: module_taxonomy_refactor_20260627 — Actual State Assessment + +**Date:** 2026-06-27 +**Reviewer:** Tier 1 +**Status:** TRACK IS RECOVERABLE. Data is NOT lost. The user's frustration is justified but the situation is better than the track report suggested. + +--- + +## TL;DR + +The 5 "DAMAGED" tasks in the previous Tier 2 report are NOT data loss. The class definitions are STILL in `src/models.py` with full bodies. The destination files (tool_presets.py, tool_bias.py, external_editor.py, mcp_client.py, workspace_manager.py) simply don't have the class definitions ADDED to them yet. The data is intact; only the move operation is incomplete. + +The user's frustration is justified because Tier 2 used `git stash` (now banned at 3 layers) and made a "misc" commit with a non-descriptive message. But the actual code is intact. + +--- + +## Actual state of `src/models.py` + +``` +@region: Tool Models +@dataclass +class Tool: # body intact (name, approval, weight, parameter_bias) +@dataclass +class ToolPreset: # body intact (name, categories) +@dataclass +class BiasProfile: # body intact (name, tool_weights, category_multipliers) + +@region: UI/Editor +@dataclass +class TextEditorConfig: # body intact (name, path, diff_args) +@dataclass +class ExternalEditorConfig: # body intact (editors, default_editor) + +@region: Workspace +@dataclass +class WorkspaceProfile: # body intact (name, ini_content, show_windows) + +@region: MCP Config +@dataclass +class MCPServerConfig: # body intact (name, command, args) +@dataclass +class MCPConfiguration: # body intact (mcpServers) +@dataclass +class VectorStoreConfig: # body intact (provider, url, api_key) +@dataclass +class RAGConfig: # body intact (enabled, vector_store, embedding_provider) + +def load_mcp_config(path: str) -> MCPConfiguration: # body intact +``` + +**All 11 classes + 1 function present with full bodies.** The "damage" report is incorrect — the data is preserved. + +--- + +## Actual state of destination files (what's MISSING) + +| Destination | Should have | Currently has | +|---|---|---| +| `src/tool_presets.py` | `Tool`, `ToolPreset` | only `ToolPresetManager` class (no Tool/ToolPreset) | +| `src/tool_bias.py` | `BiasProfile` | (file is empty or has no BiasProfile) | +| `src/external_editor.py` | `TextEditorConfig`, `ExternalEditorConfig` | (file is empty or has no Editor configs) | +| `src/mcp_client.py` | `MCPServerConfig`, `MCPConfiguration`, `VectorStoreConfig`, `RAGConfig`, `load_mcp_config` | (file has none of these) | +| `src/workspace_manager.py` | `WorkspaceProfile` | (file has no WorkspaceProfile) | + +The destination files have NO class definitions. They were "supposed to" receive the move but the bad script never copied them. + +--- + +## What's needed to complete the track + +The new Tier 2 just needs to: +1. Copy 11 class definitions from `src/models.py` to their destination files (5 commits) +2. Remove the same classes from `src/models.py` (5 commits, one per destination) +3. Run regression tests after each move +4. Re-execute pending tasks t3_2 (create project.py), t3_3 (create project_files.py), t3_10 (reduce models.py) +5. Re-execute Phase 4 (delete AGENT_TOOL_NAMES) +6. Phase 5 verification + +The data is recoverable. The "5 damaged" tasks in the state.toml need to be reset to "pending" with a note explaining the data is intact. + +--- + +## What the user is right about + +1. **Tier 2 used `git stash`** — now banned at 3 layers (commit `6240b07b`): + - AGENTS.md HARD BAN + - `conductor/tier2/opencode.json.fragment` deny rules (top-level + agent-level) + - `conductor/tier2/agents/tier2-autonomous.md` Hard Bans list + +2. **Tier 2 made "misc" commit** — non-descriptive commit messages hide what was done. The user can't review what they can't see. + +3. **The timeline-is-immutable principle** is now spelled out in the agent prompt (commit `6240b07b`): the user's directive "if an agent fucks up, their tendency to want to 'revert' is not correct" is now explicit text in the prompt. + +--- + +## Recommendation for the new Tier 2 + +The track is recoverable. Hand it to a new Tier 2 with this context: + +1. **Reset the 5 "damaged" tasks** in state.toml from "damaged" → "pending" (the data is intact) +2. **Phase 1 (ImGui LEAKS) + Phase 2 (vendor files) are DONE** — don't re-execute +3. **Phase 3 (models split) is the main work** — 5 commits to add the missing class definitions to the destination files +4. **Phase 4 (AGENT_TOOL_NAMES) + Phase 5 (verification)** are the smaller tail +5. **The git stash ban is in place** at 3 layers; the next Tier 2 should NOT be able to corrupt files this way + +### Concrete next steps (for the new Tier 2) + +1. Add `Tool` + `ToolPreset` to `src/tool_presets.py` (copy from models.py) +2. Add `BiasProfile` to `src/tool_bias.py` (copy from models.py) +3. Add `TextEditorConfig` + `ExternalEditorConfig` to `src/external_editor.py` (copy from models.py) +4. Add `MCPServerConfig` + `MCPConfiguration` + `VectorStoreConfig` + `RAGConfig` + `load_mcp_config` to `src/mcp_client.py` (copy from models.py) +5. Add `WorkspaceProfile` to `src/workspace_manager.py` (copy from models.py) +6. Run `uv run python -m pytest tests/test_*.py -v --timeout=30` after each move to verify no regression +7. Once all 5 are merged: remove the same classes from `src/models.py` (5 commits, one per destination) +8. Create `src/project.py` with `ProjectContext` + 5 sub + config IO +9. Create `src/project_files.py` with file-related dataclasses +10. Reduce `src/models.py` to ~30 lines (Pydantic proxies only) +11. Delete `AGENT_TOOL_NAMES` (replace 8 consumer sites with `mcp_tool_specs.tool_names()`) +12. Update test `test_tool_names_subset_of_models_agent_tool_names` (delete or convert) +13. Phase 5: verify all 7 audit gates + batched suite + +--- + +## See also + +- `conductor/tracks/module_taxonomy_refactor_20260627/spec.md` — the original spec +- `conductor/tracks/module_taxonomy_refactor_20260627/plan.md` — the 5-phase plan +- `conductor/tracks/module_taxonomy_refactor_20260627/state.toml` — the track state (5 tasks marked "damaged") +- `docs/reports/TRACK_ABORTED_module_taxonomy_refactor_20260627.md` — the previous (incorrect) damage report +- `docs/reports/FOLLOWUP_module_taxonomy_20260627.md` — the taxonomy followup (this is the correct framing) +- Commit `6240b07b` — the git stash ban + timeline-is-immutable principle