Skip to content

feat: discovery suite and per-experiment egress opt-out - #41

Merged
gjtorikian merged 3 commits into
mainfrom
feat/discovery-suite
Oct 19, 2026
Merged

gjtorikian merged 3 commits into
mainfrom
feat/discovery-suite

Conversation

@gjtorikian

Copy link
Copy Markdown
Collaborator

Summary

  • Adds a fifth eval suite, discovery, for vendor-neutral tasks whose outcome is categorical (which product the agent chose) rather than pass/fail. It is never a headline suite: HEADLINE_SUITES is unchanged, so validation, framework expansion, planning and the leaderboard aggregate all pick it up from the one constant with no store migration or schema bump.
  • Makes the Matrix view's suite tabs show discovery. The view builds its tabs from a hard-coded list, so a suite missing there was invisible even though the report carried it. The list and hover titles are now exported, and the duplicated available-suite filter is one pure helper pinned by a new Matrix.test.ts.
  • Adds Runtime.egress: "proxied" | "open". An "open" runtime skips the egress proxy for that experiment's attempts even under --egress-proxy, so an arm that must reach the open internet can share a run with proxied arms instead of needing a second hosted run.
  • The opt-out is one condition in resolvePairEnvironments; the Docker layer is untouched because each attempt already gates its internal network and sidecar on its pair's egress.proxy. The choice lands in the pair environment (identity) and can be exempted in a comparison group with treatmentPolicyFields: ["egress"]. Open pairs still record their (inert) allowlist, write no denials log, and report egress as not instrumented. defineExperiment rejects "open" on a host runtime.

Add a fifth eval suite, `discovery`, for vendor-neutral tasks whose outcome
is categorical (which product the agent chose) rather than pass/fail. It is
never a headline suite: HEADLINE_SUITES is unchanged, so every validator,
expander, planner and the leaderboard aggregate pick it up from the one
constant with no store migration or schema bump.

The Matrix view builds its suite tabs from its own hard-coded list, so a
suite missing there is invisible even though the report carries it; the
list and hover titles now include discovery, are exported, and the
duplicated available-suite filter is one pure helper the new Matrix test
pins (tab present with a discovery pair, absent without, discovery-only
runs land on it with no toggle).

Spec: docs/ideation/discovery-suite/spec-phase-1.md
`Runtime.egress: "open"` skips the egress proxy for that experiment's
attempts even when the run was started with --egress-proxy, so an arm that
must reach the open internet can share a run with proxied arms. The choice
lands in each pair environment (`egress.proxy`), so it is identity and can
be exempted in a comparison group with `treatmentPolicyFields: ["egress"]`.

The decision is one condition in resolvePairEnvironments; the Docker layer
is untouched because each attempt already gates its internal network and
sidecar on its pair's `egress.proxy`. An open pair still records its
(inert) allowlist, writes no denials log and reports egress as not
instrumented. Container runtimes only: defineExperiment rejects "open" on a
host runtime, which is never proxied.

Spec: docs/ideation/discovery-suite/spec-phase-1.md
@greptile-apps

greptile-apps Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 5/5

[Medium impact] The PR appears safe to merge; the previous open-arm gateway failure is fixed.

Summary

Adds the discovery suite and lets container experiments opt out of a run’s egress proxy.

  • Discovery evals appear in run results without changing headline scores.
  • Container experiments can skip the egress proxy within a run.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart TD
  A[Resolve experiment and run settings] --> B{Container with proxy enabled and not open?}
  B -->|Yes| C[Combine runtime, adapter, and endpoint hosts]
  C --> D[Start attempt proxy with resolved allowlist]
  B -->|No| E[Record runtime and adapter hosts without endpoint hosts]
  E --> F[Run without attempt proxy]
  A --> G[Record non-secret endpoint URLs in pair identity]
Loading

Reviews (2) · Last reviewed commit: "fix(runtime): keep endpoint-override hos..." · Reviewed by Greptile

Comment thread src/execution-policy.ts Resolved
…lowlists

Under --egress-proxy the runner appended every container agent's endpoint-
override hosts to its allowlist for the whole run, and pair resolution
composed that list for every pair, open or not. The composer refuses IP
literals by design, so an open arm whose gateway is an IP (the very thing
an open arm exists to reach) stopped the run before any attempt started.

Pair resolution now decides "proxied" once per pair and uses it for both
the pair's egress.proxy and whether endpoint-override hosts join the
allowlist; the runner passes those hosts unconditionally as their own
option. An open pair's recorded allowlist is therefore the same with or
without the run flag, and a proxied arm behind an IP-literal gateway is
still refused loudly.

Addresses the Greptile P1 on #41.

Spec: docs/ideation/discovery-suite/spec-phase-1.md
@gjtorikian
gjtorikian merged commit 007c5ad into main Oct 19, 2026
13 checks passed
@gjtorikian
gjtorikian deleted the feat/discovery-suite branch October 19, 2026 18:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant