Skill Tracer
Skills › HyperFrames › remotion-to-hyperframes › README.md

README.md

51 lines · skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/README.md at a595755

Open on GitHub

Most marks come from matching words in the file, so treat them as pointers.

1# Tier 4 — escape-hatch
2

Tier 4 — escape-hatch

Raw lines 1 to 2
3## What it tests
4
5T4 is the **lint-only** tier. There are no renders to diff — the skill is
6graded on whether it correctly _refuses_ to translate each case (and
7recommends the runtime interop pattern from PR #214 instead) or, where
8appropriate, translates after dropping warning-level decorations.
9
10Each `cases/*.tsx` file is a minimal Remotion composition that
11demonstrates one specific pattern. The skill should:
131. Run `scripts/lint_source.py` over the source.
142. Compare the JSON output to `expected.json` for that case.
153. Take the documented `skill_action`:
16 - `refuse_translation_recommend_interop` — print the rationale + link to
17 the PR #214 interop guide; do not produce HF output.
18 - `drop_lambda_code_translate_remainder_if_clean` — drop the
19 `@remotion/lambda` code with a note; translate the rest only if no
20 other blockers are present.
21 - `translate_after_dropping_wrappers` — translate normally; drop
22 `useCallback` / `useMemo` / `delayRender` wrappers.
23 - `inline_hook_body_if_pure` — inline the custom hook's body if it's a
24 pure derivation of `useCurrentFrame`; otherwise bow out.

What it tests

T4 is the lint-only tier. There are no renders to diff — the skill is graded on whether it correctly refuses to translate each case (and recommends the runtime interop pattern from PR #214 instead) or, where appropriate, translates after dropping warning-level decorations.

Each cases/*.tsx file is a minimal Remotion composition that demonstrates one specific pattern. The skill should:

  1. Run scripts/lint_source.py over the source.
  2. Compare the JSON output to expected.json for that case.
  3. Take the documented skill_action:
  4. refuse_translation_recommend_interop — print the rationale + link to the PR #214 interop guide; do not produce HF output.
  5. drop_lambda_code_translate_remainder_if_clean — drop the @remotion/lambda code with a note; translate the rest only if no other blockers are present.
  6. translate_after_dropping_wrappers — translate normally; drop useCallback / useMemo / delayRender wrappers.
  7. inline_hook_body_if_pure — inline the custom hook's body if it's a pure derivation of useCurrentFrame; otherwise bow out.
Raw lines 3 to 25
Runs code scripts/lint_source.py :13
26## Cases
28| # | File | Expected finding | Notes |
29| --- | -------------------------- | ----------------------------------- | ----------------------------------------------- |
30| 01 | `01-use-state.tsx` | blocker `r2hf/use-state` | useState driving animation |
31| 02 | `02-use-effect-deps.tsx` | blocker `r2hf/use-effect-deps` | useEffect/useLayoutEffect with non-empty deps |
32| 03 | `03-async-metadata.tsx` | blocker `r2hf/async-metadata` | calculateMetadata returns a Promise |
33| 04 | `04-third-party-react.tsx` | blocker `r2hf/third-party-react-ui` | imports `@mui/material` |
34| 05 | `05-lambda-config.tsx` | warning `r2hf/lambda-import` | imports `@remotion/lambda` — drops, translates |
35| 06 | `06-warnings-only.tsx` | warnings only | delayRender / useCallback / useMemo |
36| 07 | `07-custom-hook.tsx` | warning `r2hf/custom-hook` | locally-defined `useFadeIn` (export const form) |
37| 08 | `08-mixed.tsx` | 3 blockers + 1 warning | aggregate-findings test |

Cases

#FileExpected findingNotes
0101-use-state.tsxblocker r2hf/use-stateuseState driving animation
0202-use-effect-deps.tsxblocker r2hf/use-effect-depsuseEffect/useLayoutEffect with non-empty deps
0303-async-metadata.tsxblocker r2hf/async-metadatacalculateMetadata returns a Promise
0404-third-party-react.tsxblocker r2hf/third-party-react-uiimports @mui/material
0505-lambda-config.tsxwarning r2hf/lambda-importimports @remotion/lambda — drops, translates
0606-warnings-only.tsxwarnings onlydelayRender / useCallback / useMemo
0707-custom-hook.tsxwarning r2hf/custom-hooklocally-defined useFadeIn (export const form)
0808-mixed.tsx3 blockers + 1 warningaggregate-findings test
Raw lines 26 to 38
39## Validation
41```bash
42./validate.sh
43```
45The script runs `lint_source.py` against each case and asserts:
47- Each expected blocker rule fires with severity `blocker`.
48- Each expected warning rule fires with severity `warning` (or stronger).
49- `lint_source.py`'s exit code is 1 when blockers are expected, 0 otherwise.
51T4 passes when every case matches its expected output. No renders involved.

Validation

./validate.sh

The script runs lint_source.py against each case and asserts:

  • Each expected blocker rule fires with severity blocker.
  • Each expected warning rule fires with severity warning (or stronger).
  • lint_source.py's exit code is 1 when blockers are expected, 0 otherwise.

T4 passes when every case matches its expected output. No renders involved.

Raw lines 39 to 51