Skip to content

Forge Alpha S1 — Sprint Retrospective

Sprint retro for P1 blockers. 6 tickets shipped via PR #107.

Sprint: Alpha S1 — P1 Blockers Dates: 2026-04-30 → 2026-05-01 Goal: Fix all issues that prevent core product usage. Product must be usable after this sprint. Result: All 6 tickets shipped to prod via PR #107, deployed 2026-04-30 23:08 UTC.

FORGE-59 — Message send completely broken (Highest)

Section titled “FORGE-59 — Message send completely broken (Highest)”

What broke: Send button and Enter key did nothing in any thread. No message was submitted, no loading state shown.

Root cause: ef63652f added a WHERE workspace_root LIKE '/forge-data/users/{userId}/%' filter that always excluded forge-cloud projects (which live under /Users/cmmd/...). With no projects in the store, activeThread was undefined and onSend returned silently.

Fix: Gated the userId workspace filter on CMMD_SENTINEL_WORKSPACE_PREFIX env var in apps/server/src/ws.ts. Forge-cloud doesn’t set this var → no filter applied → projects return normally.

How to test:

  1. Open forge-cloud.cmmd.ai
  2. Click the pencil icon next to any workspace to create a new thread
  3. Type any message (e.g. “hello”) → click Send or press Enter
  4. Pass: URL changes from /draft/... to a server thread URL (/workspaceId/threadId). Claude responds within ~10s.
  5. Fail: URL stays at /draft/.... No response. No toast.

FORGE-69 — Default model “gpt-5.4” blocks all sends (Highest)

Section titled “FORGE-69 — Default model “gpt-5.4” blocks all sends (Highest)”

What broke: New threads defaulted to model gpt-5.4 which doesn’t exist in Forge’s provider registry. onSend silently no-oped when it couldn’t resolve the model.

Root cause: codex.enabled defaulted to true but Codex CLI was not installed on forge-cloud. Codex’s resolveTextGenerationProvider emitted a [ede_diagnostic] string and failed.

Fix: Changed codex.enabled default to false in packages/contracts/src/settings.ts. resolveTextGenerationProvider now falls through to claudeAgent (Claude Sonnet 4.6) as the first enabled provider.

FORGE-67 + FORGE-80 — Sidebar shows “Authenticated user” instead of real name (High)

Section titled “FORGE-67 + FORGE-80 — Sidebar shows “Authenticated user” instead of real name (High)”

What broke: Bottom-left of sidebar showed “AU / Authenticated user” as the display name for every logged-in user.

Root cause: The CMMD JWT was present but the sidebar component wasn’t reading the name / displayName claim from it. It fell through to a static “Authenticated user” fallback string.

Fix: Wire the identity display name from the CMMD JWT through to the sidebar user profile component in apps/server/src/command/http.ts / normalizeUserIdentityFromApi.

FORGE-83 + FORGE-85 — Raw [ede_diagnostic] string shown as user-facing error (High)

Section titled “FORGE-83 + FORGE-85 — Raw [ede_diagnostic] string shown as user-facing error (High)”

What broke: When a thread hit a runtime error, a red toast appeared with raw internal diagnostic text: [ede_diagnostic] result_type=user last_content_type=n/a stop_reason=tool_use

Root cause: Codex CLI was being invoked even on forge-cloud (where it’s not installed). The CLI’s stdout contained the [ede_diagnostic] prefix which was passed through as the error message to the toast system.

Fix: Same as FORGE-69 — codex.enabled: false by default means the Codex code path is never entered on forge-cloud.

CheckExpected
New thread → send “hello”Claude responds within 15s
Sidebar user profileShows real name, not “Authenticated user”
Model picker on new threadDefaults to Claude / Sonnet 4.6
Error toastsNo raw [ede_diagnostic] strings
Settings → Providers → CodexShown as disabled
ItemValue
PR#107 — fix: FORGE-69 silent send, identity display name, Codex disabled-by-default
Merge commitbdd5c56d
Deployed2026-04-30 23:08 UTC via Deploy Forge Web workflow
Verified onforge-cloud.cmmd.ai