Repository navigation
feat: Playb00k Assurance view + SysMD solver sidecar (stacked on #93) - #94
Merged
Merged
Conversation
… + session-only token + opt-in public UI Playb00k Assurance tab over the /assurance/* routes: - requirement table with the five assurance states shown as label + symbol (never colour alone), state chips with counts, server-side filters (state/status/owner/gap), source-kind badges; - detail drawer with the whole thread (obligations, element, control + implementation path, case, revision-bound evidence with which revision moved, links resolved/dangling, gaps); - run a case from the page: explicit confirm step, runs at the revision shown, refusals explained; - diagram panel (authenticated blob, fit/2x/3x zoom in a scrolling frame, open full size); - audit panel (hash-chain status, decisions, denials). Setup gains an optional access token kept in sessionStorage only. lib/assurance.js is the client. Server: KR0KI_PUBLIC_UI (default off) serves only the static /playbook GET routes without a token, because a browser navigation cannot send Authorization; data routes still require one. Tested both ways (default behind the gateway; opt-in public; data/POST/lookalike paths still 401). Verified in a real browser against a real server (gateway on, real baseline and evidence): 401 -> Setup token -> list, drawer, diagram, audit, and a VC-A02 run flipping the row from stale to verified. Fixtures are the server's real JSON. Playb00k tests 206; cargo workspace 50 suites; fmt and clippy -D warnings clean. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GgXQRGsprSZc2oXGNj9n8X
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GgXQRGsprSZc2oXGNj9n8X
…ent, /sysmd/solve, MCP solve_constraints) SysMD runs headless in a hardened container (read-only root, tmpfs store, 1 GiB, cap-drop ALL, loopback). kr0ki talks REST only. - sysmd_client: project+session per solve, deleted afterwards; parses SysMD's display strings into closed intervals widened outward for the Representer's 5-decimal rounding and its dropped-upper-bound / literal-0 cases (verified live), unbounded/empty/NaN kept distinct, SI-base compound units mapped by dimension, standard library and bookkeeping variables filtered - POST /sysmd/solve (gateway: model.read), MCP solve_constraints (33 tools), KR0KI_SYSMD_URL, sysmd health check - just sysmd-image|sysmd-up|sysmd-down|test-live-sysmd, systemd unit, scripts/build-sysmd.sh (fork branch kr0ki/sidecar) - docs/SYSMD-SIDECAR.md Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GgXQRGsprSZc2oXGNj9n8X
…pfs; document revision-bound evidence policy Evidence is re-verified on minor releases, not patch bumps. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GgXQRGsprSZc2oXGNj9n8X
elasticdotventures
force-pushed
the
feat/playbook-assurance-sysmd-sidecar
branch
from
October 7, 2026 01:09
e10aaa6 to
671d5a9
Compare
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.
Stacked on #93 (base is
feat/assurance-thread, so this diff is only the UI work). Retarget tomainonce #93 merges.What
A Playb00k Assurance tab over the
/assurance/*routes.sessionStorageonly (verified: not inlocalStorage), sent only as anAuthorizationheader.Server change to review carefully
KR0KI_PUBLIC_UI(default off, no behaviour change unless set): serves only the static/playbookGET routes without a token. A browser navigation cannot sendAuthorization, so with per-identity grants on the page could not otherwise load. Exact patterns only (gateway::PUBLIC_UI_PATTERNS, unit-tested to be static playbook GETs holding no grant); tested that data routes,/mcp/tools, a POST to/playbook/xand lookalike paths still return 401.Verification
cargo test, 6 tests), with the older stale evidence kept as history.cargo test --workspace --no-fail-fast50 suites; fmt and clippy-D warningsclean.Known limits
/home/...inartifact_uri) exists in the earlier commit's history in this branch.Also in this PR: the SysMD sidecar (second commit,
a5527f2)tukcps/SysMD (interval constraint solver) as an optional black-box sidecar: kr0ki sends model text over REST, reads solved variables back, links no SysMD code. Without
KR0KI_SYSMD_URL,/sysmd/solveanswers 503 and nothing else changes.POST /sysmd/solve[?language=sysml|kerml|sysmd](gatewaymodel.read), MCP toolsolve_constraints(now 33 tools),sysmdhealth check,just sysmd-image | sysmd-up | sysmd-down | test-live-sysmd, systemd unit,scripts/build-sysmd.sh,docs/SYSMD-SIDECAR.md.Representerloses information:2.000001prints2,0..1e-7prints0(only the lower bound when the bounds are within 1e-5),1..1e9prints0..1e9.sysmd_client::parse_valuewidens every printed bound outward so the interval contains the true range (an exact6returns about[5.99997, 6.00003]). Unbounded, empty and NaN are separate variants, never numbers. A model SysMD rejects is averdict: errorreport, a violated constraint isinconsistent.5 mm->0.005 m);kg m / s^2-style units are mapped toufo_types::quantity::Unitby dimension, unknown ones reported rather than guessed.PromptExecution/SysMD(integration branchkr0ki/sidecar): toolchain resolver, distinct currencies, and two found while building this:POST /sessioncreated sessions with no standard library (every REST model failed with an NPE; regression test fails without the fix), and no way to delete a REST session. Not yet sent upstream.Verified: 12 client unit tests (rounding table, unit table, wiremock flow), 5 server tests, 3 live tests against the real hardened container (containment of the true values, error and inconsistent verdicts, no leaked sessions), and a real
kr0ki-server-> container run of/healthand/sysmd/solve. Full gate: fmt, clippy-D warnings,cargo test --workspace51 suites / 819 tests / 0 failed, bridge 14 tests.Limits: SysMD has no auth, so loopback only; the image takes ~2 minutes from a warm gradle cache and holds a 136 MB jar (gitignored; build with
just sysmd-image, alone, not beside cargo).🤖 Generated with Claude Code
https://claude.ai/code/session_01GgXQRGsprSZc2oXGNj9n8X