| #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 |
- |
|
| #1008 |
POST /api/v1/dsl_to_json executed caller Python on the API container (AST blocklist only)
EARS SPEC:
- When POST /api/v1/dsl_to_json converts Python DSL, the API shall run the code only in t...
|
open |
critical |
2026-10-20 02:38 |
- |
|
| #1007 |
INCIDENT 2026-10-20 ~02:29Z: engine tests/unit/db ran against live highway_db_v2 and called jumper.cleanup_events('highway_default', 60, 1000)
WHAT: a security-batch agent ran the full engine tests/unit inside highway-api; tests/unit/db/test_c...
|
open |
high |
2026-10-20 02:34 |
- |
|
| #1006 |
App child processes inherit the worker environment; pathlib/io are allowlisted, so app code can likely read /proc/self/environ and /run/highway/secrets
EARS SPEC:
- When an app action runs in its child process, the child shall hold no worker secret in ...
|
open |
high |
2026-10-20 02:26 |
- |
|
| #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 |
- |
|
| #1004 |
mg verify fails on highway_db_v2: jumper_initial row has NULL checksum, parallel_join_counter applied with a pre-commit checksum
EARS: When mg verify runs on the merged migration set against highway_db_v2, it shall report no mism...
|
open |
low |
2026-10-20 02:04 |
- |
|
| #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 |
- |
|
| #1002 |
Stale smtp_password refs (shared/mail) in 10 welcome_email/invitation_email installations; tenant app secret DELETE cannot remove a ref without a value
EARS: Installations shall not reference retired platform secrets; DELETE /api/v1/tenant/apps/<instal...
|
open |
low |
2026-10-20 01:42 |
- |
|
| #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 |
- |
|
| #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 |
- |
|
| #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 |
- |
|
| #991 |
CRITICAL: {{ENV.<name>}} in workflow templates returns any worker environment variable (DB_PASSWORD, JWT secret, encryption keys, Vault admin token)
EARS SPEC:
- The variable resolver shall not resolve any reference to the worker process environment...
|
open |
critical |
2026-10-20 01:11 |
- |
|
| #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 |
- |
|