Skip to content

Release: 9 features, 10 fixes, 2 refactors, 7 chores → Main#8209

Merged
h0lybyte merged 30 commits intomainfrom
dev
Mar 18, 2026
Merged

Release: 9 features, 10 fixes, 2 refactors, 7 chores → Main#8209
h0lybyte merged 30 commits intomainfrom
dev

Conversation

@github-actions
Copy link
Contributor

@github-actions github-actions bot commented Mar 17, 2026

Release: Dev → Main

28 atomic commits ready for main

Features

Bug Fixes

Refactoring

Chores


This PR is automatically maintained by CI — KBVE Studio

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
@github-actions
Copy link
Contributor Author

github-actions bot commented Mar 17, 2026

Dependency Review

The following issues were found:
  • ✅ 0 vulnerable package(s)
  • ✅ 0 package(s) with incompatible licenses
  • ✅ 0 package(s) with invalid SPDX license definitions
  • ⚠️ 5 package(s) with unknown licenses.
See the Details below.

License Issues

.github/workflows/ci-docker-smoke-test.yml

PackageVersionLicenseIssue Type
KBVE/kbve/.github/workflows/utils-ci-failure-tracker.ymldevNullUnknown License

apps/kbve/axum-kbve/Cargo.toml

PackageVersionLicenseIssue Type
base64>= 0.22.0, < 0.23.0NullUnknown License
rand>= 0.9.0, < 0.10.0NullUnknown License

packages/rust/bevy/bevy_kbve_net/Cargo.toml

PackageVersionLicenseIssue Type
base64>= 0.22.0, < 0.23.0NullUnknown License
hex>= 0.4.0, < 0.5.0NullUnknown License

OpenSSF Scorecard

PackageVersionScoreDetails
actions/KBVE/kbve/.github/workflows/utils-ci-failure-tracker.yml dev UnknownUnknown
cargo/serde-wasm-bindgen 0.6.5 UnknownUnknown
cargo/base64 >= 0.22.0, < 0.23.0 UnknownUnknown
cargo/rand >= 0.9.0, < 0.10.0 UnknownUnknown
cargo/base64 >= 0.22.0, < 0.23.0 UnknownUnknown
cargo/hex >= 0.4.0, < 0.5.0 UnknownUnknown

Scanned Files

  • .github/workflows/ci-docker-smoke-test.yml
  • .github/workflows/ci-nx-security.yml
  • .github/workflows/ci-weekly-nx-report.yml
  • .github/workflows/kanban-sync.yml
  • Cargo.lock
  • apps/kbve/axum-kbve/Cargo.toml
  • packages/rust/bevy/bevy_kbve_net/Cargo.toml

@github-actions github-actions bot changed the title Release: 1 chore → Main Release: 1 feature, 1 chore → Main Mar 17, 2026
h0lybyte and others added 2 commits March 17, 2026 20:05
…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.
…000 and contentCache (#8212)

Co-authored-by: Al @h0lybyte <5599058+h0lybyte@users.noreply.github.com>
@github-actions github-actions bot changed the title Release: 1 feature, 1 chore → Main Release: 2 features, 1 fix, 1 chore → Main Mar 18, 2026
)

* 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
@github-actions github-actions bot changed the title Release: 2 features, 1 fix, 1 chore → Main Release: 1 feature, 1 fix, 1 chore → Main Mar 18, 2026
…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
@github-actions github-actions bot changed the title Release: 1 feature, 1 fix, 1 chore → Main Release: 1 feature, 2 fixes, 1 chore → Main Mar 18, 2026
@github-actions github-actions bot changed the title Release: 1 feature, 2 fixes, 1 chore → Main Release: 1 feature, 2 fixes, 2 chores → Main Mar 18, 2026
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
@github-actions github-actions bot changed the title Release: 1 feature, 2 fixes, 2 chores → Main Release: 1 feature, 2 fixes, 3 chores → Main Mar 18, 2026
…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.
@github-actions github-actions bot changed the title Release: 1 feature, 2 fixes, 3 chores → Main Release: 1 feature, 2 fixes, 1 refactor, 3 chores → Main Mar 18, 2026
…#8217)

Replace COPY from apps/mc/pumpkin/ submodule path with a pumpkin-source
stage that git clones KBVE/Pumpkin at a pinned commit. Inline cargo-chef
stages replace the deleted mc-rust-base image. Fixes CI failure from
submodule removal in #8215.
@github-actions github-actions bot changed the title Release: 1 feature, 2 fixes, 1 refactor, 3 chores → Main Release: 1 feature, 3 fixes, 1 refactor, 3 chores → Main Mar 18, 2026
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
@github-actions github-actions bot changed the title Release: 1 feature, 3 fixes, 1 refactor, 3 chores → Main Release: 1 feature, 4 fixes, 1 refactor, 4 chores → Main Mar 18, 2026
@github-actions github-actions bot changed the title Release: 1 feature, 4 fixes, 1 refactor, 4 chores → Main Release: 1 feature, 4 fixes, 1 refactor, 5 chores → Main Mar 18, 2026
…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.
@github-actions github-actions bot changed the title Release: 2 features, 5 fixes, 1 refactor, 5 chores → Main Release: 2 features, 5 fixes, 2 refactors, 5 chores → Main Mar 18, 2026
* 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).
@github-actions github-actions bot changed the title Release: 2 features, 5 fixes, 2 refactors, 5 chores → Main Release: 3 features, 5 fixes, 2 refactors, 5 chores → Main Mar 18, 2026
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
@github-actions github-actions bot changed the title Release: 3 features, 5 fixes, 2 refactors, 5 chores → Main Release: 4 features, 5 fixes, 2 refactors, 5 chores → Main Mar 18, 2026
)

* 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.
@github-actions github-actions bot changed the title Release: 4 features, 5 fixes, 2 refactors, 5 chores → Main Release: 5 features, 5 fixes, 2 refactors, 5 chores → Main Mar 18, 2026
…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
@github-actions github-actions bot changed the title Release: 5 features, 5 fixes, 2 refactors, 5 chores → Main Release: 6 features, 5 fixes, 2 refactors, 5 chores → Main Mar 18, 2026
…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.
@github-actions github-actions bot changed the title Release: 6 features, 5 fixes, 2 refactors, 5 chores → Main Release: 6 features, 6 fixes, 2 refactors, 5 chores → Main Mar 18, 2026
- 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)
@github-actions github-actions bot changed the title Release: 6 features, 6 fixes, 2 refactors, 5 chores → Main Release: 7 features, 6 fixes, 2 refactors, 5 chores → Main Mar 18, 2026
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.
@github-actions github-actions bot changed the title Release: 7 features, 6 fixes, 2 refactors, 5 chores → Main Release: 8 features, 7 fixes, 2 refactors, 5 chores → Main Mar 18, 2026
…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.
@github-actions github-actions bot changed the title Release: 8 features, 7 fixes, 2 refactors, 5 chores → Main Release: 8 features, 8 fixes, 2 refactors, 5 chores → Main Mar 18, 2026
Vite proxy and WASM derive_api_base both pointed to nonexistent port
3080. Axum serves HTTP on 4321 — fix both to match.
@github-actions github-actions bot changed the title Release: 8 features, 8 fixes, 2 refactors, 5 chores → Main Release: 8 features, 9 fixes, 2 refactors, 5 chores → Main Mar 18, 2026
…lib support (#8226)

musl does not support cdylib crate types, so the plugin .so was never
being compiled in Docker — the error was silently masked by || true.
Switch rust-base to rust:1.94-slim-bookworm and final image to
debian:bookworm-slim so cargo can produce the cdylib plugin.

Closes #8220
@github-actions github-actions bot changed the title Release: 8 features, 9 fixes, 2 refactors, 5 chores → Main Release: 8 features, 10 fixes, 2 refactors, 5 chores → Main Mar 18, 2026
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
@github-actions github-actions bot changed the title Release: 8 features, 10 fixes, 2 refactors, 5 chores → Main Release: 8 features, 10 fixes, 2 refactors, 6 chores → Main Mar 18, 2026
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
@github-actions github-actions bot changed the title Release: 8 features, 10 fixes, 2 refactors, 6 chores → Main Release: 8 features, 10 fixes, 2 refactors, 7 chores → Main Mar 18, 2026
…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.
@github-actions github-actions bot changed the title Release: 8 features, 10 fixes, 2 refactors, 7 chores → Main Release: 9 features, 10 fixes, 2 refactors, 7 chores → Main Mar 18, 2026
@h0lybyte h0lybyte merged commit 337679d into main Mar 18, 2026
20 checks passed
@github-project-automation github-project-automation bot moved this from Review to Done in KBVE Mar 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant