Skip to content

feat(dashboard): generated panels, b00t handshake, UI hardening#81

Open
promptexecutionerr wants to merge 3 commits intomainfrom
feat/dashboard-generated-panels-51
Open

feat(dashboard): generated panels, b00t handshake, UI hardening#81
promptexecutionerr wants to merge 3 commits intomainfrom
feat/dashboard-generated-panels-51

Conversation

@promptexecutionerr
Copy link
Copy Markdown
Collaborator

Summary

  • Tauri UI: generated dashboard panels with EvidenceState/TodayQueue surface, working panel navigation, and full setBusy coverage across all settings inputs and action buttons
  • b00t-iface: inter-node capability trading with CapabilityOffer handshake protocol
  • ledger-core: MetaCtx + Disposition HasVisualization impls; restored accidentally-dropped impl<T> HasVisualization for StageResult<T> header

Test plan

  • Build ledger-core: cargo check -p ledger-core
  • Build ledgerr-host: cargo tauri build or cargo check -p ledgerr-host
  • Open Tauri UI — verify all panel nav buttons respond and Settings inputs are disabled during busy state
  • Trigger btn-load-rhai-mutation — confirm it switches to chat panel before loading the draft
  • Verify CapabilityOffer handshake compiles and round-trips in b00t-iface tests

🤖 Generated with Claude Code

Claude Sonnet (coordinator) and others added 3 commits May 4, 2026 20:58
…d defs, add Slint parity

commands.rs:
- Remove duplicate EvidenceDashboardPayload (serde_json::Value variant) and
  TxProvenancePayload structs — both defined twice, Windows-only compile error
- Remove duplicate get_evidence_dashboard and get_tx_provenance first impls
- Surviving get_evidence_dashboard: load settings first (safe lock order),
  call refresh_gaps() so gap data is never stale, return typed TodayQueue

main.js — full Slint parity pass:
- Call get_initial_state on load to populate all fields (version, status,
  settings inputs, transcript, rig-log, review-log, draft, docs status)
- Wire chat-update event listener (transcript, logs, status, busy state)
- Wire send-btn → send_message with proper error display
- Wire rhai-btn → load_rhai_rule_prompt (seeds system prompt + draft)
- Wire model pills (pill-phi/foundry/cloud) → use_internal_phi/foundry/cloud
- Wire settings preset buttons (btn-use-phi/foundry/cloud) → same commands
- Wire docs panel: btn-open-docs → open_docs_playbook, btn-load-rhai-mutation
- Wire log tabs to toggle between Transport/Review sub-panels
- Wire sidebar collapse button → toggle #sidebar.collapsed CSS class
- Add updateModelBadge(): updates badge class/icon and pill active states
  based on api_key fingerprint (local-tool-tray=phi, local-foundry=foundry)
- Add setBusy(): disables draft textarea, send, rhai, and all model pills
- applySettings() now calls updateModelBadge() after applying fields
- get_initial_state handler calls updateModelBadge() on load

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…lityOffer

Extends HandshakeSurface with a full offer/acquire capability exchange:

New types:
- CapabilityKind enum (model/surface/tool/datum, snake_case serde)
- CapabilityOffer: name, kind, endpoint URL, api_key, params HashMap
- CapabilityRegistry: newtype Vec<CapabilityOffer> with models()/surfaces()/find()

HandshakeDocument:
- Adds `offers: Vec<CapabilityOffer>` field (#[serde(default)] for backwards compat)
- `surfaces`/`models` backfilled from offers; static defaults used when no offers

HandshakeSurface:
- Adds `local_offers: Vec<CapabilityOffer>` and `peer_path_override: Option<PathBuf>`
- Builder methods: `with_offers()` and `with_peer_path()`
- `write_doc()` derives surface/model lists from offers, includes full offers in doc
- `operate()` clone copies both new fields; populates `handle.acquired` from peer
  offers when result is Matched, empty vec otherwise
- Removes unwrap() on VariantMismatch arm in perform()

HandshakeHandle:
- Adds `acquired: Vec<CapabilityOffer>` — peer capabilities available after Matched

Tests (4 new integration + 5 new unit):
- two_node_full_handshake: A writes doc, B discovers via peer_path_override → Matched
- capability_trade_model_endpoint: A offers phi endpoint, B acquires it with URL
- variant_mismatch_rejected: mismatched variant_id → VariantMismatch
- no_peer_doc_is_no_peer: missing peer file → NoPeer, acquired is empty
- capability_registry_filters, with_offers_builder_populates_doc,
  capability_offer_roundtrips_json, handshake_document_with_empty_offers_deserializes

All 81 tests pass (77 unit + 4 integration).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…d setBusy coverage

- iso_objects.rs: add MetaCtx + Disposition HasVisualization impls; restore
  accidentally-dropped impl<T> HasVisualization for StageResult<T> header
- main.js: setBusy now covers all settings inputs and action buttons via
  forEach; btn-load-rhai-mutation navigates to chat panel before invoking

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
CapabilityKind, CapabilityOffer, HandshakeDocument, HandshakeResult, HandshakeSurface,
};
use b00t_iface::core::ProcessSurface;
use serde_json;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants