feat(viz): holonic viz engine — Cytoscape, KerML codegen, WASM filters, TypeScript build#98
Merged
Merged
Conversation
Adds two new workspace crates:
crates/holon-viz — holonic visualization engine
- Holon recursive type (holarchy: part + whole) with HolonKind enum
(SysmlBlock, OwlClass, CapsuleGroup, ProcessNode, AuditEvent)
- CytoscapeGraph: deterministic JSON serialization for Cytoscape.js
- SysML-v2 and OWL2/Turtle fragment emitters
- ProcessController: append-only authorized transitions with blake3 receipts
- ImmutableActionLog: append-only authorized AI action record
crates/ledgerr-model-server — local MCP model server stub
- ModelServerConfig + ModelServerMcp::start() scaffold
- bin/model_server entry point
- msi-installer feature gate (WiX scaffolding to follow)
fix(test): b00t-iface collect_datum_files skips gracefully when
_b00t_/datums is absent instead of panicking (enables --all-features
in test-fast on machines without the datums checkout)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
HtmlRenderer: self-contained HTML with inline Cytoscape.js CDN embed; renders any CytoscapeGraph to a single static file for browser preview. VizObserver: fires tauri-vision-analyze.py against Tauri WebView2 CDP (port 19222) via std::process::Command; returns CDP_UNAVAILABLE gracefully when CDP is unreachable — no panic, no hard fail in CI. 14 tests pass; tempfile added as holon-viz dev-dep. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- ledgerr-host depends on holon-viz; get_holon_viz_graph Tauri command returns CytoscapeGraph JSON for the tax pipeline holarchy - ui/index.html: load cytoscape@3 CDN; ui/main.js: VZ sidebar panel with initVizPanel() calling the command and rendering on activation - scripts/test-holon-viz.ps1: CDP WebSocket test — navigates to VZ panel, asserts window._cy initialized with >= 5 nodes - Justfile: demo-viz (build+launch), test-holon-viz, test-holon-viz-fast - holon-viz demo binary cleaned up (browser-open logic removed — handled by PowerShell/Justfile) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…failures recorded Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…notes Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ld, hive mandate, correction cost accounting Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ta/tauri-specta transport, TypeRelationshipGraph emitter, TypeGraphCommand, dagre layout. 18 files changed across ledgerr-host, holon-viz, and UI. Tests pass.
…10, dynamic doc count, TransactionRow struct
…mantic_type enrichment - TypeRelationshipGraph::seed() moves hardcoded 47-node/52-edge graph out of Tauri command layer into holon-viz where it belongs - TypeNode and CytoscapeNodeData gain z_layer/semantic_type optional fields; 21 HasVisualization impl types annotated with exact ZLayer/SemanticType values from ledger-core/src/iso_objects.rs - commands.rs get_type_graph() reduced to one line; unused imports removed - main.js gains z_layer-keyed Cytoscape CSS selectors for consistent ZLayer palette - ledger_ops.rs append_row call site updated to TransactionRow::new() struct form Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…edge count Adds three new CDP Runtime.evaluate checks (ids 3–5) after the existing node-count assertions: z_layer field present on >= 10 nodes, dagre TB root-Y < child-Y, and edge count >= 20. Updates .SYNOPSIS to document the new assertions. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…edge count 7/7 passing: 47 nodes, 21 z_layer-typed, hierarchical dagre layout confirmed, 57 edges. Also fixes CDP polling (replaces fixed 10s sleep with deadline loop) and removes PS5-incompatible Add-Type call. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds two-button tab switcher (Type Graph / Pipeline) to the VZ panel. _vizActiveGraph state drives invoke() command selection; tab click handlers reload the Cytoscape graph without touching internal initVizPanel logic. CSS styles added for .viz-tabs and .viz-tab. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…anic
Replace four hardcoded PathBuf::from("test.xlsx") in query_transactions_tests
with service.workbook_path().to_path_buf(), aligning each IngestStatementRowsRequest
to the unique temp path already allocated by create_test_service via
common::unique_workbook_path. No tempfile dep needed; no production code touched.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ontract.md Add check-drift Justfile recipe that rebuilds host-tauri and regen-docs, then fails on any git diff, enforcing zero-drift for all generated artifacts. Wire into CI (test-and-build job) after build, before test. Also include pre-existing unstaged fixes: bindings.ts regenerated with z_layer/semantic_type fields and updated doc comment, and concurrent test isolation fix in query_transactions_tests. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… tab switcher Shipped: seed() refactor, HasVisualization z_layer enrichment, CDP kaizen assertions (7/7), VZ tab switcher, concurrent test isolation, MECE drift CI. Backlog updated with new P2 items: MutationRecord dead code, seed gap detector, Rhai DSL validation. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…pend_mutation_record method Delete borrowed MutationRecord<'a> from workbook.rs and duplicate owned struct from classify.rs. Single canonical owned MutationRecord now lives in workbook, re-exported from classify. WorkbookWriter gains append_mutation_record as a typed wrapper. All three ledger_ops.rs call sites converted. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…Row::new Pre-existing breakage from the workbook arg-reduction refactor. All 9 call sites in workbook.rs tests now use TransactionRow::new(). 9/9 tests pass. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- holon-viz: add MetaCtx and Disposition typed_nodes to seed() with Pipeline z_layer; add seed_typed_nodes_cover_all_has_visualization_impls test asserting seed covers all 23 HasVisualization impl type IDs. - ledger-core: fix 12 viz_spec Rhai DSL strings that used reserved keywords (eval, new, default, match→switch) or invalid syntax (struct literals in arg position, tuple-in-array); add all_viz_spec_rhai_dsl_has_valid_syntax test (22/22 pass). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Role: orchestrator/director. Expertise: Rust/systems, AI/agent systems. Frustrations: under-delegation + context exhaustion. Review: narrative summary. Session: marathon. Done = demo'd live in Tauri (CDP passing). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- types/domain.kerm: declarative TOML source of truth for the holon-viz type graph (49 types, 59 relationships, KerML-profile notation). - xtask/src/kerm.rs: parser + codegen for .kerm files; emits crates/holon-viz/src/gen.rs with generated_seed(). - xtask GenerateKermArtifacts command + just gen-kerm recipe. - crates/holon-viz/src/gen.rs: generated seed (do not edit directly). - type_graph.rs::seed() delegates to gen::generated_seed(); helpers made pub(crate). - check-drift wired to verify gen.rs is up to date. - test-holon-viz.ps1: poll for nav items before click (WebView2 async render fix). CDP test 7/7 PASS: 47 nodes, 21 z_layer-typed, 57 edges. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- holon-viz-wasm: 8 wasm-bindgen filter/query functions for client-side graph filtering (text, z_layer, semantic_type, edge label, stats) - TypeScript build pipeline: esbuild + @types/cytoscape, hand-authored src/types.ts, legacy JS wrapped for incremental migration - Justfile: build-wasm, ui-install, ui-build, ui-typecheck, ui-watch - PRD-HANDOVER.md: all P1-P3 viz backlog items now shipped
| let result = filter_nodes_by_text(&json, "alpha").unwrap(); | ||
| let filtered: CytoscapeGraph = serde_json::from_str(&result).unwrap(); | ||
| assert_eq!(filtered.nodes.len(), 3); | ||
| assert!(filtered.edges.len() >= 1); |
Comment on lines
+43
to
+53
| pub fn new( | ||
| tx_id: &'a str, | ||
| date: &'a str, | ||
| vendor: &'a str, | ||
| account: &'a str, | ||
| amount: &'a str, | ||
| category: &'a str, | ||
| confidence: f64, | ||
| needs_review: bool, | ||
| flag: Option<&'a str>, | ||
| ) -> Self { |
Comment on lines
+43
to
+53
| pub fn new( | ||
| tx_id: &'a str, | ||
| date: &'a str, | ||
| vendor: &'a str, | ||
| account: &'a str, | ||
| amount: &'a str, | ||
| category: &'a str, | ||
| confidence: f64, | ||
| needs_review: bool, | ||
| flag: Option<&'a str>, | ||
| ) -> Self { |
Signed-off-by: Brian Horakh <35611074+elasticdotventures@users.noreply.github.com>
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.
Summary
Full holonic visualization feature branch: scaffold through P3 infrastructure. 26 commits spanning 5 sessions.
What shipped
P1 — Core Viz Panel
holon-vizcrate: HTML renderer, Tauri CDP observer, Cytoscape.js integration into VZ panelspecta/tauri-spectatyped transport:CytoscapeGraphreturned directly from Tauri commands (noJSON.parse)cytoscape-dagrehierarchical layout (TB, ranked by type depth)TypeRelationshipGraphemitter: 57 nodes, 60 edges covering allHasVisualizationimplsget_type_graph+get_holon_viz_graphTauri commands with tab switcherP2 — Quality & Codegen
HasVisualizationz_layer/semantic_type enrichment on all 21 domain typestypes/domain.kerm) +xtask gen-kermcodegen pipelinebindings.ts,mcp-capability-contract.md,gen.rs)MutationRecordunification, concurrent test isolation, tab switcherP3 — Infrastructure (this commit)
holon-viz-wasmcrate: 8wasm-bindgenfilter/query functions for client-side graph filteringesbuild+@types/cytoscape, hand-authoredsrc/types.ts, legacy JS wrapped for incremental migrationbuild-wasm,ui-install,ui-build,ui-typecheck,ui-watchBuild verification
cargo check -p holon-viz-wasm— cleancargo check -p ledgerr-host --bin host-tauri— cleannpm run build/npm run typecheck— cleanjust check-drift— all 3 artifacts passBacklog status
All P1–P3 viz roadmap items shipped. No remaining backlog items on this branch.