fix(web): add explicit ARIA role='region' to ActivityPane section (#3672)#3713
fix(web): add explicit ARIA role='region' to ActivityPane section (#3672)#3713djm204 wants to merge 5 commits into
Conversation
Records the verified current state (ContainerBeastExecutor already implemented per ADR-036) and the final 7-issue backlog, plus a lesson on verifying "doesn't exist" claims via direct file reads before filing issues. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 11d8e9892e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const content = input.content.length > MAX_INPUT_BYTES | ||
| ? input.content.slice(0, MAX_INPUT_BYTES) | ||
| : input.content; |
There was a problem hiding this comment.
Apply the size cap before scanning content
For oversized inputs with all whitespace or a very long whitespace prefix/suffix, the evaluator still calls input.content.trim() before this cap is applied, so it can scan (and potentially allocate from) the entire unbounded string before slicing to 500 KB. That defeats the new large-input CPU/memory guard in exactly the cases it is meant to protect; cap first or use a bounded emptiness check before any full-content scan.
Useful? React with 👍 / 👎.
| ); | ||
| } | ||
|
|
||
| if (config.costBudgetUsd !== undefined && (typeof config.costBudgetUsd !== 'number' || Number.isNaN(config.costBudgetUsd) || config.costBudgetUsd < 0)) { |
There was a problem hiding this comment.
When costBudgetUsd is Infinity (for example from a parsed CLI value or a programmatic config), this validation lets it through because Number.isNaN(Infinity) is false and it is not negative. The later check spend.estimatedCostUsd > config.costBudgetUsd can then never trip, so an invalid dollar budget silently disables the cost breaker despite the error message promising a finite value.
Useful? React with 👍 / 👎.
| - **Dashboard** (`packages/franken-web`): a real React/Vite/Zustand SPA — chat, beast dispatch, network config, and analytics pages — talking to the `frankenbeast chat-server` (Hono HTTP + WS, ADR-016) over HTTP/WebSocket. Not a stub. | ||
| - **CLI beast management** (`packages/franken-orchestrator/src/cli/beast-cli.ts`): `beasts catalog/create/spawn/list/status/logs/stop/kill/restart/resume/delete` all work today for **local process** runs. | ||
| - **Container execution already exists**: `ContainerBeastExecutor` (`packages/franken-orchestrator/src/beasts/execution/container-beast-executor.ts`) wraps `ProcessBeastExecutor` with a Docker-transforming supervisor — `docker run --rm --network none`, explicit workspace mount, env allowlist. This was implemented under **ADR-036** (`docs/adr/036-sandboxed-beast-execution.md`, Accepted 2026-05-23) as part of a security-hardening chunk. `BeastDispatchService` already resolves `executionMode` per-request and picks the right executor (`beast-dispatch-service.ts:66,202-204`). | ||
| - **What ADR-036 does not cover, confirmed missing**: no Dockerfile for the `fbeast/sandbox:latest` image the policy references (container mode cannot actually run without one), no CPU/memory/pids resource limits, no non-root enforcement, no CLI flag to request container mode, no dashboard UI to select it, and the chat/WS dispatch path never forwards `executionMode` (only the REST route does). |
There was a problem hiding this comment.
Refresh the deploy-beasts gap list
In this commit tree, several gaps listed here as “confirmed missing” are already implemented: the root Dockerfile builds fbeast/sandbox, DEFAULT_SANDBOX_POLICY includes non-root user and resource limits, the CLI parses --mode, the dashboard renders execution-mode controls, and chat routes accept executionMode. Leaving this as current verified state will steer readers toward already-completed P0/P2 work instead of the remaining gaps; update the plan to match the tree or mark it explicitly as historical.
Useful? React with 👍 / 👎.
| @@ -0,0 +1,20 @@ | |||
| # Issue #3672: ActivityPane ARIA Region Role - Progress Checklist | |||
There was a problem hiding this comment.
Remove the one-shot progress document
For this ARIA role change, this new progress document is tracking a small one-shot component/test edit, which the repo instructions explicitly say not to create progress docs for; keeping it adds task-log noise and makes the persistent task state less trustworthy. Remove this progress document unless the work is a larger multi-step effort.
AGENTS.md reference: AGENTS.md:L5-L6
Useful? React with 👍 / 👎.
Fixes #3672.
Description
The
ActivityPanecomponent rendered its activity stream in a<section>witharia-label="Activity"but lacked an explicit ARIA landmarkrole="region", hindering keyboard and assistive technology navigation.Changes
role="region"attribute to<section>inpackages/franken-web/src/components/activity-pane.tsx.packages/franken-web/tests/components/activity-pane.test.tsxverifying landmark accessibility attributes and rendering.