Conversation
…9843) Extract OSRSPotionInfo and OSRSFoodInfo from OSRSItemPanel inline code into dedicated components. Create 6 new sub-components for frontmatter fields: OSRSAbout, OSRSItemDetails, OSRSPrayerInfo, OSRSGatheringInfo, OSRSMarketStrategy, OSRSTradingTips. Wire all 8 into OSRSItemPanel with conditional rendering via type guards. Panel shrinks by 250 lines — all section rendering is now delegated. OSRSItemDetails always renders (basic stats from existing frontmatter). Other sections render conditionally when frontmatter data is present.
…6.1 (#9844) * fix(mc): fix Docker build — sha1 checksums, Gradle 9, Fabric Loom 1.16.1 - Replace ADD --checksum=sha512 with curl + sha1sum (Docker only supports sha256 for ADD --checksum; Modrinth only provides sha1/sha512) - Upgrade Fabric Loom 1.9-SNAPSHOT → 1.16.1 (required for 1.21.11 yarn mappings, fixes "Unsupported unpick version" error) - Upgrade Gradle base image 8 → 9 (Loom 1.16.1 requires Gradle 9) - Verified: local docker build succeeds, all 8 mod checksums pass, Rust cdylib + Gradle JAR bundle working * feat(mc): add RCON-based e2e tests inside apps/mc - RCON TCP client helper with auth + command execution - Health spec: list players, check difficulty, get seed - Global setup polls RCON until server is ready (180s timeout) - e2e target in project.json spins up container, waits for RCON, runs vitest, captures logs, cleans up
Contributor
Author
Dependency ReviewThe following issues were found:
Snapshot WarningsEnsure that dependencies are being submitted on PR branches and consider enabling retry-on-snapshot-warnings. See the documentation for more information and troubleshooting advice. License Issues.github/workflows/utils-unreal-plugin-win-cicd.yml
OpenSSF Scorecard
Scanned Files
|
#9846) * fix(firecracker-ctl): remount scratch as private propagation for jailer pivot_root Kubernetes emptyDir mounts inherit shared propagation from the kubelet. The jailer's pivot_root() syscall fails with EPERM on shared mounts. Remount scratch dir as private during init_jailer() using the existing CAP_SYS_ADMIN capability — avoids needing privileged: true. * test(firecracker-ctl): add e2e test suite for REST API Covers health, input validation, VM lifecycle (create/poll/destroy), and concurrency limits. Tests are environment-aware — work both with and without /dev/kvm (without KVM, validates routing and error handling).
…2 starter overrides (#9848) * feat(astro-kbve): add MDX versioning fields and migrate 2 items to v2 data-driven format Add mdx_version (int32) and mdx_updated (string) to proto field 40-41 and OSRSExtendedSchema for tracking migration state per item. Migrate yew-logs and 3rd-age-amulet to v2 format: - Move about text, market strategy, trading tips into frontmatter - Remove redundant markdown sections (Item Details, Equipment Info, Combat Stats, Fletching table, Related Items — all rendered from existing frontmatter by sub-components) - MDX body shrinks from ~80 lines to 6 lines (panel + adsense) - Tag both with mdx_version: 2, mdx_updated: 2026-04-09 * Revert "feat(astro-kbve): add MDX versioning fields and migrate 2 items to v2 data-driven format" This reverts commit 31bd77f. * feat(astro-kbve): add MDX versioning, v2 generator output, and migrate 2 overrides Add mdx_version (field 40) and mdx_updated (field 41) to proto and Zod schema for tracking migration state per item. Update generate-osrs-items.mjs to output v2 body (panel + adsense only) when override has mdx_version >= 2, otherwise legacy v1 markdown body. Migrate yew-logs (_1515) and 3rd-age-amulet (_10344) overrides to v2: - Move markdown body sections into frontmatter fields (about, market_strategy, trading_tips) - Tag with mdx_version: 2, mdx_updated: 2026-04-09 - Override body becomes empty — generator produces slim v2 MDX
nx affected --target=test was auto-detecting vitest.config.ts and running e2e tests without a container. The e2e tests require the explicit e2e target which handles container lifecycle. Adding a noop test target prevents this.
…9841) * feat(discordsh): wire proto loot tables and abilities into dungeon combat (#9838 task 1) - Add `npc_ref` field to EnemyState for proto loot table lookup - Add `roll_npc_loot()`, `roll_npc_gold()`, `npc_xp_reward()` in proto_bridge that read directly from NPC proto LootTable entries (item_ref, drop_rate, quantity, gold range) - Add `proto_initial_intent()` that reads NPC abilities from proto (ability_to_intent mapper) with full fallback to legacy hardcoded intent table - Wire proto loot into handle_enemy_deaths: try proto drops first, fall back to legacy roll_loot - Proto gold per kill overrides random 5-15 when defined - All 701 tests pass — zero-data NPCs still use legacy tables seamlessly - Next: populate NPC MDX files with loot/ability data to activate proto path * feat(discordsh): add dialogue trees, crafting system, and faction reputation (#9838 tasks 2,3,6) Task 2 — NPC Dialogue Trees: - Add ActiveDialogue type (npc_ref, npc_name, current_node_id) on SessionState - Add DialogueTalk(node_id) GameAction + dlg route in router.rs - Add handle_dialogue_navigate() — walks proto DialogueTree nodes, renders text as logs - Add proto_bridge::get_npc_dialogue_tree/get_dialogue_node/npc_has_dialogue lookups - Phase-gated to City/Merchant rooms; ends automatically on leaf nodes Task 3 — Crafting System: - Add Craft(item_ref) GameAction + craft route in router.rs - Add proto_bridge::available_recipes() — filters by inventory contents + skill level - Add proto_bridge::execute_craft() — consumes ingredients, produces output, returns XP - Add handle_craft() in logic.rs — grants foraging XP on successful craft - Phase-gated to City/Merchant rooms - Reads CraftingRecipe from itemdb.proto (ingredients, skill, skill_level, xp_reward) Task 6 — Faction Reputation: - Add faction_standing: HashMap<String,i32> to PlayerState (persisted via serde) - Add proto_bridge faction helpers: npc_faction(), faction_price_modifier(), faction_tier_label() - Define reputation tiers: Hostile(-50), Unfriendly(0), Neutral, Friendly(50), Honored(100) - Merchant price modifier: -15% at Honored, +15% at Hostile All features are proto-driven with zero data populated — they activate when NPC/item MDX files get dialogue_tree, recipes, and faction fields added. Zero behavior change until then. All 701 tests pass. * feat(bevy_chat): scaffold IRC-backed chat crate for MUD cross-platform communication (#9838 task 7) New crate: packages/rust/bevy/bevy_chat — headless async IRC client with optional Bevy plugin. Core types: - IrcConfig — server/port/TLS/nick/channels, from_env() for K8s deployment - ChatMessage — structured message with MessageKind enum (Chat, Kill, RareDrop, Capture, QuestComplete, AreaUnlocked, Death, Craft, System, Custom) - ChatClient — tokio async IRC client: connect(), send(), subscribe(), PING/PONG keepalive, auto-join channels, PRIVMSG parse with fallback Wire format: [KIND] sender@platform: content {optional json payload} - Roundtrip encode/decode via to_irc_privmsg() / from_irc_privmsg() - Unstructured IRC messages fall back to plain Chat kind Optional Bevy plugin (behind "plugin" feature): - ChatPlugin — bridges crossbeam channels into ECS - ChatInbox / ChatOutbox resources for systems to read/write - IncomingChatEvent fired each frame from inbox drain - Isometric game adds plugin; Discord bot uses ChatClient directly Channel conventions: - #global — player chat (both platforms) - #world-events — kills, drops, captures, quest completions - #dungeon — dungeon-specific session events Added bevy_chat dependency to discordsh-bot Cargo.toml. 8 unit tests (message roundtrip, PRIVMSG parsing, self-echo filtering).
…d compat (#9851) OSRSTeleportSchema.destinations now accepts both plain strings ("Edgeville") and objects ({ name: "Edgeville" }). Fixes build failure on amulet-of-glory-6 where existing override used string array format.
…eld (#9853) * fix(firecracker-ctl-e2e): expect 422 for missing required field Axum returns 422 (not 400) when serde deserialization fails on a missing required field. All 15 e2e tests now pass. * test(firecracker-ctl-e2e): add mock firecracker for full execution tests Mock replaces the real firecracker binary with a shell script that reads the code drive and prints its content to stdout. Exercises the entire firecracker-ctl pipeline (API → config gen → spawn → stdout capture → cleanup) without requiring /dev/kvm. Adds execution.spec.ts (6 tests): Node.js code, Python code, empty code fallback, stdout capture, timeout handling, VM list tracking. All 21 tests pass across 5 spec files.
…format (#9854) Batch-migrate all override files using migrate-overrides-v2.mjs: - Extract markdown body sections into frontmatter fields (about, market_strategy, trading_tips) - Tag all overrides with mdx_version: 2, mdx_updated: 2026-04-09 - Override bodies cleared — generator produces slim v2 MDX output 1,919 files migrated, 2 already v2 (yew-logs, 3rd-age-amulet). Net reduction: ~39K lines of redundant markdown removed.
#9855) * chore(npcdb): populate 23 NPC MDX files with loot tables, abilities, and factions (#9850) Adds proto-ready frontmatter to all combat NPCs: Loot tables (per-level tier): - Level 1 (slime): potion, rations, vitality-potion, whetstone | 3-8 gold | 15 XP - Level 2 (skeleton): bandage, bomb, fire-flask, iron-skin-potion, trap-kit, whetstone | 5-12 gold | 30 XP - Level 3 (wraith): ward, bomb, campfire-kit, rage-draught, phoenix-feather, antidote, smoke-bomb | 8-18 gold | 50 XP - Level 5 (boss): ward, potion, bomb, teleport-rune, campfire-kit, phoenix-feather, elixir, smoke-bomb | 15-30 gold | 100 XP Abilities (maps to proto_initial_intent): - attack/heavy-attack/defend/charge/aoe-attack with exact damage values from legacy table - poison (cave-spider, venomfang-lurker) and burn (ember-wisp) with duration Factions (3 factions): - crystal-order: glass-slime, crystal-bat, crystal-golem, glass-golem, glass-assassin, crumbling-statue - shadow-court: shadow-wraith, shade-stalker, phantom-knight, void-walker, the-shattered-king - deep-wardens: skeleton-guard, bone-archer, cursed-knight, stone-sentinel, corrupted-warden Skipped: green-toad, meadow-firefly, woodland-butterfly (ambient, non-combat) Skipped: wraith-executioner (no legacy data) Proto paths in discordsh-bot activate after npcdb.json is regenerated via Astro build. * chore(discordsh): add IRC env vars to K8s deployment for bevy_chat (#9850) Adds IRC_HOST, IRC_PORT, IRC_NICK, IRC_CHANNELS env vars to the discordsh StatefulSet, pointing at the existing ergo-irc-service in the irc namespace. Nick: mud-discordsh Channels: #global, #world-events, #dungeon The bevy_chat ChatClient::from_env() reads these to connect on bot startup.
… RDP password injection (#9809) (#9856) Add post-boot autologon Job that sets Windows registry keys through the QEMU Guest Agent (virsh guest-exec), eliminating manual VNC password entry. Update Guacamole deployment with init container that injects the RDP password from the existing sealed secret at runtime.
…ion (#9860) Adds a `packages` field to CreateVmRequest that attaches a pre-built pip wheel cache as an additional drive. The init job (v6) downloads kbve + fudster wheels at deploy time, and the VM init script installs them offline via `pip install --no-index` before running user code. - firecracker-ctl: packages manifest (vdc) + pip-cache.ext4 (vdd) drives - init job: builds pip-cache.ext4 with pre-downloaded wheels - VM init script: mounts cache, runs pip install from local wheels - e2e: packages.spec.ts (5 tests), updated mock to report drive attachment - 26/26 e2e tests pass
Bring back the MC service from git history (removed in #9362): - /api/v1/mc/players — RCON-polled player list with Mojang profile enrichment (UUID + skin URL), 15s refresh, DashMap cached - /api/v1/mc/textures/{hash} — reverse proxy for textures.minecraft.net skin PNGs, 24h immutable cache These endpoints are required by McSkinViewer.tsx and McPlayerList.tsx which are still active in the frontend. Service is optional — only initializes when MC_RCON_HOST is set.
… lines (#9850) (#9863) Adds recipes frontmatter to craftable items using existing raw materials. All recipes use items already in the itemdb so both games can craft them. Alchemy (6): potion, antidote, vitality-potion, iron-skin-potion, rage-draught, elixir Cooking (5): rations, garlic-bread, spicy-ramen, fried-fish-taco, lobster-soup Smithing (4): leather-vest, rusty-sword, iron-mace, chain-mail Crafting (8): bandage, campfire-kit, bomb, whetstone, fire-flask, trap-kit, ward, smoke-bomb Proto paths activate after itemdb.json is regenerated via Astro build.
…ource of truth (#9861) * refactor(astro-kbve): remove override system — MDX files are single source of truth Delete data/osrs-overrides/ directory (1,922 files) — all curated content is now in the generated MDX frontmatter. Delete migrate-overrides-v2.mjs — migration is complete. Rewrite generate-osrs-items.mjs as bootstrap-only tool: - Creates MDX for NEW items only (skips existing files) - All new items start as v2 (slim body, panel + adsense) - Existing MDX files are never overwritten - Use --force flag to regenerate all (destructive) * fix(astro-kbve): use ID-based matching in generator to protect SEO slugs Generator now indexes existing MDX files by osrs.id frontmatter field instead of filename matching. Existing slugs are never changed or overwritten. New items get slug from name, with collision avoidance against all existing slugs. * fix(astro-kbve): replace --force with --audit, generator never overwrites Remove destructive --force flag entirely. Generator only creates new items and never overwrites existing files under any circumstance. Add --audit flag for read-only inspection: - Reports new items that would be created - Flags items where Wiki name differs from existing slug (SEO preserved) - Writes nothing to disk
…9862) Rebuilds pip-cache.ext4 every Sunday 04:00 UTC with latest kbve + fudster wheels. Uses atomic mv to prevent partial reads during swap. Reuses rootfs-init network policy label for PyPI egress access.
…workflow, KBVEROWS wiring (#9809) (#9864) Add utils-unreal-plugin-win-cicd.yml for native Windows UE5 plugin builds on the KubeVirt VM runner (UE5-Win). Add runner install/update Job that manages the GitHub Actions agent via QEMU Guest Agent + file-server proxy. Wire KBVEROWS into ci-publish.yml as unreal-win64 package type with version.toml tracking.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release: Dev → Main
23 atomic commits ready for main
Features
267fd1e)c43394d)9662876)bf63d38)6dfaa41)58a71ea)d051fc1)13b78dd)d5cd8e6)b87432d)Bug Fixes
fe06ef3)34e0474)54f246b)be372eb)6d15e81)Refactoring
1469923)Chores
ec99ce7)08d9c21)f8803a1)0a9f98c)6c2eda6)8541bac)Other Changes
ad1069f)This PR is automatically maintained by CI — KBVE Studio