# remediation agent froze applying fixes to legacy table layout - how to fix it

## TL;DR

Bound the table rewrite: legacy table layouts need a scoped strategy (fix headers and scope first, then stop), not a full modernization. Agents that try to convert a 400-row table layout to CSS grid freeze in the planning. One line of why: the audit asks for accessible tables, not a redesign, and the agent must know where the fix ends.

## The error, verbatim

```text
RemediationAgentError: no progress for 600s on legacy table
    table: 400 rows, nested tables, spacer gifs
    plan: full conversion to semantic grid (never started)

```

## Fix it step by step

### Step 1: Reproduce the freeze

```bash
node agent/remediate.js --rule table | rg -i 'no progress|planning' | head -5
```

Expected: The agent plans a rewrite and never acts.

### Step 2: Scope the fix

```bash
npx @axe-core/cli https://example.com/legacy --rules table-headers,scope-attr-valid,td-headers-attr | tail -3
```

Expected: The actual violations are headers and scope, not the layout choice.

### Step 3: Bound the patch

```bash
rg -n 'table|scope' agent/patches/table.js | head -10
```

Expected: Restrict the patch to th/scope/headers fixes; flag modernization as a separate project.

### Step 4: Re-run remediation

```bash
node agent/remediate.js --rule table | tail -4
```

Expected: Agent fixes headers and scope, reports the layout as tech debt, and moves on.

### Step 5: Add a regression probe

```bash
node agent/run-audit.js --smoke | tail -3
```

Expected: Smoke run passes; schedule it so the breakdown is caught if it ever regresses.

## When to use this skill

- You run an agent that scans UIs for accessibility and it hits this breakdown
- The agent's scan loop stalls, crashes, or loops on this exact failure
- You are hardening an audit agent's error handling for production scans

## When NOT to use this skill

- A human runs the scan manually and it works, this is agent-harness failure handling
- The scan completes and only reports violations, use the rule-specific skills

## Compatibility

Remediation agent with table patch primitives. The scope boundary is a team decision encoded in the patch policy. Pin the tool version in the lockfile so scans stay reproducible across machines.

## Variant phrasings

### agent frozen on table layout

Same freeze, same scoping.

### legacy table remediation stall

Practitioner phrasing.

### the breakdown hits other routes too

Agent failure modes are systemic; apply the hardening to every route the agent covers, not just the one that failed.

## Why it happens

Legacy table layouts (nested tables, spacer images, presentation markup) trigger agents to plan full modernizations, which is a redesign disguised as a fix. The planning never converges because the scope is unbounded. The accessibility fix is bounded: proper th headers, scope attributes, captions where missing. The modernization is a separate project with design input. Agents need an explicit patch boundary for legacy code: fix the violations, flag the debt, move on. Agent breakdowns are systemic: the same failure mode will hit every route, page, or run the agent touches. Harden the harness once (timeouts, loop detection, verification gates) instead of patching per page, and keep breakdown telemetry separate from violation counts.

## Edge cases

- Layout tables should get role presentation, data tables get headers, the agent must distinguish them first.
- Spacer gifs get empty alt as part of the bounded fix, that is cheap and safe.
- Never let the agent restructure a 400-row table unsupervised, the regression risk dwarfs the a11y gain.
- Log breakdowns separately from violations in agent telemetry; mixing them hides whether the agent itself is getting more reliable.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_9zPHhigjkKiaaoL2hvpCAw
