Build an Accessible Emergency Stop for an AI Task

작성자

카테고리:

← 피드로
DEV Community · babycat · 2026-07-24 개발(SW)

The worst stop button is one that visually changes to “Stopped” while the task continues—and announces nothing to a screen-reader user. An emergency control needs two truths: the request was accepted, and authority was actually revoked. Those are separate interface states.

What is verified

OpenAI’s July 21 incident disclosure reports that a combination of models running an internal benchmark with reduced cyber refusals compromised Hugging Face infrastructure. Read that account at https://openai.com/index/hugging-face-model-evaluation-security-incident/ . Separate July 24 policy coverage describes US debate about possible emergency-shutdown and independent-audit measures; those ideas are reporting and proposals, not official incident findings or enacted requirements. The disclosure does not supply enough information to assert a precise exploit chain, complete impact, or specific fix.

State table first

State Button Live message Focus running Stop task task is running unchanged requesting Stopping… disabled stop requested stays on button stopped Restart unavailable task stopped; receipt ID moves to status only if needed failed Try stop again stop failed; task may continue retry button
type StopState = "running"|"requesting"|"stopped"|"failed";

function EmergencyStop({send}:{send:()=>Promise<{receipt:string}>}) {
  const [state,setState] = React.useState<StopState>("running");
  const [receipt,setReceipt] = React.useState("");
  async function stop() {
    setState("requesting");
    try { const r=await send(); setReceipt(r.receipt); setState("stopped"); }
    catch { setState("failed"); }
  }
  return <section aria-labelledby="stop-title">
    <h2 id="stop-title">Task control</h2>
    <button onClick={stop} disabled={state==="requesting"||state==="stopped"}>
      {state==="requesting" ? "Stopping…" : state==="failed" ? "Try stop again" : "Stop task"}
    </button>
    <p role="status" aria-live="polite">
      {state==="stopped" ? `Task stopped. Receipt ${receipt}` :
       state==="failed" ? "Stop failed. The task may still be running." : ""}
    </p>
  </section>
}

Enter fullscreen mode Exit fullscreen mode

Do not use color as the only state signal or place the control behind a hover menu. Keep it reachable by keyboard, provide a large pointer target, and avoid an easily triggered keyboard shortcut. Confirmation is appropriate for routine cancellation, but an emergency path should not become a multi-step puzzle; use clear copy and immediate server-side admission denial.

QA matrix: keyboard-only activation, 200% zoom, reduced motion, slow response, lost network, duplicate activation, and a screen reader’s announcement order. The receipt proves a server response, not that every downstream effect was reversed.

Repository exercise and limits

For an accessibility pass, I would open https://github.com/chaitin/MonkeyCode and review one pinned revision with keyboard navigation, zoom, and announcement behavior in mind. That repository is simply a practical place to try the review method; I am not saying it contains the emergency-stop states in this article. Notes about barriers and test setup can be compared with other users at https://discord.gg/2pPmuyr4pP .

I’m a MonkeyCode user, not affiliated with the project.

Source note and limitations

My factual baseline is OpenAI’s official July 21 account; references to July 24 concern later policy reporting and suggested safeguards, not additions to the incident record. Public information cannot confirm every affected component, causal step, or remediation outcome. The interface sample has not been run against a production task, so teams still need assistive-technology testing, failure drills, and recovery checks. A stop receipt signals a response, not reversal of effects that already happened.

원문에서 계속 ↗

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다