Skip to content

Add eval scenarios, reviewed and corrected - #27

Draft
jimutt wants to merge 4 commits into
mainfrom
eval-scenarios
Draft

Add eval scenarios, reviewed and corrected#27
jimutt wants to merge 4 commits into
mainfrom
eval-scenarios

Conversation

@jimutt

@jimutt jimutt commented Jul 27, 2026

Copy link
Copy Markdown
Owner

Ten scenarios from tessl scenario generate . --count 10 --workspace dld-kit, reviewed against the skills they claim to test and corrected. Also adds tessl.json linking the directory to a Tessl project, which tessl eval run requires.

Read this before merging: the baseline is meaningless for this kit

A Tessl eval runs each task twice — without the plugin and with it — and reports the difference. That framing does not work here, and the scenarios should not be read as evidence that DLD "adds value."

The control is degenerate in both directions:

  • Baseline gets the scripts (how the fixtures are built) — the scripts are part of the kit and largely self-documenting, so the baseline agent infers the workflow and matches the treatment.
  • Baseline denied the scripts — it cannot conform to conventions it has never seen, so the delta only says the kit exists.

There is no configuration where the control is informative, because DLD's correct output is defined by DLD. The treatment supplies the standard being graded against.

Confirmed empirically. A probe run of scenario-4 — the most prohibition-heavy rubric in the set — scored 100/100 on every check in both variants, with the with-context run taking 3m33s / 666k input tokens against the baseline's 1m26s / 270k.

So run these with --skip-baseline and treat the result as a regression suite — "does v0.9.0 still produce correct DLD artifacts across ten workflows" — rather than a measure of the kit's worth:

tessl eval run . --skip-baseline --label "v0.9.0 regression"

The useful comparison is between kit versions, not against no kit: --context-commit v0.8.0 holds the scenarios fixed and varies the kit, which answers "did this change help."

Related consequence: the publish-time eval feeding the registry quality score runs the A/B, so that number will stay near zero-delta regardless of kit quality. Not worth chasing.

Corrections made to the generated set

scenario-9 rebuilt. Its setup.sh wrote reduced reimplementations of all eight reindex scripts inline (rename-decision.sh 119 lines → 31, commit-reindex.sh 177 → 52), so the eval measured the agent against a stub kit. Real scripts now vendored at .tessl/skills/, verified byte-identical. The rubric expected a commit subject of dld-reindex: rename colliding IDs, an invention of the stub; the real script emits reindex local decisions: DL-004 -> DL-006, .... Verified end-to-end.

Two rubrics contradicted their own skills. scenario-6 required annotations within the first 10 lines where dld-retrofit allows "top of file or on the main export/class"; scenario-8's highest-weighted item required two decisions on one annotation line where dld-implement says they can share one. Both would have penalized correct work.

Self-reported process checks: 15 items / 151 of 1000 weight → 2 / 26. Converted where observable (%% escaping is now checked by whether percentages survive intact in the record body), dropped where redundant, removed where unobservable. The two remaining score the audit report and reindex summary, which are the requested deliverables. Freed weight went to untested task requirements — amends/supersedes frontmatter, required body content, snapshot artifact state.

All 103 items had no category. All 95 now carry one.

Scenarios 2, 4 and 5 shipped embedded .git directories, which git can only store as gitlinks — a clone would get empty fixtures, and common.sh resolves the project root via git rev-parse. Replaced with setup.sh, matching scenarios 3, 7 and 9.

All ten rubrics total exactly 100.

🤖 Generated with Claude Code

jimutt and others added 4 commits July 27, 2026 13:50
tile.json is deprecated; the CLI warns on every invocation and says support
will be removed in a future release. With both files present the linter
reports plugin.json as authoritative and tile.json as ignored, so tile.json
is removed rather than left to drift.

Rewrites the three manifest tests against plugin.json. The previous
"skill paths point to existing files" and "steering rule path exists" tests
could not fail: their `return 1` ran inside a `while` loop on the right-hand
side of a pipe, in a subshell. They now read entries into an array first and
assert a non-empty parse.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Ten scenarios generated with `tessl scenario generate --count 10`, then
reviewed against the skills they claim to test. Corrections:

scenario-9 (dld-reindex): the generated fixture wrote its own reduced
reimplementations of all eight reindex scripts inline in setup.sh
(rename-decision 119 lines -> 31, commit-reindex 177 -> 52), so the run
measured the agent against a stub kit. The real scripts are now vendored at
.tessl/skills/, and the rubric's expected commit template is corrected from
the stub's invented "dld-reindex: rename colliding IDs" to what
commit-reindex.sh actually emits.

scenario-6 required annotations within the first 10 lines; dld-retrofit
allows "top of the file or on the main export/class". scenario-8's
highest-weighted item required two decisions on one annotation line;
dld-implement says multiple decisions *can* share a line, not must. Both
relaxed to match.

Fifteen items (151 of 1000 weight) scored "the agent ran script X" by
grepping the agent's own log. Where the effect is observable in repo state
they became state checks - notably %% escaping, which is now checked by
whether percentages survive intact in the record body. Where redundant with
an existing state check they were dropped, and where unobservable (whether
printf was used to write a file) they were removed rather than faked. Two
remain, both cases where the report is itself the deliverable. Freed weight
went to task requirements that were untested: amends/supersedes frontmatter,
required body content, snapshot artifact state.

All 103 items had a null category; all 95 now carry one.

Scenarios 2, 4 and 5 shipped embedded .git directories, which git can only
store as gitlinks - a clone would get empty fixtures. Replaced with a
setup.sh that git-inits, matching scenarios 3, 7 and 9.

Not yet run.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@jimutt
jimutt marked this pull request as draft July 27, 2026 12:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant