Skip to content

Replace the eval tasks with four multi-turn tasks - #525

Open
AshishKumar4 wants to merge 11 commits into
mainfrom
evals/tasks
Open

AshishKumar4 wants to merge 11 commits into
mainfrom
evals/tasks

Conversation

@AshishKumar4

@AshishKumar4 AshishKumar4 commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

This PR replaces the current existing toy tasks with more relevant, multi-turn tasks.
The set of tasks are designed to sit on a spectrum of trivially solvable to medium-hard, so we can have a set of tasks that can act as regression tests that fail if harness quality or prompt degrade, or tasks that have a high margin of improvement which can help us evaluate improvements to harness.

All are multi-turn and verified through the Gadget's RPC against references the verifier owns, so any correct implementation passes.

change-calendar (4 turns). A maintenance-window calendar for five services, built to an exact contract with five error codes. Turn 2 writes the week up as a Document, and the check walks the document's headings and bullets against the calendar's own seeded windows. Turn 3 changes two rules; existing windows must survive, and verifyAfterAccept commits, reloads, and checks both data and rules persisted. Turn 4 asks how many hours one service has that week, answer as a bare number.

worker-logs (3 turns). A Workers request-log analyser. The verifier pushes a seeded day of 5,869 events for six Workers across four colos, with one planted worst hour and one decoy, and computes every reference answer itself (nearest-rank p95, half-open ranges, hourly buckets with empty hours). Turn 2 adds colo and route filters, a per-colo breakdown and a slowest-routes ranking. Turn 3 asks which Worker had the worst hour by error rate, in a fixed three-line reply shape; the check parses it and compares with the planted answer. That is the fabricated-answer failure made deterministic.

incident-desk (2 turns). An on-call desk where twenty responders acknowledge the same page at once: exactly one wins, everyone else is told who. Durable Object RPCs interleave at every await, so a check-then-write implementation fails. Turn 2 adds escalation and metrics computed from the board's own timestamps.

chess (3 turns). A complete engine with no library available in the sandbox, then PGN import/export, then draw detection. Verification is differential against chess.js: legal move sets, resulting positions and status must agree on twelve curated positions (castling through check, en passant that would expose the king, promotion by capture, pins, mate, stalemate) and on seeded random games with illegal-move probes; PGN import covers three miniatures, the Opera Game, and two seeded random games; export must replay in the oracle to the same position. Both en passant FEN conventions are accepted by canonicalising through the oracle, and once a game is drawn with pieces still mobile either an empty or a full move list is accepted.

Two small harness changes: the verifier receives the agent's chat replies for the turn (EvalVerifier.replies), and the verification budget is four minutes rather than two, since these checks make hundreds of RPC calls per turn. chess.js is a dev dependency as the oracle.

First live run (GPT 5.6 Luna, 10 trials each, 25 minutes, $1.21, no infrastructure failures, verification under 3 s per turn):

Task Pass What the misses were
change-calendar 10/10 all ten answered 6.5
incident-desk 9/10 time-to-resolve measured from acknowledgement; the prompt now says from openedAt
worker-logs 6/10 in turn 2, four agents called reset() while self-testing and destroyed the user's loaded data, against an explicit instruction
chess 5/10 castling rights dropped after 1. Nh3 and after an opponent's Rxc1; O-O-O with a knight on b1; king stepping into a pawn's attack; en passant not generated

Every verifier was run against a minimal correct implementation and a broken one before this was opened; that caught a key-order comparison bug in worker-logs that would have failed every agent. The probes are not committed.

@github-actions

Copy link
Copy Markdown

Preview: pr525-evals-tasks

https://pr525-evals-tasks-router.cloudflare-os-previews.workers.dev

Dashboard · deleted when this PR closes

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

This report is out of date. Scroll down for Devin Review's latest report on this PR.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no bugs or issues to report.

Devin Review

ask-bonk[bot]

This comment was marked as resolved.

@ask-bonk

ask-bonk Bot commented Sep 17, 2026

Copy link
Copy Markdown

Posted 9 actionable inline findings.

github run

@ask-bonk

ask-bonk Bot commented Sep 17, 2026

Copy link
Copy Markdown

Performance is inconclusive because no task cohort is comparable. Across unmatched cohorts, pass rate fell from 83.3% to 75.0%, while mean model turns rose from 8.3 to 18.4 and tool calls from 9.4 to 19.7. Candidate trajectories carried state across turns, notably creating a document from calendar data before editing rules and querying results. Different workloads and 10 stochastic trials per cohort could explain the apparent decline.

github run

@ask-bonk

ask-bonk Bot commented Sep 17, 2026

Copy link
Copy Markdown
  • [P1] change-calendar.eval.ts:148: The duplicate probe is also an overlap. A valid overlap-first implementation returns OVERLAP; exact-record deduplication also passes. Use the same ID with non-overlapping fields.
  • [P1] chess.eval.ts:456: Turn 3 never rechecks loadPgn() or pgn(), so draw-detection changes can break or remove PGN support while the overall task passes.
  • [P1] src/harness.ts:111: Replies are sliced after the previous snapshot, not after the current user prompt. Late callbacks from the prior activation can therefore be attributed to the current turn.
  • [P2] change-calendar.eval.ts:131: All range queries contain each returned window’s start. An implementation filtering by start time instead of interval overlap passes.
  • [P2] change-calendar.eval.ts:268: Spacing tests cover only later windows and not the exact 24-hour boundary, allowing one-directional or off-by-one implementations.
  • [P2] incident-desk.eval.ts:161: lateAck and unknown-incident checks validate only error codes, not the contractually required owner: null.
  • [P2] incident-desk.eval.ts:246: Optional escalations plus ?? 0 lets unchanged incidents omit the newly required field.
  • [P2] worker-logs.eval.ts:354: byColo() is never called with its required route filter, so implementations may ignore it.
  • [P2] change-calendar.eval.ts:347: The “number only” verifier accepts 6.5 hours..
  • [P2] worker-logs.eval.ts:377: The fixed three-line format accepts code fences, reordered labels, arbitrary parseable dates, omitted %, and unrestricted decimal precision.

github run

@ask-bonk

ask-bonk Bot commented Sep 17, 2026

Copy link
Copy Markdown

Performance is inconclusive because no task cohort is comparable. Across unmatched cohorts, pass rate fell from 86.7% to 67.5%, while mean model turns rose from 9.8 to 17.7 and tool calls from 12.1 to 19.8. Candidate trajectories sustained state across turns, notably querying calendar data, creating a document from it, then editing and rechecking the Gadget. Different workloads and only 10 stochastic trials per cohort could explain the apparent regression.

github run

@AshishKumar4
AshishKumar4 changed the base branch from main to harness/session-loss September 18, 2026 02:59
devin-ai-integration[bot]

This comment was marked as resolved.

@github-actions

github-actions Bot commented Sep 18, 2026

Copy link
Copy Markdown

Eval runs comparison

Baseline 87e09feb vs candidate 010f8da2 · 10 trials per task.

Task Baseline Candidate
appointment-desk (gpt-5.6-luna) 🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩 10/10
change-calendar (gpt-6-luna) 🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩 10/10
chess (gpt-6-luna) 🟩🟩🟩🟩🟩🟩🟩🟥🟥🟥 7/10
expense-ledger (gpt-5.6-luna) 🟩🟩🟩🟩🟩🟥🟥🟥🟥🟥 5/10
incident-desk (gpt-6-luna) 🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩 10/10
project-doc (gpt-5.6-luna) 🟩🟩🟩🟩🟩🟩🟩🟩🟥🟥 8/10
worker-logs (gpt-6-luna) 🟩🟩🟩🟩🟩🟩🟩🟩🟩🟥 9/10

No cohort is comparable.

Not compared:

  • only in baseline: appointment-desk (gpt-5.6-luna) 10/10, expense-ledger (gpt-5.6-luna) 5/10, project-doc (gpt-5.6-luna) 8/10
  • only in candidate: change-calendar (gpt-6-luna) 10/10, chess (gpt-6-luna) 7/10, incident-desk (gpt-6-luna) 10/10, worker-logs (gpt-6-luna) 9/10

Run · trajectories and raw results

@ask-bonk

ask-bonk Bot commented Sep 18, 2026

Copy link
Copy Markdown
  • [P1] incident-desk.eval.ts:143: Contract restricts severity to 1 | 2 | 3, but line 162 sends 4. A correctly validated RPC rejects before returning INVALID_SEVERITY. Accept number and validate in the implementation.
  • [P1] incident-desk.eval.ts:267: Filtered metric expectations derive services from the Gadget’s own board. An implementation storing every incident under edge-cache passes. Compare stored services against the original open() inputs.
  • [P1] change-calendar.eval.ts:189: Overlap verification only tests a window starting inside another. An implementation accepting a window that fully contains an existing window passes. Add a containment probe.
  • [P1] chess.eval.ts:468: Threefold repetition is tested only while castling rights remain unchanged. Counting board layout and side-to-move alone therefore passes, despite castling rights being part of repetition identity.
  • [P2] chess.eval.ts:403: Invalid-PGN rollback checks only FEN. An attempted import can corrupt move history while restoring the board and still pass. Compare canonical history before and after.
  • [P2] worker-logs.eval.ts:40: Events are ingested in alphabetical worker order, so unsorted summary() output passes. Ingest workers in a non-alphabetical order.

github run

@AshishKumar4
AshishKumar4 added this pull request to stack #529 September 18, 2026 14:00

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

This report is out of date. Scroll down for Devin Review's latest report on this PR.

Devin Review found 1 new potential issue.

⚠️ 1 issue in files not directly in the diff

⚠️ Reconnects can undercount turn cost

A reconnect before delayed gateway accounting makes #reconnectedDuringTurn skip the cost wait. The completed turn then reports stale cumulative cost.

Devin Review

@ask-bonk

ask-bonk Bot commented Sep 18, 2026

Copy link
Copy Markdown
  • [P1] chess.eval.ts:181: Castling is never tested while in check or into check. An engine validating only the transit square passes. Add both positions.
  • [P1] incident-desk.eval.ts:160: Stored severity is never compared with the requested severity. An implementation storing every incident as severity 3 passes.
  • [P1] worker-logs.eval.ts:154: The planted worst-rate hour also has the most errors. Selecting by error count instead of rate therefore passes.
  • [P2] change-calendar.eval.ts:77: All windows are inserted chronologically, so returning insertion order passes without implementing the required sorting or equal-start ID tie-break.
  • [P2] change-calendar.eval.ts:315: No accepted non-billing window exceeds five hours. An incorrect five-hour maximum passes the eight-hour contract.
  • [P2] change-calendar.eval.ts:337: Post-reload checks verify only the spacing rule, not persistence of the new billing cap.
  • [P2] chess.eval.ts:83: FEN canonicalization erases any non-capturable en-passant square. A wrong square such as a3 after e2e4 passes as equivalent to -.
  • [P2] chess.eval.ts:447: PGN export accepts any result token. The check permits the Opera Game to end in 0-1 or 1/2-1/2.
  • [P2] incident-desk.eval.ts:80: The successful acknowledgement response’s owner is never checked. It may disagree with the stored winner and still pass.
  • [P2] worker-logs.eval.ts:345: summary() never combines colo and route, so implementations that apply only one of those filters pass.

github run

@ask-bonk

ask-bonk Bot commented Sep 18, 2026

Copy link
Copy Markdown

Eval runs review

Performance is inconclusive because every task cohort is non-comparable. Across unmatched cohorts, pass rate fell from 70.0% to 42.5%, while mean turns rose from 7.1 to 14.5 and tool calls from 9.0 to 17.3. Candidate runs sustained multi-turn state, notably querying calendar data, creating a document, then editing and rechecking rules. Replaced workloads and only 10 stochastic trials per cohort could explain the apparent decline.

github run

@AshishKumar4 AshishKumar4 reopened this Sep 18, 2026
@github-actions github-actions Bot added the delivery Changes to CI or release delivery label Sep 18, 2026
@AshishKumar4
AshishKumar4 removed this pull request from stack #529 September 18, 2026 15:49
@AshishKumar4
AshishKumar4 added this pull request to stack #530 September 18, 2026 15:50
@github-actions github-actions Bot removed the delivery Changes to CI or release delivery label Sep 18, 2026
@ask-bonk

ask-bonk Bot commented Sep 18, 2026

Copy link
Copy Markdown

Eval runs review

Performance is inconclusive because no task cohort is comparable. Across unmatched cohorts, pass rate fell from 76.7% to 40.0%, while mean turns rose from 7.8 to 15.4 and tool calls from 9.5 to 16.8. Candidate runs sustained state across turns, notably querying calendar data, creating a document, editing rules, and re-querying results. Replaced workloads and only 10 stochastic trials per cohort could explain the apparent decline.

github run

@ask-bonk

ask-bonk Bot commented Sep 18, 2026

Copy link
Copy Markdown
  • [P1] worker-logs.eval.ts:361: byColo() and slowestRoutes() only receive FULL_DAY; implementations may ignore both range fields and pass. Add partial-range probes.
  • [P2] chess.eval.ts:442: chess.js accepts coordinate moves and missing move numbers. Comparing replay history therefore permits non-PGN output like e2e4 e7e5, violating the export contract. Validate the exported notation itself.
  • [P2] incident-desk.eval.ts:282: The final board check verifies only ordering. board() may omit newly created race-6 and esc-1, while self-derived metrics still pass. Assert the complete expected ID set.
  • [P2] change-calendar.eval.ts:257: Literal clock matching rejects valid forms such as 11:00 PM UTC, but accepts 23:00 PST. Parse the stated time or require and verify an explicit UTC format.
  • [P2] change-calendar.eval.ts:197: conflicts() never tests touching ranges, allowing inclusive-boundary overlap logic despite the contract.
  • [P2] incident-desk.eval.ts:29: Timestamp fields accept any string. Values such as "0" are parseable and can satisfy ordering and metrics despite not being ISO 8601.
  • [P2] incident-desk.eval.ts:276: Unknown-service metrics do not verify acknowledged or resolved; leaked global values pass when count is zero.
  • [P2] src/verifier.ts:42: agentReplies() includes empty tool-only messages, contrary to its documented semantics. Because reply checks use .at(-1), a trailing empty agent record can hide a valid textual answer.
  • [P3] worker-logs.eval.ts:243: Only the aggregate accepted count is checked. Individual ingest() calls may return incorrect compensating counts. Validate each response against its batch length.

workshop-evals tests and TypeScript checks pass.

github run

@ask-bonk

ask-bonk Bot commented Sep 22, 2026

Copy link
Copy Markdown
  • [P1] change-calendar.eval.ts:297: Spacing is never tested between two newly added same-service windows. Enforcing TOO_CLOSE only against seeded windows passes.

  • [P1] chess.eval.ts:273: Special moves validate only the returned FEN and status, not persisted FEN. Castling can return the correct FEN while storing an unmoved rook; the next fixture reload hides corruption.

  • [P1] incident-desk.eval.ts:275: State is not read after the second escalation. It may succeed without mutation, while the third mutates to severity 1 but returns AT_MAX_SEVERITY; all assertions pass.

  • [P2] incident-desk.eval.ts:265: Several turn-two open() results are ignored. Returning an error while still persisting race-6, esc-1, or billing incidents passes downstream checks.

  • [P2] worker-logs.eval.ts:340: Every range boundary is on an exact hour. Implementations that round arbitrary ISO endpoints to whole hours pass despite violating half-open range semantics.

github run

@ask-bonk

ask-bonk Bot commented Sep 22, 2026

Copy link
Copy Markdown

Eval runs review

Measured. No cohort is comparable, so no valid pass, duration, tool-error, or cost deltas exist.
Trajectories. In change-calendar turn 2, the candidate queried the calendar and generated a document from its windows.
Caveats. All tasks were replaced, and each cohort has only ten stochastic trials.
Verdict. inconclusive — no task cohort is comparable

github run

@ask-bonk

ask-bonk Bot commented Sep 22, 2026

Copy link
Copy Markdown
  • [P1] incident-desk.eval.ts:94: Turn 2 ignores race-open severity. Its summary identifies the winning attempt and expected severity, so a migration that changes severity still passes.
  • [P1] chess.eval.ts:515,526: Draw-triggering move() results are ignored. Returning ILLEGAL_MOVE while committing the move passes both repetition and fifty-move checks.
  • [P2] worker-logs.eval.ts:397: Full-day and SIN top-three route pairs are identical. Selecting candidates globally before applying the colo filter passes incorrectly.
  • [P2] change-calendar.eval.ts:239: conflicts() results match insertion order, so the required ID sorting is not exercised.
  • [P2] change-calendar.eval.ts:188: All timestamps use Z; textual-hour validation passes without converting offset timestamps to UTC.
  • [P2] incident-desk.eval.ts:287: Escalation checks omit immutable fields such as summary and service, allowing escalation to corrupt them.
  • [P2] chess.eval.ts:542: Material fixtures omit K+NN versus K, allowing overly broad insufficient-material detection to pass.

github run

One pass over the four verifiers with three rules: after a mutation, assert the return and
re-read the whole record; give every parser one input shape a lazy parser gets wrong; for
rules that interact, one case where the order matters. Each check stays satisfiable by any
correct reading of its prompt: the offset-timestamp probe asserts only that scheduling fails,
since the prompt fixes no code for it, and K+NN vs K is left out because the prompt does not
define insufficient material and engines disagree.

incident-desk: the turn-one predicate covers inc-1 after resolve too; escalation must change
severity and the count and nothing else, and is read back after every call including the
refused one; race-open's severity is checked against the attempt its summary names; the opens
a check depends on fail the check when refused.

chess: compareHere also reads fen(), so the stored position is checked wherever moves and
status are, including after each special move; the PGN self-comparison strips tag pairs so a
Gadget that adds a Date tag is not failed for it; the repetition and fifty-move moves are
asserted.

change-calendar: the touching window is mw-100 so conflicts() has to sort; two new windows in
one turn 22 hours apart; a +05:00 start that is outside hours in UTC must fail; a bullet may
state its length as hours and minutes.

worker-logs: the planted slow tail sits in one colo, so a colo-filtered ranking differs from
the day's; one summary range has endpoints inside an hour.
@AshishKumar4

Copy link
Copy Markdown
Contributor Author

All twelve read and handled in 4c5f0527, in one pass rather than one patch per item, since any verifier change after merge marks every cohort non-comparable and forces a fresh baseline. Ten as raised, one loosened, one declined.

  • change-calendar.eval.ts:297 spacing between two new windows: agreed; two auth windows added in the same turn 22 hours apart, the second must be TOO_CLOSE.
  • chess.eval.ts:273 persisted FEN after special moves: agreed; compareHere now reads fen() first, so the stored position is checked wherever moves and status are, including after every special move.
  • incident-desk.eval.ts:275 second escalation not read back: agreed; every escalate is read back, each must change severity and the count and nothing else (escalatedOnce), and the refused third must leave the record identical.
  • incident-desk.eval.ts:265 ignored open() results: agreed; the opens a check depends on go through mustOpen, which fails the check on a refusal.
  • worker-logs.eval.ts:340 whole-hour boundaries: agreed for summary, whose contract is on the events; one range now runs 13:30 to 14:45. Not for hourly, where the prompt defines buckets as whole hours and a non-aligned range has no single right answer.
  • incident-desk.eval.ts:94 race-open severity: agreed; its summary names the winning attempt, and the severity must be the one that attempt carried.
  • chess.eval.ts:515,526 draw-triggering move() results: agreed; parsed and required ok, along with the fifty-move loadFen.
  • worker-logs.eval.ts:397 full-day and SIN top three identical: agreed, and my doing; the planted tail now sits in FRA only, so a colo-filtered ranking is a different list.
  • change-calendar.eval.ts:239 sorted equals insertion order: agreed; the touching window is mw-100, scheduled after mw-101 and sorting before it.
  • incident-desk.eval.ts:287 escalation corrupting other fields: agreed; covered by escalatedOnce.
  • change-calendar.eval.ts:188 offset timestamps: agreed on the probe, not on the code. 23:00+05:00 is 18:00 UTC and must be refused; a textual-hour parser accepts it. But the prompt defines no error for unsupported input, and an implementation that refuses offsets outright is not wrong, so the check asserts only that scheduling fails and nothing was added.
  • chess.eval.ts:542 K+NN vs K: declined. chess.js, python-chess and Lichess call it sufficient; the rule summaries agents commonly follow call it insufficient; the prompt does not define it. A check there measures which convention the model recalled, not the harness. If we want it, the prompt has to define insufficient material, and that is a task change with its own cost.

One rule for all of these: a check that rejects a defensible reading of the prompt turns the task into a prompt-reading lottery, and with ten trials that noise is indistinguishable from a regression. Every check above is satisfiable by any correct reading of its prompt.

devin-ai-integration[bot]

This comment was marked as resolved.

@ask-bonk

ask-bonk Bot commented Sep 22, 2026

Copy link
Copy Markdown
  • [P1] worker-logs.eval.ts:408: Re-ingested events are never checked after reload. A memory-only ingest() passes turn 2 and remains available for turn 3, despite violating persistent storage requirements. Add post-accept verification.

  • [P1] change-calendar.eval.ts:61: Every seeded window already satisfies the new four-hour billing cap and 24-hour spacing rule. A migration that deletes newly invalid existing windows passes. Seed at least one grandfathered violation.

  • [P2] chess.eval.ts:245: Successful loadFen() is never verified to reset PGN and repetition history. Stale history can cause incorrect exports or premature threefold draws while all checks pass.

  • [P2] incident-desk.eval.ts:300: Rejected escalations are not followed by state checks. An implementation may mutate resolved incidents or create unknown ones before returning the expected error.

github run

@ask-bonk

ask-bonk Bot commented Sep 22, 2026

Copy link
Copy Markdown

Eval runs review

Measured. No cohort is comparable, so no valid pass, duration, tool-error, or cost deltas exist.
Trajectories. In change-calendar turn 2, the candidate queried the calendar and generated a document from its windows.
Caveats. All tasks were replaced, and each cohort has only ten stochastic trials.
Verdict. inconclusive — no task cohort is comparable

github run

incident-desk: a refused escalation of a resolved incident must leave it unchanged, and one of an
unknown id must not create it.

change-calendar: seed a six-hour billing window, valid under turn 1's cap and over turn 2's, so a
migration that drops windows the new rules would refuse fails "everything already scheduled stays".

chess: after the start position has occurred three times, loading it again must not report a
repetition, and the loaded fifty-move position must match the oracle before the move that draws.
@AshishKumar4

Copy link
Copy Markdown
Contributor Author

Handled in e608f53a. Three as raised, one declined.

  • incident-desk.eval.ts:300 refused escalations: agreed. inc-1 is read before and after the refused escalation and must be identical, and the board must not contain esc-x afterwards. I used board() rather than incident() for the unknown id, because the prompt doesn't say what incident() returns for one.
  • change-calendar.eval.ts:61 grandfathered violation: agreed. Turn 1 now seeds mw-106, a six-hour billing window in week 43. It is valid under the 8-hour cap and over turn 2's 4-hour cap, so a migration that drops it fails "everything already scheduled stays". It sits outside week 41, so the plan document and the api-gateway total don't change.
  • chess.eval.ts:245 loadFen history: agreed on repetition, not on PGN. After the start position has occurred three times, loading it again must not report a repetition, and the loaded fifty-move position must match the oracle's full status before the drawing move. I left PGN after loadFen unasserted, because correct engines export it differently (with or without SetUp/FEN tags).
  • worker-logs.eval.ts:408 persistence after reload: declined. The verifier can't force the Durable Object to be evicted, and a fresh connection can reach the same live instance, so the suggested check would still pass a memory-only ingest(). It adds lines without proving persistence.

@ask-bonk

ask-bonk Bot commented Sep 22, 2026

Copy link
Copy Markdown

Eval runs review

Measured. No cohort is comparable, so no valid pass, duration, tool-error, or cost deltas exist.
Trajectories. In change-calendar turn 2, the candidate queried the calendar and generated a document from its windows.
Caveats. All tasks were replaced, and each cohort has only ten stochastic trials.
Verdict. inconclusive — no task cohort is comparable

github run

ask-bonk[bot]

This comment was marked as resolved.

@ask-bonk

ask-bonk Bot commented Sep 22, 2026

Copy link
Copy Markdown

Posted 4 actionable inline findings.

github run

A run took as long as the sum of two lanes of slowest trials, because two eval files shared
one runner at a time: chess 316 s plus change-calendar 135 s made the last run 451 s. Each
eval file of each measured revision now gets its own runner, so a run takes as long as its
slowest task, and a runner hosts 10 Workshops instead of 20.

A plan job lists the eval files at each revision from a sparse checkout, and an assemble job
per revision joins the per-task reports. It fails unless it has exactly the planned files,
since a missing task would otherwise read as removed and be cached that way. The push
baseline goes through the same jobs, so main and pull requests are measured the same way,
and the cache key records the layout so older baselines are measured again rather than
compared against. A failed candidate no longer stops a complete baseline from being cached.
@github-actions github-actions Bot added the delivery Changes to CI or release delivery label Sep 22, 2026
@ask-bonk

ask-bonk Bot commented Sep 22, 2026

Copy link
Copy Markdown
  • [P1] chess.eval.ts:136: Empty legal moves are accepted for oracle draws even in turns 1–2, before draws end games. Restrict this exception to DRAW_STATUS.
  • [P1] chess.eval.ts:495: PGN export compares history but not final FEN. A bogus SetUp/FEN omitting an unused pawn can preserve SAN history while exporting the wrong position.
  • [P2] change-calendar.eval.ts:106: The post-change conflicts() probe overlaps both windows, so incorrectly treating TOO_CLOSE as a conflict passes. Add a non-overlapping but too-close query.
  • [P2] chess.eval.ts:556: Insufficient material is tested only through loaded terminal FENs. An engine that fails to detect it after a capture can pass.
  • [P2] worker-logs.eval.ts:53: Hours are always first ingested chronologically, allowing insertion-order hourly() results to pass. Add out-of-order events.
  • [P2] change-calendar.eval.ts:118: The duration regex ignores a preceding minus sign, so a bullet stating -2 hours is accepted as two hours.

github run

@ask-bonk

ask-bonk Bot commented Sep 22, 2026

Copy link
Copy Markdown

Eval runs review

Measured. No cohort is comparable, so no valid pass, duration, tool-error, or cost deltas exist.
Trajectories. In change-calendar turn 2, the candidate queried the calendar and generated a document from its windows.
Caveats. All tasks were replaced, and each cohort has only ten stochastic trials.
Verdict. inconclusive — no task cohort is comparable

github run

Adds GPT 6 Luna to the suggested models and makes it the model eval baselines are measured
on. It has GPT-5.6 Luna's window, output cap and doubled input price above 272K, so it gets
the same compaction budget, and like GPT-5.6 it is not in pi's catalog, so both take the
same synthesized openai-responses path. The suggested models are also the Workshop's model
picker, so users can choose it too.
@github-actions github-actions Bot added kernel Changes to the Workshop kernel workshop/shared Changes to shared Workshop APIs labels Sep 23, 2026
@ask-bonk

ask-bonk Bot commented Sep 23, 2026

Copy link
Copy Markdown

LGTM!

github run

@ask-bonk

ask-bonk Bot commented Sep 23, 2026

Copy link
Copy Markdown

Eval runs review

Measured. No cohort is comparable, so no valid pass, duration, tool-error, or cost deltas exist.
Trajectories. In change-calendar turn 2, the candidate queried the calendar and generated a document from its windows.
Caveats. All tasks and models were replaced, and each cohort has only ten stochastic trials.
Verdict. inconclusive — no task cohort is comparable

github run

The probe resubmitted mw-101 unchanged, so it also overlapped mw-101, and the prompt does not
say whether DUPLICATE_ID or OVERLAP wins. GPT 6 Luna answered OVERLAP in 3 of 10 trials, a
defensible reading the check failed. The probe now reuses mw-101's id at a time that overlaps
nothing.
@ask-bonk

ask-bonk Bot commented Sep 23, 2026

Copy link
Copy Markdown

LGTM!

github run

@ask-bonk

ask-bonk Bot commented Sep 23, 2026

Copy link
Copy Markdown

Eval runs review

Measured. No cohort is comparable, so no valid pass, duration, tool-error, or cost deltas exist.
Trajectories. In change-calendar turn 2, the candidate queried the calendar and generated a document from its windows.
Caveats. All tasks and models were replaced, and each cohort has only ten stochastic trials.
Verdict. inconclusive — no task cohort is comparable

github run

chess: turn 3 checks that malformed FENs are still refused, and reaches insufficient material
by a capture as well as by loading; PGN export must replay to the played position, not only
the same moves; imports include games ending 0-1 and 1/2-1/2. Before turn 3 defines draws,
only a dead position may list no legal moves.

incident-desk: a turn-two open reads back exactly as submitted.

change-calendar: no bullet anywhere in the plan, including before the first heading, may
list a window outside the week.

worker-logs: events arrive in a seeded random order, so ordering by first appearance fails.
The comparison comment opens with every cohort's pass rate as a ten-cell bar, green for
passed and red for failed, compared or not, and marks each pass delta green, red or grey.
The Bonk review gets a coloured verdict, marks deltas as rising or falling, and copies the
bars from the comparison instead of drawing its own, so its numbers stay the comparison's.
@AshishKumar4

Copy link
Copy Markdown
Contributor Author

The six items from the f830c0b2 review are handled in 88950ab4: four as raised, one narrowed, two declined.

  • chess.eval.ts:136 empty legal moves for draws in turns 1–2: agreed, narrowed. Before turn 3 defines draws, only a dead position (insufficient material) may list no moves, since over the board that ends the game by itself. After a threefold or fifty-move draw the moves must still be listed until turn 3.
  • chess.eval.ts:495 PGN export: agreed. The replay must now reach the played position as well as the same moves, so a wrong SetUp/FEN header fails.
  • chess.eval.ts:556 insufficient material only via loadFen: agreed. Turn 3 now reaches K+N vs K by Kxd2, a capture, and compares status with chess.js.
  • worker-logs.eval.ts:53 chronological ingest: agreed. Events arrive in a seeded random order, so ordering hours by first appearance fails.
  • change-calendar.eval.ts:106 conflicts() probe overlapping both windows: declined. It is deliberate, as the docstring says. Once turn 2 adds TOO_CLOSE, the prompt doesn't say whether conflicts() should report windows that are merely too close, and either reading is defensible.
  • change-calendar.eval.ts:118 -2 hours read as 2: declined. A hyphen is a common separator ("23:00 UTC -2 hours"), and treating it as a sign would fail correct documents to catch a negative duration no agent writes.

@ask-bonk

ask-bonk Bot commented Sep 23, 2026

Copy link
Copy Markdown

LGTM!

github run

@ask-bonk

ask-bonk Bot commented Sep 23, 2026

Copy link
Copy Markdown

🔬 Eval runs review

📊 Measured. No cohort is comparable, so no valid pass, duration, tool-error, or cost deltas exist.
🧭 Trajectories. In change-calendar turn 2, the candidate queried the calendar and generated a document from its windows.
⚠️ Caveats. All tasks and models were replaced, and each cohort has only ten stochastic trials.
Verdict. 🟡 inconclusive — no task cohort is comparable

Task Baseline Candidate
appointment-desk (gpt-5.6-luna) 🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩 10/10
change-calendar (gpt-6-luna) 🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩 10/10
chess (gpt-6-luna) 🟩🟩🟩🟩🟩🟩🟩🟥🟥🟥 7/10
expense-ledger (gpt-5.6-luna) 🟩🟩🟩🟩🟩🟥🟥🟥🟥🟥 5/10
incident-desk (gpt-6-luna) 🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩 10/10
project-doc (gpt-5.6-luna) 🟩🟩🟩🟩🟩🟩🟩🟩🟥🟥 8/10
worker-logs (gpt-6-luna) 🟩🟩🟩🟩🟩🟩🟩🟩🟩🟥 9/10

github run

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

delivery Changes to CI or release delivery kernel Changes to the Workshop kernel workshop/shared Changes to shared Workshop APIs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant