fix(lint): the podcast-lanes.html page Desktop writes is not a second root composition

HyperFrames Desktop's podcast edit writes its camera lanes page, podcast-lanes.html,
at the project root beside index.html: Studio reads no composition inside a dot
folder, and Desktop opens the page directly as its own view. index.html never mounts
it and no render plays it, but multiple_root_compositions fails lint and check on
every podcast project, and its fix hint tells an agent to remove the file. Exempt it
the way caption-skin.html already is.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Vance Ingalls
2026-10-30 01:22:08 -07:00
co-authored by Claude Opus 5.5
parent d83f276743
commit 132e6633bf
2 changed files with 15 additions and 1 deletions
@@ -1007,6 +1007,19 @@ describe("multiple_root_compositions", () => {
expect(finding).toBeUndefined();
});
it("ignores HyperFrames Desktop's root-level podcast-lanes.html camera lanes page", async () => {
const project = makeProject(validHtml());
writeFileSync(
join(project, "podcast-lanes.html"),
'<div id="root" data-composition-id="podcast-lanes" data-no-timeline data-start="0" data-duration="60" data-width="1280" data-height="720"></div>',
);
const { results } = await lintProject(project);
const finding = results[0]?.result.findings.find(
(f) => f.code === "multiple_root_compositions",
);
expect(finding).toBeUndefined();
});
it("ignores macOS AppleDouble HTML metadata files", async () => {
const project = makeProject(validHtml());
writeFileSync(join(project, "._index.html"), validHtml());
+2 -1
View File
@@ -583,7 +583,8 @@ function lintMultipleRootCompositions(projectDir: string): HyperframeLintFinding
);
const rootCompositions: string[] = [];
for (const file of rootHtmlFiles) {
if (file === "caption-skin.html") continue;
// Companion pages an app opens on their own beside index.html; never mounted, never rendered.
if (file === "caption-skin.html" || file === "podcast-lanes.html") continue;
const content = readFileSync(join(projectDir, file), "utf-8");
if (/data-composition-id/i.test(content)) {
rootCompositions.push(file);