From c18391b98c63e3b13c7cb1fd7e0a71478ce94a56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel?= Date: Sat, 11 Jul 2026 18:32:15 -0400 Subject: [PATCH] fix(lint): honor data-no-timeline on root compositions (#2228) --- packages/lint/src/rules/core.test.ts | 9 +++++++++ packages/lint/src/rules/core.ts | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/lint/src/rules/core.test.ts b/packages/lint/src/rules/core.test.ts index cf5e463e4..1419c545e 100644 --- a/packages/lint/src/rules/core.test.ts +++ b/packages/lint/src/rules/core.test.ts @@ -227,6 +227,15 @@ describe("core rules", () => { expect(finding).toBeDefined(); }); + it("allows a timeline-free root that explicitly declares data-no-timeline", async () => { + const html = ` + +
+`; + const result = await lintHyperframeHtml(html); + expect(result.findings.find((f) => f.code === "missing_timeline_registry")).toBeUndefined(); + }); + it("does not flag missing_timeline_registry on a sub-composition (inherits from host)", async () => { const html = ` diff --git a/packages/lint/src/rules/core.ts b/packages/lint/src/rules/core.ts index d297d4a76..f4b6b8a30 100644 --- a/packages/lint/src/rules/core.ts +++ b/packages/lint/src/rules/core.ts @@ -264,11 +264,12 @@ export const coreRules: Array<(ctx: LintContext) => HyperframeLintFinding[]> = [ }, // missing_timeline_registry + timeline_registry_missing_init - ({ source, rawSource, options }) => { + ({ source, rawSource, rootTag, options }) => { // Sub-compositions inherit window.__timelines from the host composition if (options.isSubComposition || rawSource.trimStart().toLowerCase().startsWith("