molecule-core/docs/known-issues.md
Hongming Wang 24fec62d7f initial commit — Molecule AI platform
Forked clean from public hackathon repo (Starfire-AgentTeam, BSL 1.1)
with full rebrand to Molecule AI under github.com/Molecule-AI/molecule-monorepo.

Brand: Starfire → Molecule AI.
Slug: starfire / agent-molecule → molecule.
Env vars: STARFIRE_* → MOLECULE_*.
Go module: github.com/agent-molecule/platform → github.com/Molecule-AI/molecule-monorepo/platform.
Python packages: starfire_plugin → molecule_plugin, starfire_agent → molecule_agent.
DB: agentmolecule → molecule.

History truncated; see public repo for prior commits and contributor
attribution. Verified green: go test -race ./... (platform), pytest
(workspace-template 1129 + sdk 132), vitest (canvas 352), build (mcp).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 11:55:37 -07:00

81 lines
3.7 KiB
Markdown

# Known Issues
Issues identified in source but not yet filed as GitHub issues (GH_TOKEN unavailable in
automated agent contexts). Each entry has: location, symptom, impact, suggested fix.
---
## KI-001 — Telegram channel `kicked` event does not persist disabled state to DB
**File:** `platform/internal/channels/telegram.go:596`
**Status:** TODO comment in source, unimplemented
**Severity:** Medium
### Symptom
When the Molecule AI bot is removed from a Telegram chat (`left` or `kicked` event), the handler
logs the event but does not update the `workspace_channels` row to mark the channel as
`enabled: false`. On the next scheduled outbound message or webhook trigger, the platform
attempts to send to a chat the bot no longer belongs to, receives a Telegram 403 error, and
logs an error — but keeps retrying on every subsequent trigger indefinitely.
### Code pointer
```go
// telegram.go:594-596
case "left", "kicked":
log.Printf("Channels: Telegram bot removed from chat %d (%s)", chat.ID, chat.Title)
// TODO: mark channel disabled in DB
```
### Suggested fix
After the `log.Printf`, call the channel manager's update method to set `enabled = false`
on the matching `workspace_channels` row (look up by `config->>'chat_id'`). Requires
injecting a DB handle or update callback into the Telegram handler — same pattern used
by `manager.go`'s `clearChatHistory` callback at line 603.
---
## KI-002 — Delegation system has no idempotency guard against duplicate execution on container-restart race
**File:** `platform/internal/handlers/delegation.go` (see also `delegationRetryDelay`)
**Status:** Identified in `docs/ecosystem-watch.md` (Trigger.dev section); no fix yet
**Severity:** Medium
### Symptom
When a workspace container restarts mid-delegation (e.g. Redis TTL expires, liveness monitor
triggers restart), the `POST /workspaces/:id/delegate` call may fire again on the next agent
boot before the first delegation's result is stored. The target workspace executes the same
task twice, potentially producing duplicate side-effects (double commits, double API calls,
double Telegram messages).
### Code pointer
`delegation.go` stores delegations in the DB but uses no idempotency key. The caller
(workspace agent) has no way to detect that a delegation was already accepted; it simply
retries if the HTTP call times out.
### Suggested fix
Accept an optional `idempotency_key` field in the `POST /workspaces/:id/delegate` request
body. On receipt, check for an existing delegation row with the same `(workspace_id,
idempotency_key)` pair. If found and not failed, return the existing delegation ID (HTTP 200)
rather than creating a new row. Agents should pass `idempotency_key = sha256(task_text +
timestamp_minute)` to scope deduplication to a natural retry window.
---
## KI-003 — `commit_memory` MCP tool calls are not surfaced in `activity_logs`
**File:** `workspace-template/builtin_tools/memory.py` + `platform/internal/handlers/activity.go`
**Status:** Identified in `docs/ecosystem-watch.md` (Letta section); no fix yet
**Severity:** Low (visibility / debugging quality)
### Symptom
When an agent calls `commit_memory`, the write succeeds and is persisted to the
`agent_memories` table, but no `activity_log` row is created. Operators inspecting the
Canvas chat "Agent Comms" tab cannot see that a memory write occurred, making it hard to
audit what an agent chose to remember during a task.
### Suggested fix
In the MCP server's `commit_memory` handler (or in the platform's `POST /workspaces/:id/memories`
handler), emit an `activity_log` entry of type `tool_call` with `method = "commit_memory"`,
`request = {key, content_length}`, and `duration_ms`. This matches the Letta pattern of
making memory operations first-class visible tool calls in the trace timeline.