|
| 1 | +# Known issues |
| 2 | + |
| 3 | +## 2026-07-12 — parse_prd unusable when server cwd ≠ project root; provider drift to paid Perplexity |
| 4 | +Verified by source read (this session, atlas-vault fleet run). |
| 5 | + |
| 6 | +### A. parse_prd `[Errno 2] ... '.atlas-ai'` (Severity: HIGH) |
| 7 | +- `.atlas-ai` state paths are CWD-relative module constants: economy.py:32, fleet.py:17,76, |
| 8 | + pipeline.py:13-19, feedback.py:10, suggestions.py:20, reputation.py:39-40, task_state.py:401, |
| 9 | + mcp-server/server.py:394. No stateful op takes a project root. |
| 10 | +- The long-lived atlas-engine MCP server frequently runs with a DELETED cwd (a removed git |
| 11 | + worktree) → `Path('.atlas-ai').mkdir(...)` at lib.py:88 raises Errno 2 even though the parent |
| 12 | + mkdir exists. Reached via economy.py telemetry (economy.py:115) from NativeBackend.parse_prd |
| 13 | + (backend.py:351); error swallowed at mcp-server/server.py:221-222. preflight() also does |
| 14 | + os.chdir (pipeline.py:192), permanently moving the shared server off-root. |
| 15 | +- Telemetry writes AFTER the LLM call, so the failure burns paid tokens then discards the parse. |
| 16 | +- validate vs parse inconsistency: validation.py:39-41 resolves a relative prd_path against the |
| 17 | + server cwd (rejects a path valid from project root); parse reads abs fine (backend.py:359-363) |
| 18 | + but then fails on the cwd-relative WRITE. |
| 19 | +- FIX: anchor all state to an explicit project root (tool param / ATLAS_PROJECT_ROOT env / MCP |
| 20 | + roots); detect a dead cwd per call and fail self-diagnosing; make append_telemetry best-effort; |
| 21 | + replace preflight os.chdir with a plumbed root; echo the resolved absolute prd_path in errors. |
| 22 | + |
| 23 | +### B. Research role silently uses paid Perplexity (Severity: MEDIUM) |
| 24 | +- providers.py:352-358: research_choice "real_api_if_key" + has_perplexity_key → |
| 25 | + _perplexity_research_model("sonar"), which writes NO baseURL → TaskMaster defaults to paid |
| 26 | + api.perplexity.ai even when PERPLEXITY_API_BASE_URL=localhost:8765 is set and the proxy is up. |
| 27 | +- Sticky: _correctable (providers.py:297-309) treats the existing paid role as a user choice and |
| 28 | + won't rewrite it. |
| 29 | +- FIX: prefer the local proxy when PERPLEXITY_API_BASE_URL is localhost:8765 (or make |
| 30 | + free_proxy_first the default); always include baseURL when writing a perplexity role; treat a |
| 31 | + paid-perplexity role as correctable when the free proxy is reachable. |
0 commit comments