@@ -267,6 +267,7 @@ build *args:
267267 cd cartridges/ nesy-mcp/ ffi && zig build {{ args}}
268268 cd cartridges/ database-mcp/ ffi && zig build {{ args}}
269269 cd cartridges/ agent-mcp/ ffi && zig build {{ args}}
270+ cd cartridges/ feedback-mcp/ ffi && zig build {{ args}}
270271 @ echo " Build complete"
271272
272273# Build in release mode with optimizations
@@ -305,6 +306,8 @@ test *args:
305306 cd cartridges/ database-mcp/ ffi && zig build test
306307 @ echo " Running agent-mcp FFI tests..."
307308 cd cartridges/ agent-mcp/ ffi && zig build test
309+ @ echo " Running feedback-mcp FFI tests..."
310+ cd cartridges/ feedback-mcp/ ffi && zig build test
308311 @ echo " All tests passed!"
309312
310313# Run tests with verbose output
@@ -314,6 +317,7 @@ test-verbose:
314317 cd cartridges/ nesy-mcp/ ffi && zig build test -- --verbose
315318 cd cartridges/ database-mcp/ ffi && zig build test -- --verbose
316319 cd cartridges/ agent-mcp/ ffi && zig build test -- --verbose
320+ cd cartridges/ feedback-mcp/ ffi && zig build test -- --verbose
317321
318322# Smoke test — type-check core ABI + run one FFI test
319323test-smoke :
@@ -377,6 +381,7 @@ typecheck:
377381 cd cartridges/ nesy-mcp/ abi && idris2 --check nesy-mcp.ipkg
378382 cd cartridges/ database-mcp/ abi && idris2 --check database-mcp.ipkg
379383 cd cartridges/ agent-mcp/ abi && idris2 --check agent-mcp.ipkg
384+ cd cartridges/ feedback-mcp/ abi && idris2 --check feedback-mcp.ipkg
380385 @ echo " All ABI files type-check!"
381386
382387# Verify zero believe_me in all Idris2 sources
@@ -423,20 +428,65 @@ matrix:
423428# RUN & EXECUTE
424429# ═══════════════════════════════════════════════════════════════════════════════
425430
426- # Run the BoJ server (Phase 3 — V-lang adapter required )
431+ # Run the BoJ server (V-lang triple adapter: REST 7700, gRPC 7701, GraphQL 7702 )
427432run * args : build
428- @ echo " BoJ server requires V-lang adapter (Phase 3)"
429- @ echo " Current status: ABI + FFI layers complete"
430- @ echo " Run 'just matrix' to see cartridge status"
433+ #!/usr/bin/env bash
434+ set -euo pipefail
435+ ADAPTER=" adapter/v/boj-server"
436+ if [ ! -f " $ADAPTER " ]; then
437+ echo " Building V-lang adapter..."
438+ v -cc gcc -cflags " -L$( pwd) /ffi/zig/zig-out/lib -Wl,--allow-multiple-definition" \
439+ -o " $ADAPTER " adapter/v/src/main.v
440+ fi
441+ echo " Starting BoJ Server..."
442+ exec " $ADAPTER " {{args}}
431443
432444# Run with verbose output
433445run-verbose * args : build
434- just run {{ args}}
446+ BOJ_VERBOSE=1 just run {{ args}}
447+
448+ # Build V-lang adapter binary
449+ build-adapter : build
450+ #!/usr/bin/env bash
451+ set -euo pipefail
452+ echo " Building V-lang adapter..."
453+ v -cc gcc -cflags " -L$( pwd) /ffi/zig/zig-out/lib -Wl,--allow-multiple-definition" \
454+ -o adapter/v/boj-server adapter/v/src/main.v
455+ echo " Built: adapter/v/boj-server ($( du -h adapter/v/boj-server | cut -f1) )"
435456
436457# Install to user path
437- install : build-release
458+ install : build-adapter
438459 @ echo " Installing boj-server..."
439- @ echo " Phase 3 required for installable binary"
460+ cp adapter/ v/ boj-server ~/ .local/ bin/ boj-server
461+ @ echo " Installed to ~/.local/bin/boj-server"
462+
463+ # Start Cloudflare quick tunnel (exposes BoJ at *.trycloudflare.com)
464+ tunnel :
465+ @ echo " Starting Cloudflare Quick Tunnel → *.trycloudflare.com"
466+ @ echo " Watch output for the assigned URL."
467+ cloudflared tunnel --no-autoupdate --no-tls-verify --url http:// localhost:7700
468+
469+ # Run BoJ server + Cloudflare Tunnel together
470+ serve : build
471+ #!/usr/bin/env bash
472+ set -euo pipefail
473+ ADAPTER=" adapter/v/boj-server"
474+ if [ ! -f " $ADAPTER " ]; then
475+ echo " Building V-lang adapter..."
476+ v -cc gcc -cflags " -L$( pwd) /ffi/zig/zig-out/lib -Wl,--allow-multiple-definition" \
477+ -o " $ADAPTER " adapter/v/src/main.v
478+ fi
479+ echo " Starting BoJ Server..."
480+ echo " Local: http://localhost:7700/status"
481+ LD_LIBRARY_PATH=" $( pwd) /ffi/zig/zig-out/lib" " $ADAPTER " &
482+ BOJ_PID=$!
483+ trap " kill $BOJ_PID 2>/dev/null; kill $TUNNEL_PID 2>/dev/null; exit" INT TERM
484+ sleep 2
485+ echo " "
486+ echo " Starting Cloudflare Tunnel (watch for public URL)..."
487+ cloudflared tunnel --no-autoupdate --no-tls-verify --url http://localhost:7700 &
488+ TUNNEL_PID=$!
489+ wait $BOJ_PID $TUNNEL_PID
440490
441491# ═══════════════════════════════════════════════════════════════════════════════
442492# DEPENDENCIES
0 commit comments