WoalzCraft

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.

Latest · v0.9.0-alpha410 May 2026
  1. 10 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.
  2. v0.9.0

    beta

    21 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.
  3. 20 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.
  4. 19 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.
  5. 19 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.
  6. v0.8.0

    stable

    18 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.