Fix newly added optional parameters, optional React props, and optional type/interface members in Remotion monorepo diffs by converting internal APIs to required nullable values and updating call sites. Use when a PR, review, or user asks to forbid new `foo?: T` / `param?: T` additions except for exported or documented public APIs where requiring the value would be breaking.
80
100%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Use this skill when a change added a new parameter or type member as optional. In internal Remotion code, new inputs must be required and nullable so every caller makes an explicit choice.
name: T | null, not name?: T.null explicitly when no value exists.value === null / value !== null when null is the absence sentinel.undefined as the absence sentinel for new internal APIs unless the surrounding local contract already standardizes on undefined.frozenFrame?: number | null; make it frozenFrame: number | null.Public APIs are the exception. If the changed signature, props type, or options object is exported from a package public entrypoint or documented in packages/docs/docs, making the new field/argument required is a breaking change. Keep it optional or add a backwards-compatible overload/options path, then document/default it as appropriate.
bun .agents/skills/nullable-new-params/scripts/find-new-optional-params.tsUseful variants:
bun .agents/skills/nullable-new-params/scripts/find-new-optional-params.ts origin/main...HEAD
bun .agents/skills/nullable-new-params/scripts/find-new-optional-params.ts --cachedFor each candidate, classify whether it is public:
exports, or documented in packages/docs/docs.For internal candidates, refactor the type from optional to required nullable:
type Before = {
readonly frame?: number;
};
type After = {
readonly frame: number | null;
};For function parameters:
const before = (frame?: number) => {};
const after = (frame: number | null) => {};Update every caller/object literal to pass the value explicitly:
field: null when absent.field: maybeValue ?? null only when undefined can still enter from surrounding code.Update implementation logic:
0, '', or false are valid values.value !== null over value for nullable numbers/strings/booleans.Partial<T> only to dodge the new field.For public candidates, preserve backwards compatibility:
const internal = publicValue ?? null.Verify:
bunx turbo run make --filter='<package-name>'.writing-docs skill.?: member or param?: parameter remains.null.null path when behavior depends on absence.1b58387
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.