mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-11 06:30:03 +00:00
Adds the escape-hatch tier — lint-only fixtures that test the skill's
ability to refuse translation cleanly when it sees patterns that don't map
to HF's seek-driven model.
Cases (8 total):
01-use-state.tsx blocker: r2hf/use-state
02-use-effect-deps.tsx blocker: r2hf/use-effect-deps (multi-line body
with internal commas — regression target for
the regex bug fix in PR 2)
03-async-metadata.tsx blocker: r2hf/async-metadata
04-third-party-react.tsx blocker: r2hf/third-party-react-ui (@mui/material)
05-lambda-config.tsx blocker: r2hf/lambda-import
06-warnings-only.tsx warnings: delayRender / useCallback / useMemo
(no blockers — translates after dropping wrappers)
07-custom-hook.tsx warning: r2hf/custom-hook (pure useFadeIn)
08-mixed.tsx multiple blockers + warnings (aggregate test)
Each case documents:
- The Remotion pattern it demonstrates
- Why it's a blocker / warning / info
- What the skill should do (refuse / drop-and-translate / translate-as-is)
Validation harness (validate.sh):
Runs lint_source.py against each case, asserts:
- Each expected blocker rule fires with severity="blocker"
- Each expected warning rule fires with severity="warning"
- lint_source.py exit code is 1 when blockers expected, 0 otherwise
T4 has no renders to diff. The skill is graded on lint correctness — that's
the gate that decides whether to translate or recommend the runtime interop
pattern from PR #214.
Result: 8/8 cases pass.
86 lines
2.7 KiB
JSON
86 lines
2.7 KiB
JSON
{
|
|
"tier": 4,
|
|
"name": "escape-hatch",
|
|
"description": "Lint-only fixture set. Each case demonstrates a Remotion pattern the skill cannot or should not translate cleanly. The skill is graded on whether lint_source.py emits the right finding for each case — there are no renders to compare. T4 passes when every case triggers its expected rule and no others.",
|
|
"cases": [
|
|
{
|
|
"file": "01-use-state.tsx",
|
|
"expected": {
|
|
"blockers": [{ "rule": "r2hf/use-state", "min_count": 1 }],
|
|
"warnings": [],
|
|
"skill_action": "refuse_translation_recommend_interop"
|
|
}
|
|
},
|
|
{
|
|
"file": "02-use-effect-deps.tsx",
|
|
"expected": {
|
|
"blockers": [{ "rule": "r2hf/use-effect-deps", "min_count": 1 }],
|
|
"warnings": [],
|
|
"skill_action": "refuse_translation_recommend_interop"
|
|
}
|
|
},
|
|
{
|
|
"file": "03-async-metadata.tsx",
|
|
"expected": {
|
|
"blockers": [{ "rule": "r2hf/async-metadata", "min_count": 1 }],
|
|
"warnings": [],
|
|
"skill_action": "refuse_translation_recommend_interop"
|
|
}
|
|
},
|
|
{
|
|
"file": "04-third-party-react.tsx",
|
|
"expected": {
|
|
"blockers": [{ "rule": "r2hf/third-party-react-ui", "min_count": 1 }],
|
|
"warnings": [],
|
|
"skill_action": "refuse_translation_recommend_interop"
|
|
}
|
|
},
|
|
{
|
|
"file": "05-lambda-config.tsx",
|
|
"expected": {
|
|
"blockers": [],
|
|
"warnings": [{ "rule": "r2hf/lambda-import", "min_count": 1 }],
|
|
"skill_action": "drop_lambda_code_translate_remainder_if_clean"
|
|
}
|
|
},
|
|
{
|
|
"file": "06-warnings-only.tsx",
|
|
"expected": {
|
|
"blockers": [],
|
|
"warnings": [
|
|
{ "rule": "r2hf/delay-render", "min_count": 1 },
|
|
{ "rule": "r2hf/use-callback", "min_count": 1 },
|
|
{ "rule": "r2hf/use-memo", "min_count": 1 }
|
|
],
|
|
"skill_action": "translate_after_dropping_wrappers"
|
|
}
|
|
},
|
|
{
|
|
"file": "07-custom-hook.tsx",
|
|
"expected": {
|
|
"blockers": [],
|
|
"warnings": [{ "rule": "r2hf/custom-hook", "min_count": 1 }],
|
|
"skill_action": "inline_hook_body_if_pure"
|
|
}
|
|
},
|
|
{
|
|
"file": "08-mixed.tsx",
|
|
"expected": {
|
|
"blockers": [
|
|
{ "rule": "r2hf/use-state", "min_count": 1 },
|
|
{ "rule": "r2hf/use-effect-deps", "min_count": 1 },
|
|
{ "rule": "r2hf/third-party-react-ui", "min_count": 1 }
|
|
],
|
|
"warnings": [{ "rule": "r2hf/use-callback", "min_count": 1 }],
|
|
"skill_action": "refuse_translation_recommend_interop"
|
|
}
|
|
}
|
|
],
|
|
"totals": {
|
|
"expected_blocker_cases": 5,
|
|
"expected_warning_only_cases": 3,
|
|
"expected_total_blocker_findings_min": 7,
|
|
"expected_total_warning_findings_min": 6
|
|
}
|
|
}
|