Add eval scenarios, reviewed and corrected - #27
Draft
jimutt wants to merge 4 commits into
Draft
Conversation
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
marked this pull request as draft
July 27, 2026 12:31
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ten scenarios from
tessl scenario generate . --count 10 --workspace dld-kit, reviewed against the skills they claim to test and corrected. Also addstessl.jsonlinking the directory to a Tessl project, whichtessl eval runrequires.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:
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-baselineand 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:The useful comparison is between kit versions, not against no kit:
--context-commit v0.8.0holds 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.shwrote reduced reimplementations of all eight reindex scripts inline (rename-decision.sh119 lines → 31,commit-reindex.sh177 → 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 ofdld-reindex: rename colliding IDs, an invention of the stub; the real script emitsreindex 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-retrofitallows "top of file or on the main export/class"; scenario-8's highest-weighted item required two decisions on one annotation line wheredld-implementsays 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/supersedesfrontmatter, required body content, snapshot artifact state.All 103 items had no
category. All 95 now carry one.Scenarios 2, 4 and 5 shipped embedded
.gitdirectories, which git can only store as gitlinks — a clone would get empty fixtures, andcommon.shresolves the project root viagit rev-parse. Replaced withsetup.sh, matching scenarios 3, 7 and 9.All ten rubrics total exactly 100.
🤖 Generated with Claude Code