| #1020 |
Statistics routes have no permission check; query route leaks a DB connection per call and answers 200 for missing runs
Found during #1012. (1) GET /workflows/stats, /workflows/<id>/metrics, /workflows/heatmap carry @spe...
|
in-progress |
medium |
2026-10-20 03:01 |
- |
|
| #1019 |
Approval status endpoint is unauthenticated and cross-tenant; approver IP taken from X-Forwarded-For first hop
Found during #1010. (1) GET /api/v1/gateway/approvals/<approval_id>/status has no auth and queries p...
|
in-progress |
medium |
2026-10-20 03:01 |
- |
|
| #1018 |
User-welcome and invitation emails interpolate unescaped values into HTML
EARS: When the API builds an HTML email body, every interpolated value shall be HTML-escaped. Found ...
|
in-progress |
medium |
2026-10-20 03:01 |
- |
|
| #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 |
- |
|
| #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 |
- |
|
| #999 |
Tenant secret key rotation tooling: reload ring once on unknown key id; hwe secrets reseal
EARS: When the store reads an envelope whose key id is not in the cached key ring, it shall reload t...
|
open |
medium |
2026-10-20 01:42 |
- |
|
| #998 |
Encryption keys: env wins over platform file with no drift guard (HIGHWAY_ENCRYPTION_KEY, RBAC_MASTER_ENCRYPTION_KEY)
EARS: When the JSONB encryption key or the RBAC master key is configured in both the environment and...
|
open |
medium |
2026-10-20 01:42 |
- |
|
| #997 |
TenantRateLimiter run-lease methods have no tests
EARS: The run-lease path of engine/policies/tenant_rate_limiter.py shall have unit tests that go red...
|
open |
medium |
2026-10-20 01:40 |
- |
|
| #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 |
- |
|
| #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 |
- |
|
| #988 |
highway_dsl WorkflowBuilder.build() should reject branch handlers defined outside the branch lambda
EARS: When WorkflowBuilder.build() runs, it shall raise ValueError if any task inside a ParallelOper...
|
open |
medium |
2026-10-20 00:47 |
- |
|
| #987 |
Branch failures accepted by wait_for_parallel_branches(all_of) never reach the #956 unrecovered-failure rule
EARS: If a branch task fails with a handler and nothing downstream accepts the failure, then the run...
|
open |
medium |
2026-10-20 00:47 |
- |
|
| #986 |
Pause is not honoured inside parallel branches
EARS: While a run is paused, the engine shall not start the next task of any of its branch runs. Fou...
|
open |
medium |
2026-10-20 00:47 |
- |
|
| #982 |
Unit tests that depend on production database state fail on an empty database
EARS: The superproject and engine unit suites shall pass against an empty database built from the mi...
|
open |
medium |
2026-10-20 00:46 |
- |
|
| #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 |
- |
|
| #977 |
Undefined template path renders as an empty string without any warning
EARS: If a {{path}} placeholder in a task argument resolves to no value, then the Highway engine sha...
|
open |
medium |
2026-10-20 00:43 |
- |
|
| #976 |
Failed run exposes only workflow_failed in /events and /steps; earlier successful steps vanish
EARS: When a workflow run fails, GET /workflows/{id}/events and /steps shall still return the events...
|
in-progress |
medium |
2026-10-20 00:43 |
- |
|
| #968 |
Remove SMTP leftovers after #927: core config.ini [email], config.example.ini x2, preinstalled_apps.yaml default_secrets, aiosmtplib extra, CLAUDE.md SMTP sections
EARS SPEC:
- The Highway repositories shall contain no SMTP host, SMTP username or Vault mail-secret...
|
closed |
medium |
2026-10-20 00:09 |
- |
|