Release notes
Every shipped change, with the why behind it
The plugin moves fast; this log keeps the timeline honest. If you hit something that doesn't match what you're seeing in-editor, check the version in Project Settings > Plugins > Woalz Craft and find that version below.
v0.9.0-alpha4
alpha10 May 2026
Post-0.9.0 hardening pass. Codename: "one-paste-forever". Folds together MCP-host UX (token persistence + idempotent paste command), the Fab + woalz.com dual-channel story, and the final wave of STUB → real implementations across the Brain submission surface. No protocol breakage; all changes are additive.
Phase 2.20 — Persistent MCP Auth Token
- Bearer token now persists across UE editor sessions. Paste claude mcp add ONCE per project; the registration survives every restart. New bMcpPersistToken toggle in Project Settings → MCP Integration (default ON). Stale cache wiped automatically when toggled off.
- Idempotent claude mcp add command. Copy Claude Code Config to Clipboard now emits 'claude mcp remove woalzcraft ; claude mcp add ...' so existing registrations are cleaned before re-adding. Works in bash, zsh, and PowerShell 7+.
- Regenerate MCP Auth Token also flows the new token into the cache, so rotation survives restarts.
License source detection (Fab vs woalz.com vs manual)
- FWoalzInstallSource::Detect classifies installs at runtime by inspecting plugin BaseDir against Engine/Plugins/Marketplace, Engine/Plugins/Fab, [Project]/Plugins, plus a marker file for the woalz.com installer.
- Result is sent to Brain as install_source on /auth/signup-anonymous for per-channel analytics and future per-channel tier provisioning.
- Plugin version sent to Brain is now real (read at runtime from .uplugin via IPluginManager) instead of hard-coded 0.9.0.
STUB → real implementations (7 MCP tools)
- auto_fix_blueprint — calls FDebugAutoFixer with optional rule-id whitelist (BROKEN_PIN, ORPHAN_NODE, SELF_LOOP, DUPLICATE_EVENT).
- apply_patch — full JSON Patch RFC 6902 subset (~380 LOC, 9 pin-type resolver, FScopedTransaction undo).
- edit_blueprint — improved provider-detection error hints (Ollama/Anthropic/OpenAI guidance).
- brain_submit_node_ref, brain_submit_pattern, brain_propose_correction, brain_flag_stale — all wired to Brain HTTP endpoints with shared BrainPostJson helper providing tier-aware error handling (401/403 → AuthFailed with BrainWriteKey hint).
Bug fixes
- brain_list_entries no longer returns 'Brain returned malformed JSON' on valid responses. Brain returns a top-level array; the previous parser only handled top-level objects. New ParseJsonObjectOrWrapArray helper tries object first (future-proof) then falls back to wrapping the array under entries with a count field.
- WoalzCraft.ShowKey console command added. Prints + clipboard-copies the cached BrainReadKey for diagnostics and onboarding. Replaces the previously broken Site UI hint that pointed to the wrong .ini path.
Free vs paid tier safety (verified)
- All 5 brain_submit_* endpoints enforce write-tier requirement server-side at the Brain key layer. Free users hit 403, plugin translates into actionable 'set BrainWriteKey' guidance.
- MCP token persistence is orthogonal to tier-gating. The MCP token authenticates localhost only and cannot grant Brain access regardless of mode.
- 12/12 functional tests pass; 8/8 security audit cleared; 5/5 free-vs-paid paths verified.
Strategic groundwork (specs published, code TBD)
- docs/IDENTITY_STRATEGY.md — 5-mode identity model (Anonymous / Fab / Woalz / ProjectManual / EngineManual) for Fab + woalz.com dual-channel sales.
- docs/SPEC_OAUTH_DEVICE_FLOW.md — RFC 8628 device flow design for 'Sign in with Woalz' button. Brain endpoints + plugin Slate UI design ready for Phase 3.x sprint.
- docs/FAB_COMPLIANCE.md — Fab listing prep checklist: multi-engine builds (5.3 → 5.7), license entitlement check, EngineVersion strategy, submission guidelines.
Known rough edges
- Brain backend /entries ignores page_size query param (always returns 20). Filed for Brain-side fix; plugin is correct.
- brain_submit_blueprint requires legacy bAutoSubmitToBrain=true pre-flight. Could unify with the four newer 403-based submit tools.
- quality_score input schema declares integer but accepts 0.0-1.0 decimals. Schema fix queued.
v0.9.0
beta21 Apr 2026
First public-beta drop. The alpha suffix is gone: core generation, Brain integration, anonymous signup, and the MCP bridge are all production-ready for day-to-day use. Sharp edges remain around edit flows and marketplace packaging; those are 1.0 material.
Highlights since alpha3
- SpawnActorFromClass crash fixed. UE 5.7 introduced a stricter pin-allocation order; the fix allocates default pins before PostPlacedNewNode and reconstructs the node so 'expose on spawn' pins lay out correctly. Unblocks every 'spawn X on event Y' prompt.
- Signup user-agent now sends version 0.9.0 (was 0.9.0-alpha3). Admin dashboards can segment active installs by version.
- Dependent Brain services live: /admin/entries (paginated, filterable), /admin/analytics/timeline (30/90d daily series), /admin/analytics/top-entries + top-contributors, /admin/audit (immutable action trail), /admin/settings (config view + runtime overrides).
- Companion admin site at woalzcraft.woalz.com/admin ships with: dashboard sparklines, keys manager with activity dots + stale detection + sort/filter/details, entries browser, review queue with diff viewer, stale flags, 90-day analytics, audit log browser, settings viewer.
Rolled up from the alpha series
- Phase 2.7. WOALZCRAFT.md project rules with YAML frontmatter parser, AI system-prompt injection, and a WoalzCraft.ReloadWoalzcraftMd console command.
- Phase 2.8. Plain-English diagnostic translator covering 8 error categories: pin mismatch, unhandled cast, null ref, unconnected pin, duplicate decl, missing asset, unknown function, circular dep.
- Phase 2.10 and 2.10-next. MCP server over localhost, Copy Claude Code / Cursor Config + Regenerate MCP Token buttons, full generate_blueprint and edit_blueprint async bridge (90s timeout, IsEngineExitRequested safety).
- Phase 2.11. Multi-version UE awareness (5.3 to 5.7) with FWoalzUEVersion and IsAvailableFor(major, minor) in the node lookup table.
- Phase 2.13. Anonymous signup and plugin auto-bootstrap. FWoalzMachineFingerprint (SHA-1 of computer|user|salt, 32 hex), FWoalzBrainClient::EnsureKeyAsync (self-guarding, crash-safe), bHasAttemptedAutoSignup flag, WoalzCraft.RetryAutoSignup + Reset Brain Key button in Project Settings. Server: POST /auth/signup-anonymous with 5/hr per-IP limit, 3-key lifetime cap per fingerprint, auto-rotation on duplicate.
- Phase 1.2. Cloud-refreshed node catalog via GET /entries/nodes/catalog?ue5=<v> with local JSON fallback.
Known rough edges
- BrainWriteKey prefix mismatch. Existing installs that pasted a wbk-r_ key in the WriteKey slot will 403 on auto-submit. Fix is cosmetic (reissue a wbk-w_ key); plugin does not yet warn on the mismatch.
- Marketplace packaging (BuildPlugin -Rocket) works. Fab and UE Marketplace listings land with 1.0.0.
- Email-opt-in community to user tier upgrade (Phase 2.13b) not yet shipped in plugin UI; tracked for 0.10.0.
v0.9.0-alpha2
alpha20 Apr 2026
Phase 2.7 (WOALZCRAFT.md project rules), Phase 2.10-next (generate/edit async bridge), and Phase 1.2 (node catalog cloud migration). Developer-UX polish around Project Settings buttons.
Phase 2.7. WOALZCRAFT.md infrastructure
- Project-level rules file is now first-class. Plugin looks for <ProjectDir>/WOALZCRAFT.md or <ProjectDir>/Content/WOALZCRAFT.md on startup, parses YAML frontmatter + markdown body, injects into the AI system prompt (semi-static layer, perfect for prompt caching).
- Frontmatter keys: genre, target_ue_versions, naming_convention, naming_examples, parent_class_preferences, forbidden_patterns, preferred_patterns, tags. Unknown keys become warnings, not parse failures.
- MCP tool get_woalzcraft_md unstubbed. Returns structured fields + raw body + parse warnings + source path. loaded=false when no file present (informational, not error).
- Console command WoalzCraft.ReloadWoalzcraftMd re-reads from disk without editor restart.
- 8 automation tests under WoalzCraft.WoalzcraftMd.*
Phase 2.10-next. generate/edit async bridge
- Flagship MCP tools are no longer stubs. Both generate_blueprint and edit_blueprint run the full AI-request to asset-creation pipeline.
- Tool handler runs on a background thread (dispatcher's pool), blocks on TFuture<FWoalzMcpResult> for up to 90s.
- Dispatches FAIRequestManager::SendBlueprintRequest on the game thread via AsyncTask(GameThread, ...).
- HTTP callback (fires on game thread after AI responds) calls FBlueprintGenerator::GenerateFromAIResponse to create / modify the .uasset inside a scoped transaction.
- IsEngineExitRequested checked at dispatch AND in the callback; no crashes if editor is shutting down mid-request.
- edit_blueprint v1 documented limitation: AI gets target name + change description, not full current BP JSON. v0.9.0-beta will extract BP-JSON serialisation into a reusable helper for MCP edit too.
Phase 1.2. Node catalog cloud migration
- Brain: GET /entries/nodes/catalog aggregates node_ref entries by category into the plugin-compatible NodeLookup.json shape ({categories: {Events: {nodes: [...]}, ...}}).
- Plugin: BlueprintLookupTable::RefreshFromBrainAsync now calls /entries/nodes/catalog (was calling /entries/nodes which returns a flat list and couldn't be parsed). Local NodeLookup.json fallback unchanged.
- Entries without node_name are skipped (would collide on 'Unknown'). Response includes total, total_entries, skipped_no_name, tier_filter, ue5_filter for observability.
- 2 new Brain tests: mount check + response-shape guard.
Dev UX polish
- Project Settings buttons now render via IDetailCustomization (FWoalzSettingsCustomization). Real Slate SButton widgets that actually respond to clicks. Replaces CallInEditor UFUNCTION meta which doesn't render reliably on UDeveloperSettings.
- Removed duplicate non-working CallInEditor buttons.
- BuildClaudeCodeConfigCommand emits single-line format (no bash continuations). Pastes cleanly in PowerShell, cmd, and zsh alike.
- Includes --scope user so registration persists across directories.
Known rough edges
- Full BP-JSON serialisation helper, landing in v0.9.0-beta, will unlock richer edit_blueprint context.
- Phase 2.13 anonymous-key distribution is a blocker for Marketplace; tracked for alpha3.
- IDetailCustomization refactor currently registered for UAIAssistantSettings only; extends to other customizable panels later.
v0.9.0-alpha
alpha19 Apr 2026
MCP integration is the flagship: Claude Code, Cursor, Cline, Windsurf, and Claude Desktop can drive Blueprint operations in UE5 using your subscription. 32 tools, 6 resources, 6 prompts. Deployed and validated end-to-end on a real UE5 project.
Embedded MCP server
- Default OFF. Opt in via Project Settings > Woalz Craft > MCP Integration.
- HTTP/1.1 listener on 127.0.0.1 with auto port discovery (7777 to 7799).
- Bearer-token auth regenerated per session, written to Saved/WoalzCraft/mcp_token.txt.
- 60 req/min rate limit per session; 30s game-thread dispatch timeout.
- One-click Copy Claude Code Config / Copy Cursor Config buttons in the settings panel.
Tools, resources, prompts
- 32 tools across generation (5), inspection (9), analysis (4), memory (3), Brain curation (8), telemetry and viz (3).
- 6 resources: woalzcraft://{blueprints, project-index, woalzcraft-md, brain-stats, skill-progress, session-summary}.
- 6 prompts: /woalzcraft.{debug-bp, design-system, review-bp, improve-brain, curate-session, onboard-project}.
- Stubs return not_available_yet cleanly until the dependent phase ships. Tool contract is stable; implementation fills in without breaking MCP clients.
Brain curation flywheel (Phase 2.10b)
- POST /entries/{id}/propose-correction. Claude Code proposes fixes for stale entries; enters the Sahabat review queue.
- POST /entries/{id}/flag-stale. Mark entries broken in the current UE version.
- POST /contribute/node-ref and POST /contribute/pattern. New entry types.
- GET /brain-stats. Aggregate counts for the resource feed.
- Admin review queue at GET /admin/review-queue with merge/reject and reviewer note.
- Rate limited: 20 proposals / proposer / 24h; duplicate-diff detection across 7 days.
- New tables: correction_proposals, stale_flags (migration 003).
Post-deploy hotfixes
- Fix: MCP tools/call response wraps output in spec-compliant {content:[{type:'text',text:...}],structuredContent:...,isError:false}. Previously Claude Code couldn't parse raw tool JSON and reported responses as empty despite successful execution.
- Fix: BuildClaudeCodeConfigCommand emits single-line, positional URL (not --url flag), with --scope user default. Prior multi-line bash continuation format broke on PowerShell paste.
- Added: FAutoConsoleCommand triplets for copy/regenerate actions (WoalzCraft.CopyMcpConfig, WoalzCraft.CopyCursorConfig, WoalzCraft.RegenerateMcpToken). Reliable alternative to the CallInEditor buttons on UDeveloperSettings.
- Fix: BlueprintLookupTable Brain-refresh error log now emits Warning (not Error) when Brain returns non-JSON / non-matching-schema body. Local NodeLookup.json remains the working catalogue; Brain refresh is best-effort.
- Added: resources/templates/list handler returning an empty resourceTemplates array. Silences MethodNotFound noise from Claude Code's init-time capability probe.
v0.9.0-alpha3
alpha19 Apr 2026
Phase 2.13 shipped. New users no longer need to paste an API key to get Brain-powered Blueprint suggestions. On first launch the plugin computes a stable machine fingerprint and asks the Brain for a community-tier key (60 req/hr).
Plugin side
- WoalzMachineFingerprint.{h,cpp}. Stable SHA-1 of computer_name | user_name | product_salt, truncated to 32 hex chars. Non-reversible, not shared across Woalz products.
- FWoalzBrainClient::EnsureKeyAsync. One-shot, self-guarding. Bails if BrainReadKey is already set, if bHasAttemptedAutoSignup is already true, or if BrainApiUrl is empty. Sets the attempt flag BEFORE the HTTP call (crash-safe against retry storms). IsEngineExitRequested checked in both the HTTP callback and the nested game-thread AsyncTask.
- Wired into FWoalzCraftEditorModule::StartupModule as step 2a, before the Brain node-catalog refresh so the refresh benefits from a freshly-provisioned key in the same session.
- Console command WoalzCraft.RetryAutoSignup clears the attempt flag and retries. No-op if BrainReadKey is already set.
Brain side (v0.7.1)
- POST /auth/signup-anonymous. Accepts {machine_fp, plugin_version}, returns {raw_key, key_id, tier, rate_limit_per_hour}.
- Rate-limited to 5/hour per IP via slowapi.
- Lifetime cap of 3 keys per fingerprint (MAX_KEYS_PER_FINGERPRINT). Exceeded returns 409 with a support-path message.
- 409 if an active key already exists for the fingerprint (raw_key never leaves Brain DB, so 'lost key' routes to support).
- Fingerprint validator normalises case, enforces ^[a-f0-9]{16,64}$.
- Migration 004_auth_expansion.sql adds machine_fp, email, upgraded_at, rate_limit_override to api_keys (all nullable, backwards-compatible). Tier enum widened to community | user | read | write | admin.
- Limiter extracted to app/limiter.py to avoid circular imports between the new router and app/main.py.
- 8 new tests under tests/test_auth_signup.py covering happy path, fingerprint validation, case normalisation, dedup, lifetime cap, and rate-limit trip.
Known rough edges
- Email-opt-in upgrade (Phase 2.13b) not in this alpha; tracked for 0.9.0 proper.
- Users with an existing BrainReadKey are unaffected. The bootstrap only fires when the key is empty.
v0.8.0
stable18 Apr 2026
Phase 1 of the Master Roadmap. Turns the plugin from a developer-facing tool into an AI mentor first-install beginners can use without feeling overwhelmed. Prompt caching, adaptive few-shot selection, and intent-aware model routing land here.
Beginner Mode (default ON)
- Project Settings > Plugins > Woalz Craft > UI Complexity > Beginner Mode.
- When ON, the chat panel hides internal machinery: [PLAN], [EXECUTE], [EDIT] intent tags no longer surface in chat bubbles; numeric confidence percentages become plain-English 'Starting...' / 'Reply ok to proceed'; 'score 0.92' becomes 'quality 92%' in generation and review messages.
- Raw AI response dumps on failure are suppressed; experts still see them.
- Debug Analyzer section headers become Static Checks / Pattern Checks / Advanced AI Review (coming soon) instead of Layer 1 / 2 / 3.
- Expert users flip Beginner Mode OFF to see everything the AI is doing under the hood.
Prompt caching (Phase 1.1)
- System prompt now built in three layers (static prefix / semi-static prefix / volatile suffix).
- Anthropic requests include cache_control breakpoints and the anthropic-beta: prompt-caching-2024-07-31 header when layers exceed 4 KB.
- Cache stats (input / cached / creation / output tokens + hit rate) logged per request for cost observability.
- Expected token-cost reduction around 30 to 40% on repeat sessions. Zero behaviour change for providers without caching (Ollama, Gemini, OpenAI-Compatible).
Adaptive few-shot selection (Phase 1.3)
- Number of few-shot examples injected into the prompt now scales with the user's ask: short prompts ('make a pickup') to 2 examples (saves tokens); medium and complex prompts get the full configured budget.
- Your NumFewShotExamples setting remains a hard ceiling. Adaptive only scales down, never above.
Intent-aware model routing (Phase 1.4)
- When Chat Agent multi-model routing is enabled: PLAN / DEBUG to deepest reasoning tier (Claude Opus / OpenAI o1 / Gemini 2.5 Pro). EXECUTE to balanced tier (Claude Sonnet / gpt-4o / Gemini 2.5 Flash). EDIT / CHAT / CLARIFY to cheapest fast tier (Claude Haiku / gpt-4o-mini / Gemini Flash-Lite).
- Ollama and OpenAI-Compatible (local) providers keep the user's configured model. Local model catalogs are server-specific and aren't routed.
Cloud node catalogue refresh (Phase 1.2)
- On editor startup, the plugin asynchronously refreshes its node catalogue from Brain /entries/nodes when Brain is configured.
- Bundled Resources/NodeLookup.json is always the safety floor. A 404 or parse failure from Brain preserves the local catalogue atomically.
- Enables Brain contributors to expand the catalogue beyond the 50 shipped core entries without a plugin release.
Older releases (v0.7.x and earlier) are summarised in the plugin repo's docs/REVIEW_FIXES_TRACKER.md. Brain-side changes are called out inline when they affect the plugin.