Compare four RAID records and follow an assumption into a later linked issue

HTML for this example

Select the code and use your copy shortcut. Changes in this preview are temporary.

<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Archive migration · RAID review</title><style>*{box-sizing:border-box}body{margin:0;background:#f0f1f5;color:#34394d;font:16px/1.55 system-ui,sans-serif}main{max-width:980px;margin:auto;padding:24px}h1{font-size:34px;line-height:1.16}h2{font-size:24px}h3{font-size:19px}.eyebrow{color:#666583;letter-spacing:.06em}.card{padding:20px;margin:18px 0;background:#fff;border:1px solid #cbcbd9;border-radius:6px}.tabs{display:flex;flex-wrap:wrap;gap:10px;margin:14px 0}button,input,textarea,select{font:inherit;color:inherit}button{padding:10px 14px;min-height:44px;background:white;border:1px solid #74718e;border-radius:5px;cursor:pointer}button[aria-pressed=true]{background:#5b557b;color:white}button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:3px solid #b8782d;outline-offset:3px}.history{display:grid;grid-template-columns:1fr 1fr;gap:14px}.history>section{padding:16px;background:#f0eef7;border-left:5px solid #82719e}.source{border-left:6px solid #ae7c30;background:#fff8e8}.type{font-size:19px;font-weight:750}label{display:block;font-weight:650;margin:14px 0 6px}textarea,select{width:100%;min-width:0;max-width:100%;padding:10px;border:1px solid #9a97ae;border-radius:4px;background:#fff}textarea{min-height:95px;resize:vertical}.copy p{white-space:pre-wrap;overflow-wrap:anywhere}#status{font-weight:650;color:#79521b}footer{margin:24px 0;color:#66677d}[hidden]{display:none!important}@media(max-width:560px){main{padding:12px}h1{font-size:28px}.card{padding:14px}.history{grid-template-columns:1fr}}</style></head><body><main><p class="eyebrow">FICTIONAL ARCHIVE-SITE MIGRATION · REVIEW RECORDS</p><h1>Four types, four different next checks</h1><p>A possible production failure, an untested belief, an observed staging result and a needed input belong in distinct records. None is a release decision.</p><div class="tabs" aria-label="Review snapshot"><button id="initial" type="button" aria-pressed="true">Initial snapshot</button><button id="later" type="button" aria-pressed="false">Later evidence E2</button></div><section id="e2" class="card source" hidden><h2>Later evidence E2 · fictional inventory comparison</h2><p>The export omits <code>/guide/a</code>. This shows the completeness assumption false and supports a linked inventory issue. It does not diagnose every cause of T1's staging 404.</p></section><div class="tabs" aria-label="RAID type"><button id="risk" type="button" aria-pressed="true">R · Risk</button><button id="assumption" type="button" aria-pressed="false">A · Assumption</button><button id="issue" type="button" aria-pressed="false">I · Issue</button><button id="dependency" type="button" aria-pressed="false">D · Dependency</button></div><section class="card" aria-live="polite"><p id="type" class="type">R1 · Risk</p><h2 id="description">Old production URLs may fail after the switch.</h2><p><strong>Scope:</strong> <span id="scope-out">Future production switch; no production failure is observed in this record.</span></p><p><strong>Evidence / source:</strong> <span id="evidence-out">Planning concern in this fictional review; no production test result supplied.</span></p><p><strong>Why this type:</strong> <span id="why-out">A possible future event calls for preparation, not an invented incident record.</span></p><p><strong>Next check:</strong> <span id="next-out">Plan how the old URL set will be checked and how failures would be handled.</span></p><p id="status-out">Open planning risk. Actual owner and review date not supplied.</p></section><section id="history" class="card" hidden><h2>A1 history stays beside its linked issue</h2><div class="history"><section><h3>Initial A1 · retained</h3><p>Export assumed complete. Validation pending. Unverified.</p></section><section><h3>After E2</h3><p>A1 shown false by the omitted URL. I2: incomplete URL inventory, linked to A1 and E2.</p></section></div><p>I1 remains an observed staging 404 to investigate. R1 remains a future production risk. D1 has no confirmed hosting response or delivery date.</p></section><section class="card"><h2>Your proposed RAID entry</h2><p>Choose the type and explain it. This builder arranges supplied words; it does not classify free text or resolve a record.</p><label for="own-type">Proposed type · required</label><select id="own-type"><option value="">Choose R / A / I / D</option><option>Risk</option><option>Assumption</option><option>Issue</option><option>Dependency</option></select><div id="fields"></div><div class="tabs"><button id="build" type="button">Build entry review</button><button id="reset" type="button">Reset typed work</button></div><p id="status" role="status"></p><section id="confirm" hidden><h3>Clear the eleven entry fields?</h3><div class="tabs"><button id="keep" type="button">Keep my entry</button><button id="clear" type="button">Clear typed entry</button></div></section><section id="review" class="card copy" hidden><h3 id="own-heading"></h3><div id="copy"></div><p>User-selected type and supplied status only. No classification, issue resolution or release approval has been performed.</p></section></section><footer>Temporary review text in this open page. No saved project record, team contact, external request or automatic status update.</footer></main><script>'use strict';const $=id=>document.getElementById(id);let snapshot='initial',type='risk';const rows={risk:['R1 · Risk','Old production URLs may fail after the switch.','Future production switch; no production failure is observed in this record.','Planning concern in this fictional review; no production test result supplied.','A possible future event calls for preparation, not an invented incident record.','Plan how the old URL set will be checked and how failures would be handled.','Open planning risk. Actual owner and review date not supplied.'],assumption:['A1 · Assumption','The export is assumed complete; validation pending.','Required URL inventory for the migration export.','Initial planning belief; validation evidence not yet supplied.','A belief being relied on needs validation.','Compare the export with the required URL inventory.','Unverified in the initial snapshot.'],issue:['I1 · Issue','T1 returned 404 for /guide/a in isolated staging.','Isolated staging; production impact is unknown.','Fictional test T1, route /guide/a, observed 404.','An observed result in a specific environment calls for investigation.','Investigate the staging configuration and expected route; retain T1.','Observed issue. No cause or resolution established.'],dependency:['D1 · Dependency','Hosting-team input on redirect configuration is needed.','Required before the next migration test.','Needed input in the review record; no hosting reply or delivery date supplied.','Work needs an input from another team; needed is not received.','Identify the required input and confirm who will provide it and when.','Provider response, actual owner and delivery date remain unconfirmed.']};function render(){let r=rows[type];if(type==='assumption'&&snapshot==='later')r=['A1 · Assumption shown false','E2 shows the export omits /guide/a.','Required URL inventory for the migration export.','Later fictional evidence E2; earlier unverified A1 retained below.','An assumption contradicted by evidence needs an updated assessment and linked issue.','Review linked I2 and complete the inventory check without diagnosing all of I1.','Shown false by E2. I2 records the incomplete URL inventory, linked to A1 and E2.'];for(const[i,id]of ['type','description','scope-out','evidence-out','why-out','next-out','status-out'].entries())$(id).textContent=r[i];$('e2').hidden=snapshot!=='later';$('history').hidden=snapshot!=='later';for(const id of ['initial','later'])$(id).setAttribute('aria-pressed',String(id===snapshot));for(const id of Object.keys(rows))$(id).setAttribute('aria-pressed',String(id===type));}for(const id of ['initial','later'])$(id).addEventListener('click',()=>{snapshot=id;render();});for(const id of Object.keys(rows))$(id).addEventListener('click',()=>{type=id;render();});const fields=[['id','Record ID'],['description-input','Description'],['scope','Scope and environment · required'],['source','Source or evidence reference · required'],['reason','Reason for the proposed type · required'],['owner','Actual owner, if agreed'],['next','Next check'],['date','Review date, if supplied'],['state','Supplied status'],['linked','Linked record and evidence IDs']];for(const[id,label]of fields){const l=document.createElement('label'),t=document.createElement('textarea');l.htmlFor=id;l.textContent=label;t.id=id;$('fields').append(l,t);}const ids=['own-type',...fields.map(x=>x[0])];for(const id of ids)$(id).addEventListener('input',()=>{$('review').hidden=true;$('status').textContent='Entry changed. Build again to review current wording.';});$('build').addEventListener('click',()=>{const missing=['own-type','scope','source','reason'].filter(id=>!$(id).value.trim());$('review').hidden=true;if(missing.length){$('status').textContent='Complete: '+missing.map(id=>({'own-type':'proposed type',scope:'scope/environment',source:'source/evidence',reason:'type reason'})[id]).join(', ')+'.';return;}$('own-heading').textContent='Proposed '+$('own-type').value+' · '+($('id').value.trim()||'ID not supplied');$('copy').replaceChildren();for(const[id,title]of fields){const h=document.createElement('h3'),p=document.createElement('p');h.textContent=title;p.textContent=$(id).value.trim()||'Not supplied.';$('copy').append(h,p);}$('review').hidden=false;$('status').textContent='Entry review assembled from your words; project records unchanged.';});$('reset').addEventListener('click',()=>{$('confirm').hidden=false;$('keep').focus();});$('keep').addEventListener('click',()=>{$('confirm').hidden=true;$('reset').focus();});$('clear').addEventListener('click',()=>{for(const id of ids)$(id).value='';$('review').hidden=true;$('confirm').hidden=true;$('status').textContent='Eleven entry fields cleared; worked snapshots unchanged.';$('own-type').focus();});</script></body></html>