test(rig): flow debugger script entry — Playwright direct-call run + verify-delmia-notifier step H2
Claude-Session: https://claude.ai/code/session_01NcMG6xXdsJbmD2wYAgkK29
This commit is contained in:
@@ -5,7 +5,7 @@ set -euo pipefail
|
||||
# crash (docker kill = SIGKILL, so auto-down failover is exercised, not CoordinatedShutdown's
|
||||
# graceful handover) + rejoin. Requires: seed-delmia-sim.sh + seed-delmia-api.sh already run, and
|
||||
# DELMIA_API_KEY exported (the token printed by seed-delmia-api.sh). FLOW_ONLY=1 skips A-G (no
|
||||
# notifier build, no docker kill) and runs the Flow Debugger steps H and I alone.
|
||||
# notifier build, no docker kill) and runs the Flow Debugger steps H, H2 and I alone.
|
||||
#
|
||||
# HISTORY (2026-09-02): the first run of this script found that inbound API keys were a PER-NODE
|
||||
# SQLite store, so the key minted through the active node did not exist on the standby and every
|
||||
@@ -32,6 +32,10 @@ set -euo pipefail
|
||||
# G reject path (DownloadPath *.bad) -> NO + "Simulated reject"
|
||||
# H Flow Debugger live run + replay -> YES (flow-debug run-method returns the traced
|
||||
# site steps inline; flow-debug replay rebuilds the same chain from the central audit store)
|
||||
# H2 Flow Debugger SCRIPT entry (2026-09-08) -> YES (flow-debug run-script calls $MACHINE's
|
||||
# OutboundDemo Call script directly — no inbound method in front of it — and the reply leads with
|
||||
# the operator-attributed RouteCall root, then the site's inline ScriptRun. Skipped with a note
|
||||
# when the instance is not seeded.)
|
||||
# I Flow Debugger OUTBOUND calls (2026-09-06) -> YES (FlowOutboundDemo — seed-flow-outbound-demo.sh —
|
||||
# returns ApiOutbound + DbOutbound + Notification rows inline: the sync ApiCall Delivered, the cached
|
||||
# DB write Submitted or — DB reachable, immediate-completion path — already Delivered, the
|
||||
@@ -77,7 +81,7 @@ for n in a b; do
|
||||
done
|
||||
|
||||
if [ "${FLOW_ONLY:-}" = 1 ]; then
|
||||
echo "== FLOW_ONLY=1: skipping A-G (notifier + failover drill); running the Flow Debugger steps H and I only"
|
||||
echo "== FLOW_ONLY=1: skipping A-G (notifier + failover drill); running the Flow Debugger steps H, H2 and I only"
|
||||
else
|
||||
echo "== A baseline (active first)"; write_cfg "$(url_of "$ACT"),$(url_of "$STB")" "$DELMIA_API_KEY"; notify A YES
|
||||
echo "== B standby first (relay)"; write_cfg "$(url_of "$STB"),$(url_of "$ACT")" "$DELMIA_API_KEY"; notify B YES
|
||||
@@ -142,6 +146,31 @@ done
|
||||
echo " replay: $H_REPLAY"
|
||||
echo "H live+replay -> YES"
|
||||
|
||||
# H2 — Flow Debugger SCRIPT entry (design 2026-09-08): flow-debug run-script invokes $MACHINE's
|
||||
# OutboundDemo Call script directly through the traced RouteToCall path — no inbound method in front
|
||||
# of it. The reply's first row is the operator-attributed RouteCall root written centrally, followed
|
||||
# by the site's inline ScriptRun (and this script's outbound rows). OutboundDemo declares no
|
||||
# ParameterDefinitions (seed-flow-outbound-demo.sh passes no --parameters; it reads an optional
|
||||
# WorkOrder and defaults it), so no --params is needed.
|
||||
echo "== H2 Flow Debugger script entry (direct call)"
|
||||
H2_INSTANCE_ID=$("$CLI" instance list "${H_ARGS[@]}" | python3 -c 'import json,sys; xs=json.load(sys.stdin); print(next((i["id"] for i in xs if i.get("uniqueName")==sys.argv[1]), ""))' "$MACHINE")
|
||||
if [ -z "$H2_INSTANCE_ID" ]; then
|
||||
echo "H2 script entry -> SKIPPED ($MACHINE not seeded — run docker/seed-delmia-sim.sh)"
|
||||
else
|
||||
set +e; H2_RUN=$("$CLI" flow-debug run-script --instance-id "$H2_INSTANCE_ID" --script OutboundDemo "${H_ARGS[@]}"); H2_RC=$?; set -e
|
||||
[ "$H2_RC" -eq 0 ] || { echo "FAIL: flow-debug run-script exited $H2_RC: $H2_RUN"; exit 1; }
|
||||
H2_OK=$(echo "$H2_RUN" | python3 -c '
|
||||
import json, sys
|
||||
r = json.load(sys.stdin)
|
||||
kinds = [json.loads(e["detailsJson"]).get("kind") or "?" for e in r.get("events", [])]
|
||||
ok = r.get("completed") is True and kinds[:1] == ["RouteCall"] and "ScriptRun" in kinds
|
||||
print(("YES" if ok else "NO") + " root=" + str(r.get("rootExecutionId")) + " kinds=" + ",".join(kinds)
|
||||
+ (" error=" + str(r.get("errorCode")) if r.get("errorCode") else ""))
|
||||
sys.exit(0 if ok else 1)') || { echo "FAIL: run-script incomplete: $H2_OK"; exit 1; }
|
||||
echo " live: $H2_OK"
|
||||
echo "H2 script entry (direct call) -> YES"
|
||||
fi
|
||||
|
||||
# I — Flow Debugger outbound calls (plan 2026-09-06). The demo script makes a sync ExternalSystem.Call,
|
||||
# a Database.CachedWrite and a Notify.Send. Live: the site returns the rows it emitted inline — the
|
||||
# sync ApiCall is already Delivered, the cached write and the notification are Submitted (pending).
|
||||
|
||||
Reference in New Issue
Block a user