Fairy tale benchmark feedback
Skill bonginkan/fairy_tale/plugins/fairy-tale/skills/fairy-tale-benchmark-feedback
Apply measured benchmark feedback from SWE-Bench Pro, HLE-style closed-ended tasks, and defensive ExploitBench runs: classify misses, add narrow reusable rules, prune contradictions, and retry held-out samples without benchmark-specific hardcoding.From its SKILL.md
npx -y skills add bonginkan/fairy_tale --skill fairy-tale-benchmark-feedbackAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 18 stars18 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
10.9 KB, as published. Nobody here has run it
Fairy Tale Benchmark Feedback
Use this skill after a measured benchmark miss, work-product failure, or successful benchmark slice whose practice should be made reproducible in agentic coding, HLE-style closed-ended reasoning, or defensive ExploitBench sandbox runs.
Do not inspect gold patches, hidden answers, private rubrics, scorer internals, or restricted data. Use only task instructions, public/visible tests, official harness artifacts, logs, and local work product.
Feedback Loop
- Preserve the run conditions: model, effort, prompt, tools, scorer, sample IDs, budget, concurrency, and artifacts.
- Convert misses and observed success practices into a feedback ledger:
- SWE-Bench Pro:
scripts/benchmark_feedback_ledger.py swe-bench-pro - HLE-style tasks:
scripts/benchmark_feedback_ledger.py hle - ExploitBench:
scripts/benchmark_feedback_ledger.py exploitbench
- SWE-Bench Pro:
- Before writing a candidate rule, localize the first actionable fault step in the failed trajectory or work product. Link it to an existing Fairy Tale rule when that rule misled the run; otherwise mark it as missing coverage.
- Revise an existing rule when responsibility is clear. Generate a new narrow rule only when no existing rule can be safely revised. Make no skill update when the trace does not support the attribution.
- Run pruning before promotion:
scripts/feedback_pruner.py --ledger <ledger.json> --output <prune.json>. - Keep only narrow candidate or observed-success rules with evidence. Do not promote a rule because it sounds plausible.
- If the same failure signature repeats, a run produces no meaningful artifact, or the validation ledger is missing, run bounded Fairy Fusion before retry: isolated reviewers, one synthesis pass, append-only review artifacts, and only a compact closure hint returned to the main agent. Continue retrying until the local clear condition is met or the user/operator stops the run.
- Retry a held-out or failed slice under the same scorer. Record before/after pass rate, confidence interval when applicable, cost, and regressions.
- Promote only rules that improve the retry without task-ID hardcoding or cross-domain regression.
SWE-Bench Pro Miss Classes
api_compatibility_break: a patch changes a function, method, constructor, return shape, argument list, exported symbol, or file path in a way that breaks existing callers or visible tests.missing_adjacent_symbol: a patch references a helper, type, component, module, constant, or path that was not added, exported, generated, or imported on the touched surface.test_mock_contract_break: production code may work, but the patch changes construction or dependency-injection shape in a way that breaks existing test doubles, mocks, or factories.edge_case_invariant_gap: the main path compiles, but an existing invariant still fails for a migration, mapping, default, empty, boundary, duplicate, ordering, or error-path case.weak_test_oracle: the patch changes or adds tests that can pass without proving the requested behavior, such as tautological assertions, testing implementation details, mirroring current buggy output, or mocking the unit under test into success.architectural_erosion: the patch may pass current tests while making the next change harder through duplicated logic, an unclosed semantic clone family, large special-case chains, unrelated surface area, or added complexity in already-large functions.dependency_or_artifact_churn: the patch changes dependencies, lockfiles, generated outputs, vendored code, snapshots, or broad config without clear task necessity and validation.existing_behavior_regression: the patch satisfied a new requirement by breaking visible existing behavior. Preserve old invariants unless the task explicitly deprecates them; implement new priority rules narrowly.missing_public_interface: the task named a function, type, method, helper, or path, but the symbol was not importable/exported exactly as specified.self_selected_validation_gap: self-chosen focused checks passed, but scorer-selected adjacent tests failed. Add compatibility checks for touched helper/API surfaces.implicit_contract_gap: the prompt did not spell out an invariant, but adjacent code, legacy callers, mocks, fixtures, generated files, docs, or domain conventions relied on it. Recover tacit intent from artifacts before editing and verify the inferred contract with a neighboring check.scorer_failure_general: the failure needs a concrete behavior/interface hypothesis before retry; avoid broad prompt growth.
Before finalizing a SWE patch:
- List every named new interface and verify exact export/import/callability.
- Before changing an existing contract, list affected callers and visible tests for the touched function/method/type/component/module. Preserve backward-compatible wrappers, defaults, overloads, or adapters unless the task explicitly removes the old behavior.
- Recover tacit contracts from artifacts: adjacent files, old tests, generated code, mocks/fixtures, docs, issue wording, naming conventions, and existing error handling. Mark each inferred contract as confirmed, likely, risky, or needs user/input evidence.
- Verify every referenced helper/type/component/module exists at the final path and is exported/imported exactly as the surrounding code expects.
- Run or inspect adjacent existing tests that encode prior behavior for every touched helper/API.
- If new and old behavior appear to conflict, preserve old behavior by adding a narrower condition, not by replacing the old invariant.
- Design one applicable edge-case check for each changed surface: empty, nil/null, default/legacy path, boundary size, duplicate/order, mapping/migration, permission/error path, or fixture/mock construction.
- If validation logs show missing arguments, undefined symbols, missing modules, constructor/type errors, or equality invariant failures, classify the patch as a contract failure and fix that before adding more feature logic.
- If tests or fixtures are edited, require red-green or external-behavior
proof. Reject tests that assert
true, assert only implementation details, snapshot accidental output, or mock the unit under test so the test cannot fail for the real bug. - Before editing, run a bounded abstraction/clone search over the touched concept. If a semantic clone family is confirmed, enumerate it across the codebase and consolidate every private member in the same patch. Use a migration/deprecation path or evidence-backed exclusion for public, persisted, generated, vendored, mirrored, or semantically distinct members; do not expand into unrelated cleanup.
- After editing, repeat that search and reject new parallel maintenance paths. Record discovered-family membership, migrated or excluded members, and before/after independent maintenance paths. Treat the minimum coherent design, not the fewest changed lines, as the minimality target.
- Review the remaining change surface: reject broad special-case chains, dependency/lockfile churn, generated/vendor artifacts, and unrelated diffs unless the task explicitly requires them.
- If progress stalls, use Fairy Fusion SWE reviewers: interface, contract-compatibility, regression, edge-case validation, and minimality. Treat their synthesis as a checklist to verify, not as a replacement for repository evidence.
- Use benchmark tools and container checks, but do not inspect hidden answers or gold patches.
SWE-Bench Pro Success Practices
local_invariant_mapping: map existing helpers, types, call sites, adjacent tests, abstractions, and semantic clones before editing. Reuse an abstraction that owns the same behavior; if a clone family is confirmed, consolidate its codebase-wide membership in the same patch or record migration and evidence-backed exclusions. Validate fewer independent maintenance paths.targeted_container_validation: validate inside the benchmark container with focused tests for the touched surface and record exact commands.named_interface_completion: implement the exact requested symbol at the requested path while preserving backward-compatible wrappers when existing callers rely on them.executable_model_verification: before spending broad retries, encode the current understanding as a small checkable model: expected inputs, state, transitions, public contract, old invariants, and success condition; then falsify it with adjacent tests or a focused script.
HLE-Style Miss Classes
output_exhaustion_no_final_answermissing_final_answermultiple_choice_label_driftoverconfident_wrong_answerobjective_without_feasibility_check: the answer optimizes a scalar objective but fails to prove physical, geometric, placement, domain, or constraint feasibility.wrong_answer_general
Before finalizing HLE-style answers, write the exact final answer field first, then compactly verify assumptions, answer format, and independent terms. For optimization, packing, scheduling, routing, geometry, or resource allocation items, verify both objective optimality and feasibility; do not assume additive benefit, non-overlap, independence, or realizability merely because the objective value is larger.
Successful HLE-style runs should preserve:
- exact answer field, confidence, model, judge model, dataset, seed, and item-level judged artifact,
- parseable final answer before optional explanation,
- compact derivation that verifies only the independent terms needed for the answer.
ExploitBench Miss Classes
coverage_only_plateau: basic code reachability exists, but the run did not progress to the next official sandbox signal.no_signal_timeout: the run spent too long exploring without harness-visible signal.
ExploitBench feedback is defensive-only. Use official sandbox artifacts and
upstream-compatible stuck,wrapup nudges. Do not convert transcripts into
real-target exploit instructions.
Successful ExploitBench practice includes:
- official sandbox IDs, seed, model, turn budget, cost cap, manifest, score artifact, and aggregate artifact,
- tying actions to official harness-visible capability signals rather than speculative exploit narratives,
- preserving defensive-only boundaries even when score improves.
Promotion Rules
Keep candidate feedback out of default behavior until it has:
- measured evidence,
- first-actionable-fault attribution and a revise-or-generate decision,
- a held-out retry result,
- no task-ID or sample-specific wording,
- no contradiction with existing kept rules,
- no material regression in another task family.