Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
02d2bca
docs: update README with MCP, agent, and node contract docs; add 15 e…
edgarriba Feb 15, 2026
adef566
feat: OpenClaw foundation — enhanced MCP for AI agent integration
edgarriba Feb 16, 2026
c2f7e1d
fix: add input validation and security hardening to MCP tools
edgarriba Feb 16, 2026
642e07a
refactor: remove ros-z dependency, use vanilla Zenoh throughout
edgarriba Feb 16, 2026
6fcec93
refactor: add extern_path to rust-node template, remove foxglove dep
edgarriba Feb 16, 2026
4115516
docs: add MCP-first universal runtime refactor design
edgarriba Feb 24, 2026
2e0be80
docs: add MCP-first refactor implementation plan
edgarriba Feb 24, 2026
8225dbd
docs: update implementation plan with research findings
edgarriba Feb 24, 2026
26a521b
fix: bind dashboard to 127.0.0.1 instead of 0.0.0.0
edgarriba Feb 24, 2026
311c654
fix: use absolute path for journalctl
edgarriba Feb 24, 2026
0ca7470
fix: validate rule action fields before execution
edgarriba Feb 24, 2026
4c03d98
fix: validate query_zenoh key expressions and scope commands to local…
edgarriba Feb 24, 2026
b749568
feat: add bearer token authentication to MCP server
edgarriba Feb 24, 2026
a3ee184
feat: add RBAC authorization tiers (viewer/operator/admin)
edgarriba Feb 24, 2026
041888b
feat: add audit logging and rate limiting to MCP server
edgarriba Feb 24, 2026
6148490
fix: address code review findings for RBAC and rate limiting
edgarriba Feb 24, 2026
e921121
feat: add PlatformOperations trait, DaemonPlatform impl, and MockPlat…
edgarriba Feb 24, 2026
1c755a4
refactor: MCP tools use PlatformOperations trait
edgarriba Feb 24, 2026
cbd0c6c
feat: add stdio transport for MCP (bubbaloop mcp --stdio)
edgarriba Feb 24, 2026
577021c
test: add MCP contract tests (~60 tests)
edgarriba Feb 24, 2026
01b7d15
feat: add 7 new MCP tools (24 total)
edgarriba Feb 24, 2026
fda546c
docs: update MCP server instructions for 24-tool inventory
edgarriba Feb 24, 2026
aef3c3e
chore: add deprecation warnings to Zenoh API queryables
edgarriba Feb 24, 2026
d65bc87
feat: add MCP integration test harness with 22 tests
edgarriba Feb 24, 2026
fe43f84
fix: resolve merge conflicts and address code review findings
edgarriba Feb 25, 2026
1746eb0
test: add error-path integration tests (13 tests)
edgarriba Feb 25, 2026
81595de
docs: Node SDK design document
edgarriba Feb 25, 2026
07b74f1
refactor: remove deprecated Zenoh API queryables
edgarriba Feb 25, 2026
2bb6058
chore: add deprecation notices to CLI commands replaced by MCP
edgarriba Feb 25, 2026
a3d3351
refactor: move TUI behind feature flag
edgarriba Feb 25, 2026
2124e72
refactor: make MCP a core dependency, not a feature flag
edgarriba Feb 26, 2026
4399087
docs: add MCP-first architecture docs and agent guide
edgarriba Feb 26, 2026
2ef4b4d
refactor: massive skill runtime restructure — remove agent engine, ze…
edgarriba Feb 26, 2026
1081167
refactor: simplify daemon to pure passive skill runtime
edgarriba Feb 26, 2026
77604b4
feat: add manifest aggregation and capability-based MCP discovery
edgarriba Feb 26, 2026
c6ff222
fix: update get_node_manifest test for cached manifest behavior
edgarriba Feb 26, 2026
6c7207f
feat: add bubbaloop-node-sdk crate and update templates
edgarriba Feb 26, 2026
d499cfe
docs: update all documentation for SDK-first workflow
edgarriba Feb 26, 2026
8f7024f
docs: fix stale SDK status and phantom API references
edgarriba Feb 26, 2026
7e1a7df
docs: clarify where nodes live and how to develop them
edgarriba Feb 26, 2026
225b619
docs: restore node-marketplace.md link in getting started guide
edgarriba Feb 26, 2026
0e97d29
feat: add install_node/remove_node MCP tools, remove dead code
edgarriba Feb 26, 2026
cbcbfa9
test: add integration tests for install_node and remove_node MCP tools
edgarriba Feb 26, 2026
607f0d9
docs: explain node install flow, on-disk layout, and fix stale info
edgarriba Feb 26, 2026
4f8f962
fix: address code review findings — security hardening, validation, a…
edgarriba Feb 27, 2026
3a572e0
fix: resolve dashboard TypeScript error in availableTopics merge
edgarriba Feb 27, 2026
fd0e120
fix: mock ZenohSubscriptionContext in Dashboard tests
edgarriba Feb 27, 2026
1fd4228
fix: update JsonView test to match actual placeholder text
edgarriba Feb 27, 2026
e9dd3f1
fix: apply cargo fmt formatting
edgarriba Feb 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions .claude/skills/doctor.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,22 +138,22 @@ Look for:

If logs show ONLY startup messages but no ongoing publishing, the node may be stalled.

### Step 9: ros-z Topic Compatibility
Check for hyphens in topic names AND machine IDs (ros-z rejects hyphens in path components):
### Step 9: Topic Format Validation
Check for hyphens in topic names AND machine IDs (use underscores for consistency):
```bash
# Check config files for hyphenated topics
for cfg in ~/.bubbaloop/nodes/*/config.yaml ~/.bubbaloop/nodes/*/*/config.yaml; do
[ -f "$cfg" ] || continue
if grep -qP 'publish_topic:.*-' "$cfg" 2>/dev/null; then
echo "WARNING: $cfg has hyphenated topic (ros-z will reject)"
echo "WARNING: $cfg has hyphenated topic (should use underscores)"
fi
done

# Check service files for unhyphenated machine IDs
for f in ~/.config/systemd/user/bubbaloop-*.service; do
mid=$(grep 'BUBBALOOP_MACHINE_ID=' "$f" 2>/dev/null | grep -oP '=\K.*')
if [ -n "$mid" ] && echo "$mid" | grep -q '-'; then
echo "WARNING: $f has hyphenated MACHINE_ID=$mid (ros-z will reject)"
echo "WARNING: $f has hyphenated MACHINE_ID=$mid (should use underscores)"
fi
done
```
Expand Down Expand Up @@ -181,7 +181,7 @@ for svc in $(systemctl --user list-units 'bubbaloop-*' --no-pager --plain | grep
done
```

Data topics use underscores (ros-z requirement) but schema queryables might use hyphens.
Data topics use underscores (convention) but schema queryables might use hyphens.
This mismatch prevents `discoverSchemaForTopic()` from mapping topics to schemas.
If `--fix`: update node code to use consistent naming (prefer underscores for both).

Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/gemini-review.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ Focus on:
1. Correctness bugs (logic errors, off-by-one, race conditions)
2. API misuse (wrong function signatures, missing error handling)
3. Security issues (injection, unsafe patterns)
4. Zenoh/ros-z specific issues (topic naming, session lifecycle)
4. Zenoh-specific issues (topic naming, session lifecycle, queryable patterns)

For each finding, categorize as:
- CRITICAL: Must fix before merge
Expand Down
56 changes: 38 additions & 18 deletions .claude/skills/validate.md
Original file line number Diff line number Diff line change
@@ -1,55 +1,75 @@
# Validate System

Full system validation workflow for bubbaloop. Runs all test suites, linting, and optionally consults Gemini CLI for a second review.
Full system validation workflow for bubbaloop. Runs all test suites, linting, and optionally MCP smoke tests.

## Usage
```
/validate # Full validation (Rust + dashboard + clippy)
/validate --quick # Rust only, skip dashboard
/validate # Full validation (Rust + MCP integration + clippy)
/validate --quick # Rust unit tests only
/validate --smoke # Full validation + MCP stdio smoke test
/validate --gemini # Full validation + Gemini CLI review
```

## Steps

### Step 1: Rust Compilation Check
Run `cargo check --lib -p bubbaloop` to verify the library compiles. This is fast and catches most issues.
Run `pixi run check` to verify the full crate compiles (includes MCP as core dependency).

### Step 2: Rust Test Suite
Run `cargo test --lib -p bubbaloop` and report the number of passing tests. All tests must pass.
### Step 2: Clippy Lint
Run `pixi run clippy` and verify zero warnings. The project enforces `-D warnings` with `--all-features`.

### Step 3: Dashboard Tests (skip if --quick)
Run `cd /home/nvidia/bubbaloop/dashboard && npm test` and report the number of passing tests across test files. All tests must pass.
### Step 3: Rust Unit Tests
Run `pixi run test` and report the number of passing tests. All tests must pass. Expected: ~325 tests.

### Step 4: MCP Integration Tests (skip if --quick)
Run `cargo test --features test-harness --test integration_mcp` and report results. These test the full MCP protocol stack (tool routing, RBAC, validation) against MockPlatform over duplex transport. Expected: ~35 tests.

### Step 5: MCP Stdio Smoke Test (only if --smoke)
Test the real binary with a live MCP request over stdio:

```bash
(printf '{"jsonrpc":"2.0","method":"initialize","id":1,"params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"smoke-test","version":"1.0"}}}\n{"jsonrpc":"2.0","method":"notifications/initialized"}\n{"jsonrpc":"2.0","method":"tools/call","id":2,"params":{"name":"get_machine_info","arguments":{}}}\n'; sleep 10) | timeout 15 ./target/release/bubbaloop mcp --stdio 2>/dev/null
```

### Step 4: Clippy Lint
Run `pixi run clippy` and verify zero warnings. The project enforces `-D warnings`.
Verify:
- Response id=1: initialize response with `protocolVersion` and `capabilities.tools`
- Response id=2: `get_machine_info` returns JSON with `arch`, `hostname`, `os` fields

### Step 5: Template Integrity Check
If the binary doesn't exist, build it first with `cargo build --release` (takes ~9 minutes on ARM64).

### Step 6: Dashboard Tests (skip if --quick)
Run `cd /home/nvidia/bubbaloop/dashboard && npm test` and report the number of passing tests across test files. All tests must pass.

### Step 7: Template Integrity Check
Verify template files exist and have required content:
- `templates/rust-node/node.yaml.template` must contain `{{node_name}}`
- `templates/python-node/node.yaml.template` must contain `{{node_name}}`
- `templates/rust-node/Cargo.toml.template` must NOT have ambiguous git+path for bubbaloop-schemas
- Python template must NOT contain `complete=True` on queryables

### Step 6: Gemini CLI Review (only if --gemini)
### Step 8: Gemini CLI Review (only if --gemini)
Use `NODE_OPTIONS="--max-old-space-size=4096" gemini` to review changed files:
- Pipe each changed file via stdin with a focused review prompt
- Categorize findings as: FIX (real bugs), DEFER (pre-existing/roadmap), or FALSE POSITIVE
- Only fix real bugs; document deferred items

### Step 7: Summary Report
### Step 9: Summary Report
Output a table with:

| Check | Result | Details |
|-------|--------|---------|
| Rust compile | PASS/FAIL | |
| Rust tests | PASS/FAIL | N tests |
| Dashboard tests | PASS/FAIL/SKIP | N tests, M files |
| Compile | PASS/FAIL | |
| Clippy | PASS/FAIL | N warnings |
| Unit tests | PASS/FAIL | N tests |
| MCP integration | PASS/FAIL/SKIP | N tests |
| MCP smoke test | PASS/FAIL/SKIP | stdio init + tool call |
| Dashboard tests | PASS/FAIL/SKIP | N tests, M files |
| Templates | PASS/FAIL | |
| Gemini review | N findings | X fixed, Y deferred |

### Important Constraints (Jetson)
### Important Constraints (Jetson ARM64)
- Do NOT run parallel cargo/pixi commands -- too slow on ARM64
- Run steps sequentially
- Use `cargo check --lib -p bubbaloop` (not full binary check, needs dashboard/dist/)
- `pixi run check` (not `cargo check --lib`) to include all features
- Use `NODE_OPTIONS="--max-old-space-size=4096"` for Gemini CLI to avoid OOM
- Release builds take ~9 minutes -- only build for --smoke tests
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -73,5 +73,6 @@ Thumbs.db
# Tool config
.omc/

# External repo assembly (not part of this repo)
# External repos and stale build artifacts (node source lives in separate repos)
bubbaloop-nodes-official/
crates/bubbaloop-nodes/
Loading
Loading