Files
yvgude--lean-ctx/scripts/demo-outcome-pricing.sh
T
wehub-resource-sync 26382a7ac6
CI / Clippy (push) Failing after 15m13s
CI / Test (ubuntu-latest) (push) Failing after 16m1s
CI / Test (macos-latest) (push) Has been cancelled
CI / Test (windows-latest) (push) Has been cancelled
CI / Build (no embeddings / no ORT) (push) Has been cancelled
CI / Format (push) Has been cancelled
CI / Cookbook (Node) (push) Has been cancelled
CI / Pi Extension (Node) (push) Has been cancelled
CI / Rust SDK (lean-ctx-client) (push) Has been cancelled
CI / Embed SDK (lean-ctx-sdk) (push) Has been cancelled
CI / Python SDK (leanctx) (push) Has been cancelled
CI / Hermes Plugin (Python) (push) Has been cancelled
CI / SDK Conformance Matrix (push) Has been cancelled
CI / Coverage (push) Has been cancelled
CI / cargo-deny (push) Has been cancelled
CI / Adversarial Safety (push) Has been cancelled
CI / Benchmarks (push) Has been cancelled
CI / Output-Quality Gate (eval A/B) (push) Has been cancelled
CI / Documentation (push) Has been cancelled
CI / CI Green (push) Has been cancelled
JetBrains Plugin / Actionlint (push) Has been cancelled
CodeQL / Analyze (actions) (push) Has been cancelled
CodeQL / Analyze (javascript-typescript) (push) Has been cancelled
CodeQL / Analyze (rust) (push) Has been cancelled
JetBrains Plugin / Validation (push) Has been cancelled
JetBrains Plugin / Build (push) Has been cancelled
JetBrains Plugin / Test (push) Has been cancelled
Security Check / Security Scan (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:35:30 +08:00

106 lines
4.3 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# demo-outcome-pricing.sh — live, end-to-end walkthrough of the Outcome-Based
# Pricing golden path (Epic #671), using the REAL lean-ctx binary on REAL
# command output. No mock data: every saving is measured by the engine
# compressor, every signature is real Ed25519.
#
# What it proves, in order:
# 1. real shell compression records measured savings into the signed ledger
# 2. the ledger is an intact SHA-256 hash chain
# 3. a signed batch verifies OFFLINE (the artifact a customer/auditor checks)
# 4. usage is BILLABLE only because it is signed && chain-valid
# 5. a FOCUS FinOps CSV carries the savings as a Credit row (reconcilable
# against the customer's real provider bill)
#
# The private control-plane (lean-ctx-cloud) turns step 4's verified total into
# the Stripe success-fee invoice — see lean-ctx-cloud/docs/success-fee-v1.md.
#
# Usage:
# scripts/demo-outcome-pricing.sh # build (if needed) + run
# LEANCTX_BIN=/path/to/lean-ctx scripts/demo-outcome-pricing.sh
# KEEP=1 scripts/demo-outcome-pricing.sh # keep the temp data dir + artifacts
set -euo pipefail
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$REPO_ROOT"
# ── Resolve a real lean-ctx binary (never touches the installed one) ──────────
if [[ -n "${LEANCTX_BIN:-}" ]]; then
BIN="$LEANCTX_BIN"
elif [[ -x "rust/target/release/lean-ctx" ]]; then
BIN="rust/target/release/lean-ctx"
else
echo "→ building lean-ctx (release)…"
(cd rust && cargo build --release --quiet)
BIN="rust/target/release/lean-ctx"
fi
BIN="$(cd "$(dirname "$BIN")" && pwd)/$(basename "$BIN")"
echo "→ using binary: $BIN"
# ── Isolated, throwaway data dir so the demo never pollutes real savings ──────
DEMO_DIR="$(mktemp -d "${TMPDIR:-/tmp}/leanctx-outcome-demo.XXXXXX")"
export LEAN_CTX_DATA_DIR="$DEMO_DIR/data"
export LEAN_CTX_AGENT_ID="outcome-pilot-demo"
export LEAN_CTX_MODEL="gpt-4o"
export LEAN_CTX_SAVINGS_LEDGER="on"
mkdir -p "$LEAN_CTX_DATA_DIR"
cleanup() { [[ "${KEEP:-0}" == "1" ]] || rm -rf "$DEMO_DIR"; }
trap cleanup EXIT
hr() { printf '\n\033[1;36m── %s ─────────────────────────────────────────\033[0m\n' "$1"; }
hr "1. Generate REAL savings (engine compresses real command output)"
# Each call runs the command for real and records the measured raw-vs-compressed
# token delta into the ledger. git status/log on this repo are reliably verbose.
"$BIN" -c "git status" >/dev/null
"$BIN" -c "git log --oneline -80" >/dev/null
"$BIN" -c "git diff --stat HEAD~30 2>/dev/null || git log --stat -5" >/dev/null
echo "recorded measured shell-compression events"
hr "2. Local ledger + SHA-256 chain status"
"$BIN" savings summary || true
"$BIN" savings verify
hr "3. Sign a portable batch and verify it OFFLINE"
BATCH="$DEMO_DIR/signed-batch.json"
"$BIN" savings sign --out "$BATCH"
echo "→ signed artifact: $BATCH"
"$BIN" savings verify-batch "$BATCH"
hr "4. Billable usage meter (signed && chain_valid)"
"$BIN" billing usage --json | tee "$DEMO_DIR/usage.json"
if command -v python3 >/dev/null 2>&1; then
python3 - "$DEMO_DIR/usage.json" <<'PY'
import json, sys
u = json.load(open(sys.argv[1]))
billable = u.get("signed") and u.get("chain_valid")
print(f"\n→ signed={u.get('signed')} chain_valid={u.get('chain_valid')} "
f"→ BILLABLE={billable}; net_saved_tokens={u.get('net_saved_tokens')} "
f"saved_usd=${u.get('saved_usd'):.4f}")
PY
fi
hr "5. FOCUS FinOps export (savings as a Credit row)"
FOCUS="$DEMO_DIR/focus.csv"
"$BIN" finops export --target=focus --out="$FOCUS"
echo "→ FOCUS CSV: $FOCUS"
echo "Credit (savings) rows — negative BilledCost is the verified reduction:"
{ head -1 "$FOCUS"; grep ',Credit,' "$FOCUS" || grep 'Credit' "$FOCUS" || true; } | head -5
hr "Done"
cat <<EOF
The open engine produced a SIGNED, verifiable savings figure and a FOCUS export
the customer can reconcile against their provider invoice. The private
control-plane (lean-ctx-cloud) reads exactly this verified total to raise the
capped success-fee invoice in Stripe.
Artifacts (${KEEP:+kept }in $DEMO_DIR):
- signed batch : $BATCH
- usage meter : $DEMO_DIR/usage.json
- FOCUS export : $FOCUS
EOF
[[ "${KEEP:-0}" == "1" ]] && echo "(KEEP=1 — temp dir preserved)" || echo "(temp dir cleaned up; re-run with KEEP=1 to inspect)"