| #1015 |
Tenant-reachable tools: unverified static findings from the #1005 tools.* sweep
STATIC claims from a read-only subagent sweep during #1005. None reproduced; each needs a live repro...
|
in-progress |
high |
2026-10-20 02:52 |
- |
|
| #1014 |
tools.workflow.spawn takes tenant_id from a workflow variable; definition lookups by name/id are not tenant-scoped
EARS: tools.workflow.spawn shall submit the child under ctx.tenant_id only. get_latest_definition an...
|
in-progress |
critical |
2026-10-20 02:52 |
- |
|
| #1013 |
Tenant users can list, pause, drain, resize and delete shared platform workers (/api/v1/workers*)
EARS: The worker list and worker control endpoints shall be available only to platform admins (requi...
|
in-progress |
high |
2026-10-20 02:52 |
- |
|
| #1012 |
Bad caller input that reaches SQL returns 500 instead of 400
EARS: If request parameters are invalid (e.g. /workflows/stats?since=garbage), then the API shall re...
|
in-progress |
medium |
2026-10-20 02:38 |
- |
|
| #1011 |
Global ValueError handler echoes exception text to clients
EARS: If an unhandled ValueError reaches the API error handler, then the response shall carry a stab...
|
in-progress |
medium |
2026-10-20 02:38 |
- |
|
| #1010 |
gateway_approvals.py renders error text into HTML without escaping (XSS)
EARS: When the approval gateway renders an HTML page, every interpolated value shall be HTML-escaped...
|
in-progress |
high |
2026-10-20 02:38 |
- |
|
| #1009 |
schedules.py imports a module named by the caller
EARS: When a schedule is created or run, the API/engine shall never import a module whose name comes...
|
in-progress |
high |
2026-10-20 02:38 |
- |
|
| #1005 |
Tenant workflows can run internal.* tools: the submit-time internal tool block is never called
EARS SPEC:
- If a workflow submitted through POST /api/v1/workflows (or any tenant-facing submit pat...
|
in-progress |
critical |
2026-10-20 02:26 |
- |
|
| #1003 |
SwitchOperator runs every case: case tasks are ordinary graph tasks (auto-chained before the switch) and only the head of an unselected case is skipped
EARS: When a SwitchOperator selects a case, the Highway engine shall run only that case's task and t...
|
in-progress |
high |
2026-10-20 01:49 |
- |
|
| #1001 |
MCP server token kept when the server URL changes and not bound to the registered server
EARS: When a tenant re-registers an MCP server name with a different URL, the system shall drop the ...
|
in-progress |
medium |
2026-10-20 01:42 |
- |
|
| #1000 |
Gmail and Telegram connect are not atomic (token write, installation upsert, integration row in separate transactions)
EARS: When a tenant connects Gmail or Telegram, the token write, the app installation upsert and the...
|
in-progress |
low |
2026-10-20 01:42 |
- |
|
| #996 |
get_system_health_summary calls __wrapped__ on undecorated health tools: every sub-check reports unhealthy
EARS: internal.health.get_summary shall report each sub-check's real result. FOUND in #924: enterpri...
|
in-progress |
low |
2026-10-20 01:19 |
- |
|
| #995 |
LLM provider api key by secret_id never resolves: engine.tools.secrets does not exist
EARS: When tools.llm.call is given a secret_id, the system shall resolve the API key from the callin...
|
in-progress |
medium |
2026-10-20 01:19 |
- |
|
| #994 |
Unsandboxed shell tasks inherit the full worker environment (DB_PASSWORD, keys, Vault token)
EARS SPEC:
- When a shell or code task runs outside the sandbox, the engine shall pass it only an ex...
|
in-progress |
high |
2026-10-20 01:19 |
- |
|
| #993 |
tools.update.handle blanks {{update_payload.*}} before the handler sees it
EARS: When an update handler task runs, the engine shall resolve {{update_payload.*}} from the updat...
|
in-progress |
medium |
2026-10-20 01:18 |
- |
|
| #992 |
DSL prompt documents {{workflow.variable_name}}, which the resolver does not support
EARS: The DSL prompt shall document only template forms the resolver implements; if {{workflow.x}} i...
|
in-progress |
medium |
2026-10-20 01:18 |
- |
|
| #990 |
Condition evaluation error silently falls back to a truthy check: '{{x.stdout}} == ...' with a trailing newline always selects if_true
EARS: If a ConditionOperator / While condition cannot be evaluated (syntax error after interpolation...
|
in-progress |
high |
2026-10-20 01:10 |
- |
|
| #989 |
Cancelling or permanently failing a parallel-branch task flips the RUNNING parent workflow_run (trigger update_workflow_run_on_task_failure has no branch exclusion)
EARS: When a tools.workflow.execute_branch task reaches state cancelled or failed, the engine shall ...
|
in-progress |
high |
2026-10-20 00:55 |
- |
|
| #983 |
ruff 0.16.4: engine 28 and jumper 31 findings fail their CI lint; superproject 45 held by a ratchet; format drift in all three
EARS: ruff check and ruff format --check at the version in uv.lock shall report zero findings in hig...
|
in-progress |
low |
2026-10-20 00:47 |
- |
|
| #981 |
jumper standalone: 7 of 40 client tests fail against jumper's own migrations (task status columns shifted)
EARS: When the jumper repository's migrations are applied to an empty PostgreSQL 16 or 18 database, ...
|
in-progress |
medium |
2026-10-20 00:46 |
- |
|