Skip to content

Commit 5241e24

Browse files
feat(readiness): add budget-aware eval gate
Add an internal pre-submit gate that runs quality first, tracks scenario-level evidence by skill and scenario fingerprints, schedules impact and historical-risk probes, and broadens to balanced remaining batches only after targeted evidence is clean. Document the final hard requirement for runtime skill changes, including 100% quality and 100% with-context evidence across main, reference, and regression for the final skill bundle state. Co-Authored-By: marvinbuff <marvinbuff@hotmail.com> Co-Authored-By: PReimers <preimers@pm.me>
1 parent 6636310 commit 5241e24

12 files changed

Lines changed: 2465 additions & 26 deletions

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ __pycache__/
44
*.py[cod]
55
.tessl/cache/
66
.tessl/tmp/
7+
.tessl/eval-evidence/
78
.codex/
89
.mcp.json
910
.vscode/

docs/agents/eval-risk-probes.txt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# suite:scenario entries that historically exposed scored with-context failures, ordered by
2+
# observed failure count per hosted solution cost from the paginated Tessl/local run-history
3+
# corpus. Missing-score/incomplete runs are excluded from this ranking. These are scheduling
4+
# probes only. They do not change final evidence requirements.
5+
reference:26-uppercase-side-effect-review
6+
reference:08-primary-contact-review
7+
main:02-delivery-appointments-mapconcurrent
8+
regression:04-primary-address-review
9+
regression:22-java8-version-scan
10+
main:01-offer-availability-mapconcurrent
11+
main:03-payment-screening-gatherer-review
12+
regression:16-java11-report-review
13+
regression:19-null-collector-review
14+
reference:15-session-roster-indexes
15+
reference:28-overdue-shipment-notices
16+
reference:05-parallel-cpu-review
17+
regression:09-order-collector-report
18+
regression:23-collector-order-scan
19+
regression:01-permission-and-orders
20+
regression:13-training-and-packets
21+
regression:14-parallel-mutation-review
22+
regression:17-java8-optional-prefix-review
23+
regression:24-mutable-batch-modernization
24+
regression:25-hard-stop-scan-audit
25+
main:04-invoice-bounds-and-temperature-windows
26+
reference:27-uppercase-names-implementation

docs/agents/evals.md

Lines changed: 67 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,20 @@ benchmark claims, or scoring rules.
88
## Rules
99

1010
- Don't cheat. Don't leak the diagnosis or desired fix in eval prompts.
11+
- Run quality review first, and if it is below 100%, stop and fix all quality issues before any new
12+
hosted eval rerun. Then execute targeted evals for every changed scenario, and only progressively
13+
broaden suites after targeted runs are clean. Preserve the daily budget by stopping at each stage
14+
unless failures require another targeted rerun; only then proceed to broader hosted checks. If a
15+
broad run shows any with-context below 100%, stop that run and return to targeted reruns for failed
16+
scenarios only.
17+
- Use the pre-submit gate before your first hosted command:
18+
19+
```bash
20+
scripts/pre_submit_gate.sh --plan-only
21+
```
22+
23+
Then execute only the printed targeted stages. The gate now enforces that each stage reaches
24+
100% with-context before allowing expansion to the next stage.
1125
- Keep natural activation prompts neutral. Explicit invocation prompts may name `$java-streams`, but
1226
should not leak the desired fix beyond invoking the skill.
1327
- The main eval should focus on realistic failure modes where this skill should change the answer:
@@ -114,9 +128,12 @@ benchmark claims, or scoring rules.
114128
legitimate coverage just to improve lift.
115129
- Track raw score, percentage-point lift, raw score ratio, missed-point reduction, and the
116130
`stream_quality` subtotal when updating benchmark claims.
117-
- Use `scripts/run_eval_suite.sh` for hosted evals. It runs from a temporary plugin copy so
118-
with-context variants can see the skill bundle, and it enforces the suite variant policy. Use
119-
Sonnet 4.6 unless intentionally comparing another model.
131+
- Use `scripts/run_eval_suite.sh` for hosted evals. It runs from a temporary plugin copy, passes
132+
`--skill java-streams` so with-context runs actually exercise this skill, passes `--force` so
133+
post-fix checks cannot reuse stale hosted solutions, and enforces the suite variant policy. Use the
134+
Tessl default solver unless intentionally comparing another model. If the account has
135+
model-selection entitlement, Sonnet 4.6 or a better frontier model is recommended for a more
136+
representative real-world check.
120137

121138
```bash
122139
scripts/run_eval_suite.sh main
@@ -127,20 +144,30 @@ benchmark claims, or scoring rules.
127144
- Direct equivalent for this repository's main eval runs:
128145

129146
```bash
130-
tessl eval run --agent claude:claude-sonnet-4-6 --variant without-context --variant with-context .
147+
tessl eval run --skill java-streams --force .
131148
```
132-
The workflow-pinned Tessl CLI version accepts this plugin eval workflow from the repository root.
133-
Public docs may still show tile-oriented examples; for this repository, use the pinned CLI and
134-
`scripts/run_eval_suite.sh` as the source of truth.
149+
The Tessl CLI runs the baseline control by default when plugin context is present. Use
150+
`--skip-baseline` only for context-only regression runs. Public docs may still show tile-oriented
151+
examples; for this repository, use the pinned CLI and `scripts/run_eval_suite.sh` as the source of
152+
truth.
153+
Tessl's public changelog notes that model and agent selection are plan-entitlement-gated:
154+
<https://docs.tessl.io/changelog>. Tessl also documents why the default eval solver is not pinned
155+
to Sonnet 4.6 for ordinary skill-development checks:
156+
<https://tessl.io/blog/why-were-changing-our-default-eval-model/>. Check
157+
`tessl eval run --list-agents` for the current default because Tessl can change it over time.
135158
- Run variants by suite purpose:
136-
- `evals/` main: always run both `without-context` and `with-context`, because it supports public
159+
- `evals/` main: always run both baseline control and `with-context`, because it supports public
137160
lift reporting.
138-
- `evals-reference/`: always run both `without-context` and `with-context`, because it is used to
161+
- `evals-reference/`: always run both baseline control and `with-context`, because it is used to
139162
find meaningful lift and promotion candidates.
140163
- `evals-regression/`: run `with-context` only by default, because it is safety coverage rather
141164
than lift discovery. Run `without-context` for regression only when intentionally checking
142165
whether a scenario should move back to reference.
143166
- Keep hosted eval usage minimal while preserving confidence and Tessl daily rate-limit budget:
167+
- Freeze runtime skill text before hosted spending whenever possible. The expensive failure mode is
168+
not the final all-suite requirement itself; it is rerunning required evidence after later edits to
169+
`skills/java-streams/SKILL.md` or bundled runtime references change the skill fingerprint. Do the
170+
local scenario/criteria crosswalk and obvious skill wording fixes before starting hosted runs.
144171
- A pure suite move does not require a hosted rerun when `task.md`, `criteria.json`, and
145172
`capability.txt` content are unchanged except for suite-placement metadata or numbering notes.
146173
Run local validators and update suite totals/numbering instead. If the move also changes task
@@ -155,19 +182,43 @@ benchmark claims, or scoring rules.
155182
the blocker and exact remaining targeted runs in the PR; benchmark and release-readiness claims
156183
remain blocked until those runs pass.
157184
- For runtime skill text or runtime reference changes, start with the affected scenario
158-
directories most likely to move, using the suite variant rule above.
185+
directories most likely to move, using the suite variant rule above. Use the pre-submit gate's
186+
impact-analysis suggestions for runtime-only changes when no maintainer-specified focus is
187+
obvious, and keep historical risk probes in the early targeted pass.
188+
- After quality is 100 and targeted probes are clean, switch to balanced broad chunks for the
189+
remaining required evidence. Do not keep broadening one scenario at a time unless a fresh broad
190+
failure is likely and conserving eval-solutions is more important than elapsed time.
159191
- If any affected with-context result is below 100%, keep rerunning only those targeted scenarios
160192
after fixes until they are clean.
161-
- Then run `evals/` for the main score.
193+
- Then run the remaining `evals/` scenarios for the main score, excluding scenarios already proven
194+
clean after the last skill bundle change.
162195
- Run relevant `evals-reference/` scenarios with both variants when deciding promotion or checking
163196
nearby behavior.
164197
- Before final release/open-source-ready claims after a runtime skill change, run every reference
165-
scenario with both variants and every regression scenario with context only. Do this after the
166-
targeted failures are clean and the main suite has run.
198+
scenario with both variants and every regression scenario with context only. This evidence may be
199+
split across targeted and broad runs, and already-proven scenarios should be excluded from later
200+
broadening as long as they passed after the last change to the skill bundle.
167201
- Run `evals-regression/` with context only as a final safety check before release or after broad
168202
changes, not on every tuning loop.
169203
- If a broad run exposes isolated failures, fix those exact scenarios and rerun them targeted
170-
before spending rate-limit budget on another broad suite run.
204+
before spending rate-limit budget on another broad suite run. Preserve successful scenario-level
205+
evidence from the same final skill state instead of rerunning it only because another scenario in
206+
the suite failed.
207+
- Never rerun a hosted eval merely because it looks stuck, slow, pending, or temporarily missing
208+
scoring. Tessl scoring can lag after scenario execution. Keep polling the existing run with
209+
`tessl eval view <run-id> --json` and wait for completion or a hard service failure; only rerun
210+
after a completed scored failure and a relevant fix, or after Tessl reports a non-recoverable run
211+
failure.
212+
- Never poll hosted evals with an unbounded loop or a bare `tessl eval run`. Poll the specific
213+
existing run ID with bounded attempts, visible output, and a stop condition; if unexpected
214+
background eval work appears, inspect process ancestry and Codex session logs before explaining
215+
where it came from.
216+
- For budgeting sanity, run the full suite stages incrementally and confirm each stage with
217+
100% with-context before the next one:
218+
budget-aware remaining suites from `scripts/pre_submit_gate.sh`, or a maintainer-approved
219+
explicit order via `--broad-order`.
220+
- If the change is runtime-wide and no scenario edit exists, prefer a scoped focus run first (via
221+
`--focus <scope>:<scenario>`) before any broad suite rerun.
171222

172223
## Current Suite Composition
173224

@@ -193,7 +244,7 @@ Update this section whenever active eval membership or scoring changes.
193244
evidence showed the without-context result was already high while with-context was clean. It
194245
remains useful natural Java 17 collector coverage, but it is weak main-lift evidence.
195246
- Hard-stop scan audits: regression explicit workflow-use only.
196-
- Reference suite: 5 scenarios, 460 total checklist points. Deleted reference number 12 and
247+
- Reference suite: 6 scenarios, 560 total checklist points. Deleted reference number 12 and
197248
regression-moved scenarios are not counted.
198249
- Regression suite: 19 scenarios, 1820 total checklist points.
199250
- Hosted benchmark evidence is pending rerun for the current active suite. Do not publish exact
@@ -212,3 +263,4 @@ the criteria JSON check listed there.
212263

213264
- [Workflow](workflow.md)
214265
- [Skill Behavior](skill-behavior.md)
266+
- [Pre-Submit Gate](pre-submit-gate.md)

0 commit comments

Comments
 (0)