Workflow history integrity

워크플로 이력 무결성

Verify a signature chain to detect altered workflow history.

···
html
<div class="scene"><div class="title">SIGNED HISTORY CHAIN</div><div class="row chain"><div class="tile" id="h1">STEP 1<br><small>sig A</small></div><span>→</span><div class="tile" id="h2">STEP 2<br><small>sig B</small></div><span>→</span><div class="tile" id="h3">STEP 3<br><small>sig C</small></div></div><div id="verify" class="verify">CHAIN VERIFIED</div></div>
css
.scene{width:min(94vw,760px);height:min(86vh,320px);padding:clamp(10px,2.5vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);color:var(--fg);font:500 clamp(11px,1.3vw,16px)/1.25 "Pretendard Variable",Pretendard,-apple-system,sans-serif;display:flex;flex-direction:column;gap:clamp(7px,1.6vmin,12px);overflow:hidden}.scene *{box-sizing:border-box}.title{font-weight:750;color:var(--accent)}.muted{color:var(--muted)}.mono{font-family:ui-monospace,monospace}.row{display:flex;align-items:center;justify-content:center;gap:clamp(5px,1.4vmin,12px);flex:1;min-height:0}.tile{border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:clamp(6px,1.6vmin,12px);text-align:center;min-width:0}.on{border-color:var(--accent)!important;background:color-mix(in srgb,var(--accent) 12%,var(--surface))!important}.pulse{animation:pulse 1.6s infinite alternate}@keyframes pulse{to{border-color:var(--accent);transform:translateY(-3px)}}.chain .tile{flex:1}.chain span{color:var(--accent)}.chain small{color:var(--muted);font-size:1em}.verify{text-align:center;border:1px solid var(--accent);border-radius:6px;padding:8px;color:var(--accent);font-weight:700}.tampered{border-color:var(--accent-3)!important;color:var(--accent-3)!important}
js
let tampered=false;function tick(){tampered=!tampered;document.getElementById('h2').classList.toggle('tampered',tampered);document.getElementById('h3').classList.toggle('tampered',tampered);document.getElementById('h2').innerHTML=tampered?'STEP 2<br><small>changed!</small>':'STEP 2<br><small>sig B</small>';const v=document.getElementById('verify');v.textContent=tampered?'VERIFICATION FAILED AT STEP 2':'CHAIN VERIFIED';v.classList.toggle('tampered',tampered)}tick();setInterval(tick,1400)

Long-running workflow history is read again during recovery, so altered records could change later decisions. Dapr 1.18 can optionally sign history steps and verify the chain whenever state loads.

The demo breaks the verification chain after one altered step. Integrity checks do not replace confidentiality or access controls.

When to use

Use it for important workflows where tampering with execution history must be detected.

Open as page ↗