## Issue Triage — 2026-02-15

### 1) Image content stripped from LLM requests in cloud chat — #6494
- **Current Status:** OPEN (GitHub issue)
- **Impact Assessment:**
  - **User Impact:** High (cloud chat users sending images are affected)
  - **Functional Impact:** Yes (breaks multimodal/chat-with-images core capability in cloud)
  - **Brand Impact:** High (users perceive “images don’t work” / unreliable platform)
- **Technical Classification:**
  - **Issue Category:** Bug
  - **Component Affected:** API / Cloud Chat (`/api/v1/chat/completions`, `convertToUIMessages`)
  - **Complexity:** Moderate effort (message conversion pipeline + tests)
- **Resource Requirements:**
  - **Required Expertise:** TypeScript API layer, chat message schemas, multimodal formatting (OpenAI/Anthropic-style content arrays)
  - **Dependencies:** Confirm expected UI message schema + provider payload requirements; may depend on client message format
  - **Estimated Effort (1–5):** 3
- **Recommended Priority:** **P0**
- **Specific Actionable Next Steps:**
  1. Add a minimal repro test fixture: chat completion request containing an image (attachment/content block) through `/api/v1/chat/completions`.
  2. Instrument/trace `convertToUIMessages` to identify where image blocks are dropped (e.g., filtered as non-text, lost during mapping, or removed by sanitization).
  3. Ensure the conversion preserves structured content (`[{type:'text'},{type:'image_url'...}]` or equivalent) end-to-end to provider adapter.
  4. Add regression tests: (a) image-only prompt, (b) mixed text+image, (c) multiple images.
  5. Validate in cloud environment (not just local) to ensure no gateway/body parser stripping.
- **Potential Assignees:** **borisudovicic** (reported; cloud/API context), **lalalune** (runtime/message flow), **Stan ⚡** (integration rigor/testing)

---

### 2) URL in message triggers duplicate LLM calls (text + attachment) causing duplicated streaming response — #6486
- **Current Status:** OPEN (GitHub issue)
- **Impact Assessment:**
  - **User Impact:** High (common behavior: users paste URLs frequently)
  - **Functional Impact:** Partial (core chat works but costs double + broken output)
  - **Brand Impact:** High (visible duplicated answers + “wastes tokens”)
- **Technical Classification:**
  - **Issue Category:** Bug / Performance / UX
  - **Component Affected:** Webapp message ingestion + attachment/preview pipeline + SSE streaming aggregation
  - **Complexity:** Moderate effort (dedupe at ingestion + ensure single generation path)
- **Resource Requirements:**
  - **Required Expertise:** Client/server message normalization, attachment handling, SSE stream lifecycle (`done` event handling)
  - **Dependencies:** Clarify where URL preview metadata is created (client vs server) and how it enters “attachment” path
  - **Estimated Effort (1–5):** 3
- **Recommended Priority:** **P1**
- **Specific Actionable Next Steps:**
  1. Add tracing to show two independent LLM invocations for one user message and identify the call sites.
  2. Decide policy: treat URL previews as **non-LLM-triggering metadata** unless explicitly requested (e.g., “summarize link”).
  3. Add a dedupe key at message handler level (hash of messageId + canonicalized content) to prevent a second run.
  4. Fix SSE concatenation logic to ensure only one assistant message is emitted for a user turn.
  5. Add regression tests: URL-only, URL + text, multiple URLs.
- **Potential Assignees:** **lalalune** (message flow/runtime), **anchapin** (defensive fixes + stability), **odilitime** (bootstrap/provider pipeline understanding)

---

### 3) Cloud platform credits can be administered via direct DB UPDATE; OAuth accounts not searchable by email — DISC-COREDEVS-2026-02-14-CREDITS
- **Current Status:** Observed in Discord (core-devs); manual operational procedure in use
- **Impact Assessment:**
  - **User Impact:** Medium→High (affects any user needing top-ups; creates support friction)
  - **Functional Impact:** Partial (billing/credits gating blocks usage when support can’t locate account)
  - **Brand Impact:** High (feels “manual”, error-prone; risk of miscrediting)
- **Technical Classification:**
  - **Issue Category:** UX / Reliability (and potential Security/Operations risk)
  - **Component Affected:** Cloud Admin / User Management / Billing-Credits subsystem
  - **Complexity:** Architectural change (admin tooling + consistent identity lookup)
- **Resource Requirements:**
  - **Required Expertise:** Cloud backend DB + admin endpoints, identity/OAuth account model, audit logging
  - **Dependencies:** User schema (email vs OAuth identifiers), permissions model for admin actions
  - **Estimated Effort (1–5):** 4
- **Recommended Priority:** **P1**
- **Specific Actionable Next Steps:**
  1. Implement an internal/admin-only “Credit Top-Up” endpoint/UI with:
     - lookup by **email**, **accountId**, **org slug**, and **OAuth subject**
     - mandatory reason field + ticket/reference
     - audit log (who/when/how much/before-after)
  2. Add deterministic searchability: ensure OAuth-created accounts always persist a normalized email index when available.
  3. Add safeguards: rate limits, max adjustment thresholds, and explicit environment (preview vs prod) banner.
  4. Document the runbook until tooling exists (exact query patterns, identifiers to request from users).
- **Potential Assignees:** **Stan ⚡** (already doing manual ops), **borisudovicic** (cloud operational needs), **odilitime** (platform coordination)

---

### 4) Agent fails to make first post on X due to roomId-related error — DISC-DISCUSSION-2026-02-13-ROOMID
- **Current Status:** Unresolved (Discord discussion; more details requested)
- **Impact Assessment:**
  - **User Impact:** Medium (users attempting X integration/onboarding)
  - **Functional Impact:** Partial (blocks a key “agent posts to X” workflow)
  - **Brand Impact:** Medium→High (onboarding failure is highly visible)
- **Technical Classification:**
  - **Issue Category:** Bug / Integration
  - **Component Affected:** Social integration (X) + Core message/session initialization (room/world requirements)
  - **Complexity:** Moderate effort (depends on where roomId is assumed)
- **Resource Requirements:**
  - **Required Expertise:** Provider/integration debugging, runtime session initialization, event/message bus
  - **Dependencies:** Confirm which branch/version (v1 vs v2 changes mention “respond without roomId/worldId” in PR notes)
  - **Estimated Effort (1–5):** 3
- **Recommended Priority:** **P1**
- **Specific Actionable Next Steps:**
  1. Collect required debug data from reporter: logs, agent config, integration plugin version, first-run steps.
  2. Identify code path requiring roomId for outbound posts; align with newer behavior (“respond without roomId/worldId”).
  3. Add fallback: auto-create room/world on first external event, or ensure integration supplies deterministic IDs.
  4. Add an integration test: “first post” flow with empty state.
- **Potential Assignees:** **odilitime** (already engaged in Discord troubleshooting), **lalalune** (runtime/session semantics), **Stan ⚡** (integration test discipline)

---

### 5) PR scope creep risk: “fix null/undefined checks” PR includes major Request Context + message service refactor — PR #6470
- **Current Status:** OPEN PR (GitHub); review flagged major unscoped changes
- **Impact Assessment:**
  - **User Impact:** Medium (could introduce regressions broadly if merged)
  - **Functional Impact:** Partial (touches settings resolution + message service)
  - **Brand Impact:** Medium (risk of unstable releases; review quality concerns)
- **Technical Classification:**
  - **Issue Category:** Process / Quality (with architectural implications)
  - **Component Affected:** Core Framework (`getSetting`), Request Context (AsyncLocalStorage), Server message lifecycle
  - **Complexity:** Architectural change (should be isolated + validated)
- **Resource Requirements:**
  - **Required Expertise:** Core runtime maintainers, Node AsyncLocalStorage patterns, release engineering
  - **Dependencies:** Alignment with JWT/multi-tenant isolation work; ensure consistent across runtimes
  - **Estimated Effort (1–5):** 2 (to split) + 3 (to validate request context)
- **Recommended Priority:** **P1**
- **Specific Actionable Next Steps:**
  1. Request author to split into 2–3 PRs:
     - (a) null/undefined guards (safe hotfix)
     - (b) request context feature
     - (c) message service event/lifecycle refactor (if not already covered elsewhere)
  2. Add targeted tests for request context precedence vs runtime settings fallback.
  3. Add rollout plan/feature flag guidance for multi-tenant entity settings.
- **Potential Assignees:** **anchapin** (original fix focus), **lalalune** (architecture), **greptile-apps** (review validation)

---

### 6) Token migration deadline confusion; support channel locked; users missing window — DOCS-COMM-2026-02-14-MIGRATION
- **Current Status:** Ongoing community impact (Discord); migration closed
- **Impact Assessment:**
  - **User Impact:** Medium (subset of holders; but high emotional/financial sensitivity)
  - **Functional Impact:** No (not framework functionality)
  - **Brand Impact:** High (trust/communication perception)
- **Technical Classification:**
  - **Issue Category:** Documentation / UX (communications + support workflow)
  - **Component Affected:** Community ops + docs site + Discord automation
  - **Complexity:** Simple fix (docs + pinned notices) to Moderate (automated reminders + tooling)
- **Resource Requirements:**
  - **Required Expertise:** Technical writing, community ops, Discord automation (bots/pins/announcements)
  - **Dependencies:** Confirm final policy (no late migrations) and official wording
  - **Estimated Effort (1–5):** 2
- **Recommended Priority:** **P2**
- **Specific Actionable Next Steps:**
  1. Publish a final post-mortem FAQ: ratio, dates, closure, “no late tickets” policy, and where to check official updates.
  2. Add a “Critical Deadlines” page + link from README/docs + cloud dashboard banner pattern for future deadlines.
  3. For future migrations: schedule automated reminders (T-30/14/7/1 days) across Discord + email (if available).
- **Potential Assignees:** **Biazs** (handled support Qs), **odilitime** (announcements routing), **borisudovicic** (cloud/dashboard messaging)

---

### 7) n8n plugin duplication and build friction (generated JSON files required; repo consolidation pending) — DISC-2026-02-12-N8N-CONSOLIDATION
- **Current Status:** Decision made in Discord to consolidate around `plugin-n8n-workflow`; build requires crawl-generated JSON
- **Impact Assessment:**
  - **User Impact:** Medium (plugin developers/users hit confusing build failures)
  - **Functional Impact:** Partial (plugin adoption blocked by setup friction)
  - **Brand Impact:** Medium (perceived “broken build”)
- **Technical Classification:**
  - **Issue Category:** Documentation / Developer Experience
  - **Component Affected:** Plugin System / CI build pipeline
  - **Complexity:** Moderate effort (repo consolidation + CI + docs)
- **Resource Requirements:**
  - **Required Expertise:** CI/CD, plugin release workflow, documentation
  - **Dependencies:** Registry references; deprecate/remove duplicate repo safely
  - **Estimated Effort (1–5):** 3
- **Recommended Priority:** **P2**
- **Specific Actionable Next Steps:**
  1. Create a deprecation notice + archive/delete plan for the duplicate repo (`plugin-n8n` vs `plugin-n8n-workflow`).
  2. Ensure README prominently states: run `crawl` to generate JSON locally; CI generates on release.
  3. Add a prebuild check that errors with a clear message if JSON artifacts are missing.
- **Potential Assignees:** **Stan ⚡** (primary maintainer), **s** (raised consolidation), **standujar** (plugin reliability focus)

---

### 8) Feature Request: Support custom OpenAI endpoint URL for OpenAI provider — #6490
- **Current Status:** OPEN (GitHub issue)
- **Impact Assessment:**
  - **User Impact:** Medium (users of OpenAI-compatible providers like SiliconFlow)
  - **Functional Impact:** Partial (blocks a common deployment pattern; not core failure)
  - **Brand Impact:** Medium (compatibility expectations for “OpenAI-compatible”)
- **Technical Classification:**
  - **Issue Category:** Feature Request
  - **Component Affected:** Model Integration (OpenAI provider)
  - **Complexity:** Simple fix (config plumbing + validation) to Moderate (per-provider quirks)
- **Resource Requirements:**
  - **Required Expertise:** Provider abstraction, env/config handling, security considerations (SSRF/allowed hosts)
  - **Dependencies:** Decide config surface area (env var, config file, runtime settings)
  - **Estimated Effort (1–5):** 2
- **Recommended Priority:** **P2**
- **Specific Actionable Next Steps:**
  1. Add `OPENAI_BASE_URL` (or `OPENAI_ENDPOINT`) to provider config with sane default.
  2. Add allowlist/validation to reduce SSRF risk in server contexts.
  3. Document examples for common OpenAI-compatible services.
  4. Add a test using a mock server to confirm base URL override works.
- **Potential Assignees:** **lalalune** (core provider patterns), **anchapin** (safe config/guards), **Stan ⚡** (integration testing)

---

### 9) [Agent] Eliza Character File & Prompt Engineering improvements — #6447
- **Current Status:** OPEN (GitHub issue)
- **Impact Assessment:**
  - **User Impact:** Medium (quality improvements; depends on how many use “Eliza” character)
  - **Functional Impact:** No (doesn’t block runtime)
  - **Brand Impact:** Medium (agent quality reflects project polish)
- **Technical Classification:**
  - **Issue Category:** UX
  - **Component Affected:** Agent configuration / prompts / character file
  - **Complexity:** Moderate effort (iterative prompt changes + evaluation)
- **Resource Requirements:**
  - **Required Expertise:** Prompt engineering, evaluation methodology, cost/quality tradeoffs across models (Sonnet vs current)
  - **Dependencies:** Pending PRs mentioned for message examples and model switch
  - **Estimated Effort (1–5):** 3
- **Recommended Priority:** **P3**
- **Specific Actionable Next Steps:**
  1. Merge/track the dependent PRs (message examples + model change) referenced in the issue.
  2. Establish a small eval suite (10–20 canonical conversations) to compare before/after.
  3. Iterate prompts with explicit acceptance criteria: tone, refusal behavior, consistency, tool usage.
- **Potential Assignees:** **borisudovicic** (issue owner), **Ben** (mentioned PRs), **yojo** (UX positioning feedback)

---

## Top 5–10 Highest-Priority Items (Immediate Focus)
1. **P0 — #6494:** Image content stripped in cloud chat (multimodal broken).
2. **P1 — #6486:** URL causes duplicate LLM calls + duplicated streaming output (cost + UX).
3. **P1 — DISC-COREDEVS-2026-02-14-CREDITS:** Cloud credits admin is manual DB UPDATE; identity lookup inconsistent for OAuth users.
4. **P1 — DISC-DISCUSSION-2026-02-13-ROOMID:** roomId error blocks first X post (integration onboarding failure).
5. **P1 — PR #6470:** High-risk PR scope creep; split and validate request-context changes before merging.
6. **P2 — DOCS-COMM-2026-02-14-MIGRATION:** Migration deadline comms + permanent FAQ/runbook for critical deadlines.
7. **P2 — DISC-2026-02-12-N8N-CONSOLIDATION:** Consolidate n8n plugin repos + improve build error messaging.
8. **P2 — #6490:** Add custom OpenAI endpoint support (broad compatibility win).
9. **P3 — #6447:** Iterative Eliza character/prompt improvements.

---

## Patterns / Themes Suggesting Deeper Issues
- **Message normalization pipeline is fragile across modalities and metadata** (images being dropped; URLs triggering a second “attachment” processing path). This indicates unclear ownership of “what constitutes a single user turn” and inconsistent structured-message handling.
- **Operational workflows are compensating for missing admin/product tooling** (manual DB credit updates; difficulty locating OAuth accounts by email). The platform needs first-class admin surfaces and auditable operations.
- **Change management risk from oversized PRs** (PR #6470). Reviewability and rollback safety are being undermined by bundling unrelated changes.

---

## Process Improvements (Prevention Recommendations)
1. **Add a “Message Turn Contract”**: define canonical schema for text, URLs, attachments, and images; enforce in one normalization step with tests.
2. **Regression tests for cost-impacting bugs**: include automated tests for “one user message => one LLM call” invariants, especially for URLs and attachment previews.
3. **Introduce an Ops/Admin checklist** for cloud-critical actions (credits, account lookup, environment selection) plus mandatory audit logging.
4. **PR scope guardrails**: enforce “one PR = one theme” via CI label checks or reviewer guidelines; require split when >N files and mixed concerns.
5. **Deadline communications playbook**: for future migrations/critical events, require multi-channel scheduled reminders and a permanent FAQ page linked in-product.