Conversation
PR is created first so it is visible for investigation if the build fails. astro build runs as a gate before auto-approve and squash-merge.
…debar (#8205) * feat(astro-kbve): jukebox layout — YouTube player with genre/track sidebar Closes #8202 (phase 1) - AstroJukebox.astro: server-side wrapper, reads yt-tracks/yt-sets from all music/*.mdx frontmatter via getCollection('docs') - ReactJukebox.tsx: React player with genre sidebar, YouTube iframe embed, track list, prev/next controls, ?yt= URL param support - content.config.ts: extend docs schema with yt-tracks/yt-sets fields - music/index.mdx: replace old content with jukebox splash page * feat(astro-kbve): two-deck DJ jukebox with YT IFrame API, R3F particles, Starlight theming - YouTube IFrame API integration with controls:0 (no native YT UI) - Two-deck system: Deck A plays, Deck B preloaded muted; swap on track end - CSS flex-grow transition (0.65s cubic-bezier) for DJ-style visual swap - Stale-closure-safe st ref mirrors state for YT onStateChange callbacks - R3F AmbientParticles canvas overlay (pointer-events: none) over active deck - 80 THREE.Points particles drifting upward, speed driven by playing state - All colors via Starlight CSS variables (--sl-color-accent, --sl-color-bg, etc.) - triggerTransition: unMute + playVideo incoming, 700ms timeout swap + cue next Closes #8202 * feat(astro-kbve): jukebox controls bar, pixel shader overlay, narrow deck B preview - Add full transport controls: prev, rewind -10s, play/pause, forward +10s, next (DJ mix) - Add progress bar with seek, time display (current / duration), volume slider - Add pixel grid density knob (tweaks GLSL uPixelSize uniform live) - Replace AmbientParticles with GLSL CRT dot-matrix pixel overlay per deck - Vertex shader writes clip-space directly — always fills deck canvas - Fragment: dot mask + scanlines + vignette + heartbeat pulse - Intensity lerps up/down based on active+playing state - Inactive deck (next) is now a fixed 130px narrow tall rectangle - CSS flex transition: 1 1 0 <-> 0 0 130px over 0.65s - Semi-transparent dim overlay + UP NEXT badge, pointer-events: none * feat(astro-kbve): real pixelation via WebGLRenderTarget + NearestFilter, lucide buttons - Replace dot-matrix GLSL overlay with proper two-pass pixelation: - Pass 1: render animated retro pattern (scan band + random lit pixels) to a low-res WebGLRenderTarget at (canvas / pixelSize) resolution - Pass 2: display via NearestFilter upsampling = real chunky pixel blocks - useEffect recreates render target on canvas resize or pixelSize change - gl.setRenderTarget in useFrame keeps main scene decoupled - Default pixelSize = 6 (adjustable 2-24 via the knob) - Replace emoji/text transport buttons with lucide-react icons: SkipBack, Rewind, Play/Pause, FastForward, SkipForward, Volume2, Grip * feat(astro-kbve): CSS iframe pixelation, Rain/Ocean ambient FX with Web Audio synth - CSS scale trick for real video pixelation: iframe renders at (1/pixelFactor) CSS size, scale(N) back up, image-rendering: pixelated requests nearest-neighbour GPU compositing PX knob in controls: 1x (off) to 8x (very chunky) - Repurpose R3F Canvas as ambient FX overlay spanning both decks: Rain GLSL: 3-layer falling streak fields with wind tilt + fading tails Ocean GLSL: 5-layer sine waves with foam crests, fill, sparkle highlights Canvas keyed on mode — remounts cleanly on switch R3F now strictly ambient, not trying to filter the video - Web Audio API ambient sound synthesis (no audio files): Rain: white noise -> bandpass filter (1200Hz Q=0.5) Ocean: low noise -> lowpass (400Hz) + LFO swell oscillator (0.12Hz) Volume slider drives ambient gain alongside YT volume - FX selector: Off / Rain / Ocean buttons (Lucide: X, CloudRain, Waves) * feat(astro-kbve): custom tooltips, track titles via oEmbed, cloud shader FX - Custom Tooltip component: 250ms delay, positioned above button, Starlight CSS var styling (bg-nav, text, hairline border, drop shadow), caret arrow pointing down, pointer-events: none - not-content class on ReactJukebox root div (Starlight prose isolation) - Track titles via YouTube oEmbed API (no key, CORS-enabled): fetches all tracks for current genre on load/genre-change, fetchedIds ref prevents duplicate requests, displays titles[id] ?? id as fallback in tracklist + controls bar - Cloud volumetric shader (mrdoob example, adapted): iResolution + iTime uniforms fed from useThree().size + clock, opacity driven by cloud luminance so video shows through thin areas, added as 'clouds' AmbientMode with Cloud lucide icon - Tooltip wrapped on all transport buttons, FX buttons, PX knob label
Contributor
Author
Dependency ReviewThe following issues were found:
License Issues.github/workflows/ci-docker-smoke-test.yml
apps/kbve/axum-kbve/Cargo.toml
packages/rust/bevy/bevy_kbve_net/Cargo.toml
OpenSSF Scorecard
Scanned Files
|
…8210) Add apps/kbve/astro-kbve/public/isometric/assets to paths-ignore in both the JS/TS+Python job and the Rust job. These files are machine-generated (wasm-bindgen + Vite bundle) and were producing 27 false positive alerts against auto-deployed build output.
) * chore(irc): remove ergo submodule and drop prometheus integration - Remove apps/irc/ergo git submodule; no longer needed since we have our own IRC proxy (irc-gateway) - Delete ergo-servicemonitor.yaml and ergo-dashboard-configmap.yaml; metrics now flow through Vector/ClickHouse pipeline - Remove metrics port 6060 from ergo deployment and service manifests * chore(irc): switch ergo image to upstream ergochat/ergo:stable
…r shim + winit resize defer (#8211) * fix(isometric): Safari WebGPU shim — setBindGroup SharedArrayBuffer copy + winit resize defer Bug 1 (fatal crash): wgpu 27.x passes Uint32Array views backed by SharedArrayBuffer to GPURenderPassEncoder.setBindGroup(). Safari's WebGPU enforces the spec and rejects SharedArrayBuffer-backed typed arrays; Chrome is lenient. Fix: intercept setBindGroup on both RenderPassEncoder and ComputePassEncoder, copy any SharedArrayBuffer-backed view into a fresh ArrayBuffer-backed Uint32Array before forwarding. Bug 2 (RefCell panic): Safari fires resize/orientationchange events synchronously inside requestAnimationFrame callbacks, re-entering winit's web event-loop runner and double-borrowing its internal RefCell. Fix: on Safari only, wrap matching addEventListener calls to defer the listener via setTimeout(0), ensuring events always arrive between frames. * fix(isometric): apply Safari WebGPU shim to arcade component and public index Same setBindGroup SharedArrayBuffer copy + winit resize defer shim applied to: - AstroIsometric.astro (arcade/isometric/ embedded route) - public/isometric/index.html (direct /isometric/ route) * refactor(isometric): consolidate Safari shim into safari-shim.js Move duplicated inline shim code into a single shared file served at /isometric/safari-shim.js. All three entry points now load it with a single <script> tag instead of each carrying a copy of the logic. - apps/kbve/isometric/public/safari-shim.js (source, Vite public dir) - apps/kbve/astro-kbve/public/isometric/safari-shim.js (astro static mirror) - inline code removed from index.html, public/isometric/index.html, AstroIsometric.astro
Submodules were causing VS Code instability and are no longer needed. Pumpkin will be consumed as a pre-built Docker base image instead. - Remove apps/mc/pumpkin and apps/postgres submodules - Delete .gitmodules (no submodules remain) - Remove submodule init/verify/deinit steps from all CI workflows - Remove submodule-related logic from kbve.sh (init, deinit, cleanup) - Remove submodule-update target from apps/mc/project.json - Clean up .nxignore, .dockerignore, and CodeQL paths-ignore
…ched build (#8216) Remove Dockerfile.base and BUILD_BASE arg pattern across all apps (axum-kbve, discordsh, cryptothrone, mc). Single Dockerfile with cargo-chef + BuildKit cache mounts handles everything. On arc-runner, local cache backed by persistent PVC replaces the GHCR base image warm-up step, eliminating the build_base CI job entirely.
The shim always forwarded 5 arguments to the native setBindGroup, even for 2-arg calls (no dynamic offsets). Safari interpreted the trailing undefined values as the 5-arg overload and rejected them. - Preserve exact argument count so 2-arg calls stay 2-arg - Always copy typed array offsets into a fresh local-realm Uint32Array (handles both SharedArrayBuffer and cross-realm typed arrays) - Fix index.html script path to use relative URL (vite base handles prefix) - Add explicit safari-shim.js copy in build script to survive compression
…inor journal entry.
…8218) The dev server's require-corp COEP policy blocked the WebSocket connection to the Lightyear game server on a different port. Switching to credentialless matches production and still enables crossOriginIsolated for SharedArrayBuffer/WASM threads.
* feat(proto): add clickhouse.proto foundation for gRPC pipeline #8134 Add ClickHouseService proto with typed RPCs for the React <-> Axum <-> ClickHouse gRPC pipeline: QueryLogs, QueryLogStats, RawQuery, Insert, ExecuteDdl, and server-streaming TailLogs. Wire into Jedi build.rs and regenerate all proto stubs. * feat(codegen): add clickhouse zod config and register in gen-all pipeline * chore(codegen): generate clickhouse binpb descriptor and zod schema Run full proto-to-zod pipeline producing clickhouse.binpb descriptor and clickhouse-schema.ts with typed Zod validators for all ClickHouse service messages. Regenerated existing schemas (timestamp + formatting).
Server now spawns dual listeners — WebSocket on :5000 and WebTransport (QUIC/UDP) on :5001. A self-signed ECDSA P-256 cert is auto-generated at startup; its SHA-256 digest is served via the game-token endpoint so WASM clients can validate the connection. - axum-kbve: add webtransport + webtransport_self_signed features, spawn NetcodeServer+WebTransportServerIo alongside existing WS, return cert_digest and server_wt_url in token response - isometric client: prefer WebTransport when server offers it, fall back to WebSocket; desktop reads digest from local cert file, WASM gets it from token endpoint - k8s: expose UDP port 5001 for WebTransport in deployment/service - Add certificates/generate.sh for optional pre-generated dev certs
) * feat(discordsh): add Mockoon docker-compose POC for local E2E testing (#8180) Add GITHUB_API_BASE_URL env var support to GitHubClient usage in both slash commands and the scheduler, enabling API redirection to mock backends. Create Mockoon mock definitions for GitHub REST API (issues, pulls, repo metadata, error scenarios) and Discord REST API (messages, gateway, interactions, commands). Wire everything up in a docker-compose-poc-dev.yaml with healthchecks. * feat(discordsh): wire up Mockoon e2e:mock Nx target with Playwright tests (#8180) Add playwright.mock.config.ts that manages the full docker-compose lifecycle (mockoon-github + mockoon-discord + discordsh), a 15-test mock-api.spec.ts covering GitHub mock routes, Discord mock endpoints, error scenarios, and bot health/frontend through the mock stack. Fix docker-compose healthchecks: use 127.0.0.1 instead of localhost (Alpine resolves localhost to IPv6), add --hostname 0.0.0.0 to Mockoon CLI commands, and add start_period for reliable startup. Support pre-built image via DISCORDSH_IMAGE env var to skip rebuilds in CI.
…ingress, quick script - Add cert-manager Certificate (letsencrypt-dns) for kbve.com WebTransport TLS - Mount WT cert into deployment, server loads PEM files with self-signed fallback - Open UDP 5001 through nginx ingress for WebTransport traffic - Extract isometric:quick one-liner into scripts/deploy_isometric_quick.sh
…8224) * fix(mc): ensure /built-plugins dir exists before cargo build in Dockerfiles Shell operator precedence caused mkdir to be skipped when cargo build failed, leaving /built-plugins missing for the final COPY stage. Closes #8220 * refactor(mc): consolidate Dockerfile and Dockerfile.dev into single Dockerfile Use ARG VARIANT=prod|dev to select entrypoint script at build time. Removes Dockerfile.dev and updates CI workflows + project.json to pass --build-arg VARIANT=dev where needed.
- Add GamePhase (Title → Playing) state enum with transport/auth pre-flight - Add ui_color.rs centralized color palette for consistent Bevy UI theming - Add title_screen.rs with overlay: title, transport badge, auth status, buttons - Gate player movement, orb HUD, and joystick behind GamePhase::Playing - HUD/joystick spawn on OnEnter(Playing) with DespawnOnExit for cleanup - Probe WebTransport browser support during Title phase (WASM js_sys check)
WASM client fetches game-token from same origin (localhost:1420) but the endpoint lives on axum at :3080. Add Vite proxy to forward /api/* requests during local development.
…8223) * feat(codegen): consolidate proto-to-zod pipeline and add OSRS schema - Refactor gen-all.mjs: add outputPath override support, CLI filter (e.g. `gen-all.mjs clickhouse`), register osrs + discordsh protos - Rename zod-config.json → osrs-zod-config.json for clarity - Generate osrs-schema.ts (645 lines) from the previously orphaned config - Add individual gen scripts: gen-mapdb-zod.mjs, gen-clickhouse-zod.mjs, gen-osrs-zod.mjs for granular regeneration - Add generated/index.ts barrel export for all schemas - Regenerate all existing schemas via unified pipeline * refactor(codegen): centralize discordsh schema into generated/ barrel Move discordsh-schema.ts output from app-specific location to the shared generated/ directory. Update astro-discordsh to import via @kbve/codegen/* path alias. All schemas now live in one place. * feat(data-proto): add Nx project.json for proto codegen targets Register packages/data/proto as an Nx project with targets: - generate-zod: runs gen-all.mjs (proto → binpb → Zod schemas) - generate-buf: runs buf generate (proto → TypeScript interfaces) - generate: orchestrates both in sequence Inputs/outputs configured for proper Nx caching — proto or zod-config changes invalidate, generated output is cached.
…gs and document e2e env vars (#8225) Add testIgnore for mock-api.spec.ts in dev and docker Playwright configs to prevent failures when Mockoon is not running. Update README with GITHUB_API_BASE_URL env var and full E2E testing section.
Vite proxy and WASM derive_api_base both pointed to nonexistent port 3080. Axum serves HTTP on 4321 — fix both to match.
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…eline (#8229) Merge ci-nx-security.yml, ci-weekly-nx-report.yml, and kanban-sync.yml into a single ci-dashboard.yml that runs daily at 3 AM ET (08:00 UTC). Rename dashboard MDX files from nx-prefixed to clean names (security.mdx, report.mdx, graph.mdx, kanban.mdx). Add mermaid pie charts for severity distribution, ecosystem breakdown, project type distribution, hub connectivity, work state, and item type breakdown.
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
28 atomic commits ready for main
Features
9ba834a)283680b)9c60b76)1f2fa29)cfc74b6)19be68d)d537834)d604239)ae645e9)Bug Fixes
1b65473)698df3e)62c1180)347c20f)f7ef6e6)0ed866b)37efa17)1f5da99)e0106b1)759eeb1)Refactoring
7286bed)63d009b)Chores
5d7fae7)a07b654)e80ef0a)1e8b9e6)219a72a)caa227c)75d2249)This PR is automatically maintained by CI — KBVE Studio