Repository navigation
feat(kr0ki-core): Phase 5 — DecisionNode/ForkNode/JoinNode/MergeNode in ProcessChart - #274
elasticdotventures wants to merge 6 commits into
Conversation
Add DecisionNode, ForkNode, JoinNode, MergeNode support to ProcessChart::from_sysml. Mapping rules: - MergeNode/JoinNode: atomic, plain "next" transitions (fan-in pass-through) - DecisionNode: per-branch "choose:<target>" named events (use `decide(id)`) - ForkNode: per-branch "fork:<target>" named events (use `fork_to(id)`) lazily 0.59 stores one Transition per event key, so multi-branch Decision/Fork cannot use guarded "next" transitions — distinct event names sidestep that limit. Phase 6: replace with Vec<Transition>/event once lazily gains that support. Also fix duplicate workspace dep keys: - Cargo.toml: remove duplicate lazily entry (lines 61 and 89) - ledgerr-mcp/Cargo.toml: remove duplicate optional lazily dep; statechart feature no longer needs dep:lazily since it is always included 7/7 kr0ki-core tests pass. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…atch
Three lingering issues from the earlier batch merge:
1. hsm.rs line 390: dangling `<<<<<<< HEAD` marker with no matching
`=======`/`>>>>>>>` — remove the lone conflict marker.
2. lib.rs lines 835, 1103: two `self.hsm_hooks` references that no longer
compile because `hsm_hooks` was superseded by `project_event_bus` in the
merged PRs. Migrate:
- `hsm_hooks.register(built_in.into_hook_fn())` → wrap in a
`project_event_bus` closure that reconstructs `TransitionHookEvent`
from the "from"/"to" attrs on `lifecycle_transition` ProjectEvents.
- `hsm_hooks.fire(TransitionHookEvent { from, to })` →
`project_event_bus.fire(ProjectEvent::lifecycle_transition(&from.token(), &to.token()))`.
3. ledgerr-mcp-server.rs line 439: missing closing `}` on the
`GCP_BILLING_TOOL` match arm — add it.
Verified: `cargo check -p ledgerr-mcp` clean; `bash scripts/mcp_cli_demo.sh basic`
returns 7 successful JSON-RPC responses including tools/list (16 tools).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
ufo-types PR #35 (feat/control-flow-nodes) was merged at 9f883e6. Update workspace pin from the branch tip (523837f) to the squash commit on main so the dependency resolves from an official merged ref rather than the pre-merge branch tip. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add ledgerr_validate_process to the generated capability contract, agent runbook, and demo script. Regenerated via `cargo run -p ledgerr-mcp --bin regen-docs`. 9/9 contract_codegen tests now pass. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…tall.md - crates/ledgerr-cloud/src/reconcile.rs: wrap each provider in an 8s tokio::time::timeout so gcloud/az hanging without credentials maps to a Fail entry instead of blocking the whole run; fixes budget_reconcile_returns_well_formed_report_shape (was 30s timeout) - crates/ledgerr-mcp/tests/install_e2e.rs: spawn the actual ledgerr-mcp-server binary, run the full MCP initialize → tools/list → tools/call sequence over stdio, and assert the published catalog (16 tools) and a real pipeline_status call succeed - docs/mcp-install.md: build → bundle → install → client interface reference covering cargo xtask bundle, Claude Desktop .mcpb install, JSON-RPC stdio protocol, and the install_e2e smoke test command PASS: budget_reconcile_returns_well_formed_report_shape 1.69s PASS: install_path_binary_spawns_and_serves_full_catalog 0.57s PASS: contract_codegen (9/9) 0.00s Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Phase 5 install story + ufo-types provenanceAre the types in promptexecution/ufo-types?Yes. ufo-types = { git = "https://github.com/promptexecution/ufo-types", rev = "9f883e6" }
use ufo_types::{ElementId, ElementKind, Relation};Is the install package working?Yes. Three layers verified: 1. Bundle ( sha256: 2. Binary-spawning functional test — tests/install_e2e.rs Spawns 3. Budget reconcile — no more 30s hang
How to install the server / client interfaceSee docs/mcp-install.md (added in this branch). Summary: # Build
cargo build -p ledgerr-mcp --bin ledgerr-mcp-server --release
# Bundle
cargo run --bin xtask-mcpb -- bundle \
--binary target/release/ledgerr-mcp-server \
--output dist/ledgerr-mcp.mcpb \
--version v1.10.0
# Verify bundle
cargo run --bin xtask-mcpb -- verify dist/ledgerr-mcp.mcpbClaude Desktop: Settings → Developer → MCP Servers → "Install from file" → select Client protocol: JSON-RPC 2.0 over stdio. Required sequence:
Smoke-test the binary path: cargo test -p ledgerr-mcp --test install_e2e |
The fabricated 'initialize ok / tools/list ok: 17 tools published' lines were never executed and inconsistent with PUBLISHED_TOOLS[16] in contract.rs. Replace with verbatim cargo test output. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Summary
ProcessChart::from_sysmlinkr0ki-coreto handle all four control-flowElementKindvariants added in ufo-types PR feat: add isometric graph visualization stack for Slint UI #35on("next", target)transitions (fan-in pass-through)"choose:<target>"— caller routes withchart.decide("target_id")"fork:<target>"— caller routes withchart.fork_to("target_id")Design constraint documented in code
lazily0.59 stores oneTransitionper event key (HashMap<String, Transition>), so multiple guarded transitions on"next"silently overwrite each other. Named events ("choose:<id>","fork:<id>") are unambiguous and compose correctly with the current lazily API.Phase 6 note is in the chart source: replace with
StateBuilder::parallel+ child regions +Vec<Transition>/eventonce lazily gains that support.Also fixes
lazilyworkspace dep key in rootCargo.toml(lines 61 and 89 were identical)lazilyoptional dep inledgerr-mcp/Cargo.toml;statechartfeature simplified sincelazilyis always includedTest evidence
Closes #268
🤖 Generated with Claude Code