Skip to content

fix: live reload tags api#260

Merged
DylanPiercey merged 1 commit intomainfrom
fix-live-reload-tags-api
Apr 6, 2026
Merged

fix: live reload tags api#260
DylanPiercey merged 1 commit intomainfrom
fix-live-reload-tags-api

Conversation

@DylanPiercey
Copy link
Copy Markdown
Contributor

  • Fix issue with live reloading tags api components when child template changes it's input usage.

@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Apr 6, 2026

🦋 Changeset detected

Latest commit: c14b43a

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@marko/vite Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@DylanPiercey DylanPiercey self-assigned this Apr 6, 2026
@github-project-automation github-project-automation bot moved this to Todo in Roadmap Apr 6, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 6, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 9370b233-afd0-41db-b782-4ae3051997af

📥 Commits

Reviewing files that changed from the base of the PR and between 1080c1a and c14b43a.

⛔ Files ignored due to path filters (6)
  • src/__tests__/fixtures/isomorphic-basic-hmr/__snapshots__/build.expected.md is excluded by !**/__snapshots__/** and included by **
  • src/__tests__/fixtures/isomorphic-basic-hmr/__snapshots__/dev-hmr.expected.md is excluded by !**/__snapshots__/** and included by **
  • src/__tests__/fixtures/isomorphic-basic-hmr/__snapshots__/dev.expected.md is excluded by !**/__snapshots__/** and included by **
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/__snapshots__/build.expected.md is excluded by !**/__snapshots__/** and included by **
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/__snapshots__/dev-hmr.expected.md is excluded by !**/__snapshots__/** and included by **
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/__snapshots__/dev.expected.md is excluded by !**/__snapshots__/** and included by **
📒 Files selected for processing (18)
  • .changeset/light-dolls-remain.md
  • src/__tests__/fixtures/isomorphic-basic-hmr/dev-server.mjs
  • src/__tests__/fixtures/isomorphic-basic-hmr/server.mjs
  • src/__tests__/fixtures/isomorphic-basic-hmr/src/components/class-component.marko
  • src/__tests__/fixtures/isomorphic-basic-hmr/src/components/implicit-component.marko
  • src/__tests__/fixtures/isomorphic-basic-hmr/src/components/layout-component.marko
  • src/__tests__/fixtures/isomorphic-basic-hmr/src/index.js
  • src/__tests__/fixtures/isomorphic-basic-hmr/src/template.marko
  • src/__tests__/fixtures/isomorphic-basic-hmr/test.config.ts
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/dev-server.mjs
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/server.mjs
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/src/index.js
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/src/tags/child-tag.marko
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/src/tags/layout.marko
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/src/template.marko
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/test.config.ts
  • src/__tests__/main.test.ts
  • src/index.ts
✅ Files skipped from review due to trivial changes (11)
  • .changeset/light-dolls-remain.md
  • src/tests/fixtures/isomorphic-basic-hmr/src/components/implicit-component.marko
  • src/tests/fixtures/isomorphic-tags-api-hmr/src/tags/child-tag.marko
  • src/tests/fixtures/isomorphic-basic-hmr/src/template.marko
  • src/tests/fixtures/isomorphic-tags-api-hmr/src/template.marko
  • src/tests/fixtures/isomorphic-basic-hmr/src/components/layout-component.marko
  • src/tests/fixtures/isomorphic-basic-hmr/src/components/class-component.marko
  • src/tests/fixtures/isomorphic-tags-api-hmr/src/tags/layout.marko
  • src/tests/fixtures/isomorphic-tags-api-hmr/src/index.js
  • src/tests/fixtures/isomorphic-basic-hmr/dev-server.mjs
  • src/tests/fixtures/isomorphic-tags-api-hmr/dev-server.mjs
🚧 Files skipped from review as they are similar to previous changes (5)
  • src/tests/fixtures/isomorphic-basic-hmr/src/index.js
  • src/tests/fixtures/isomorphic-tags-api-hmr/server.mjs
  • src/tests/fixtures/isomorphic-basic-hmr/server.mjs
  • src/tests/fixtures/isomorphic-basic-hmr/test.config.ts
  • src/tests/fixtures/isomorphic-tags-api-hmr/test.config.ts

Walkthrough

Adds a changeset declaring a patch release for the Marko Vite plugin. Introduces two HMR fixture suites (isomorphic-basic-hmr, isomorphic-tags-api-hmr) with dev-server bootstrappers, ESM server entrypoints, Marko components and templates, and per-fixture test.config.ts files. Extends the test harness to run HMR scenarios, apply file edits, wait for DOM updates, snapshot results, and restore files. Updates the plugin source to track analyzed child tags per template, remove tracking on file unlink, rename/extend the HMR hook to propagate parent module invalidation when children change, and force server-entry re-evaluation during dev transforms.

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title 'fix: live reload tags api' directly describes the main change: fixing live reload functionality for tags API components.
Description check ✅ Passed The description clearly explains the specific issue being fixed: live reloading of tags API components when child templates change their input usage.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix-live-reload-tags-api

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
src/__tests__/main.test.ts (1)

331-344: Consider using forward slashes for Vite module paths.

Vite internally uses forward slashes for module paths. Using path.join on Windows could produce backslashes that may cause issues with ssrLoadModule.

♻️ Proposed fix
       const { handler } = await devServer.ssrLoadModule(
-          path.join(dir, "./src/index.js"),
+          `${dir}/src/index.js`,
         );
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/__tests__/main.test.ts` around lines 331 - 344, The SSR middleware builds
a module path with path.join which can produce backslashes on Windows and break
devServer.ssrLoadModule; change the module path construction so it uses forward
slashes (e.g., use path.posix.join or compute the path and replace backslashes
with "/") when calling devServer.ssrLoadModule in the devServer.middlewares.use
block (where config.ssr and devServer.ssrLoadModule are referenced) so the
module path is always Vite-compatible.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/__tests__/fixtures/isomorphic-tags-api-hmr/dev-server.mjs`:
- Around line 33-43: Exported value from this module is a Connect middleware
(devServer.middlewares.use(...)) but tests expect an http.Server with a .listen;
wrap the middleware in an http.Server before default-exporting it. Concretely,
create an http.Server that calls the middleware (the function returned by
devServer.middlewares.use or the middleware handler built from
devServer.ssrLoadModule and handler) and export that server instead of the raw
middleware; reuse the same pattern you applied to
isomorphic-basic-hmr/dev-server.mjs or extract a shared helper to construct an
http.Server from a Connect middleware to avoid duplicating the wrapper logic
across fixtures.

---

Nitpick comments:
In `@src/__tests__/main.test.ts`:
- Around line 331-344: The SSR middleware builds a module path with path.join
which can produce backslashes on Windows and break devServer.ssrLoadModule;
change the module path construction so it uses forward slashes (e.g., use
path.posix.join or compute the path and replace backslashes with "/") when
calling devServer.ssrLoadModule in the devServer.middlewares.use block (where
config.ssr and devServer.ssrLoadModule are referenced) so the module path is
always Vite-compatible.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 64fa8771-376a-4a2b-966c-12d01df898de

📥 Commits

Reviewing files that changed from the base of the PR and between b85b66a and e504a51.

⛔ Files ignored due to path filters (6)
  • src/__tests__/fixtures/isomorphic-basic-hmr/__snapshots__/build.expected.md is excluded by !**/__snapshots__/** and included by **
  • src/__tests__/fixtures/isomorphic-basic-hmr/__snapshots__/dev-hmr.expected.md is excluded by !**/__snapshots__/** and included by **
  • src/__tests__/fixtures/isomorphic-basic-hmr/__snapshots__/dev.expected.md is excluded by !**/__snapshots__/** and included by **
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/__snapshots__/build.expected.md is excluded by !**/__snapshots__/** and included by **
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/__snapshots__/dev-hmr.expected.md is excluded by !**/__snapshots__/** and included by **
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/__snapshots__/dev.expected.md is excluded by !**/__snapshots__/** and included by **
📒 Files selected for processing (18)
  • .changeset/light-dolls-remain.md
  • src/__tests__/fixtures/isomorphic-basic-hmr/dev-server.mjs
  • src/__tests__/fixtures/isomorphic-basic-hmr/server.mjs
  • src/__tests__/fixtures/isomorphic-basic-hmr/src/components/class-component.marko
  • src/__tests__/fixtures/isomorphic-basic-hmr/src/components/implicit-component.marko
  • src/__tests__/fixtures/isomorphic-basic-hmr/src/components/layout-component.marko
  • src/__tests__/fixtures/isomorphic-basic-hmr/src/index.js
  • src/__tests__/fixtures/isomorphic-basic-hmr/src/template.marko
  • src/__tests__/fixtures/isomorphic-basic-hmr/test.config.ts
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/dev-server.mjs
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/server.mjs
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/src/index.js
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/src/tags/child-tag.marko
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/src/tags/layout.marko
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/src/template.marko
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/test.config.ts
  • src/__tests__/main.test.ts
  • src/index.ts

Comment thread src/__tests__/fixtures/isomorphic-tags-api-hmr/dev-server.mjs
@DylanPiercey DylanPiercey force-pushed the fix-live-reload-tags-api branch 3 times, most recently from 194fd89 to 1080c1a Compare April 6, 2026 20:34
@DylanPiercey DylanPiercey force-pushed the fix-live-reload-tags-api branch from 1080c1a to c14b43a Compare April 6, 2026 20:42
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (4)
src/__tests__/main.test.ts (3)

410-422: Silently swallowing timeout may hide HMR failures.

The .catch(() => { ... }) swallows the timeout error with only a comment. Consider logging when the timeout occurs to help diagnose HMR issues during test development.

🔧 Suggested improvement
         .catch(() => {
           // Timeout is acceptable — the HMR update may not change the `#app` content,
           // or the page may have been fully reloaded.
+          console.warn(`HMR wait timed out for step ${hmrIdx}`);
         });
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/__tests__/main.test.ts` around lines 410 - 422, The test currently
swallows timeouts from the page.waitForFunction call (invocation that uses
prevRawHtml) which can hide HMR failures; update the .catch handler to log a
diagnostic message (e.g., console.warn or console.error) that includes the error
details (error.name/message/stack), the prevRawHtml value and some context like
the current page URL or a short identifying string, then re-use the comment
behavior (do not throw) so tests remain tolerant but produce useful logs for
debugging HMR issues.

393-406: String.replace only replaces the first occurrence.

The content.replace(find, replace) call only replaces the first match of find. If the intent is to replace all occurrences (e.g., when the same pattern appears multiple times), consider using replaceAll or a regex with the global flag.

If replacing all occurrences is needed:

-        const newContent = content.replace(find, replace);
+        const newContent = content.replaceAll(find, replace);

Otherwise, if single replacement is intentional, this is fine as-is.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/__tests__/main.test.ts` around lines 393 - 406, The loop handling HMR
changes uses content.replace(find, replace) which only replaces the first
occurrence; to replace all matches update the replacement logic in the
hmrStep.changes handler (the block that reads filePath, content, newContent) to
use replaceAll when find is a string (content.replaceAll(find, replace)), or
convert/find to a RegExp with the global flag (new RegExp(escapedFind, "g"))
before calling content.replace, ensuring newContent truly reflects all
occurrences; keep the existing error check that compares newContent === content
and update handling accordingly.

460-466: Consider ensuring devServer.close() is called even if file restoration fails.

If fs.writeFileSync throws during restoration (e.g., permission error), the devServer.close() call will be skipped, potentially leaving the server running.

🔧 Suggested fix with nested finally
   } finally {
     // Restore all mutated files.
-    for (const [filePath, content] of originalFiles) {
-      fs.writeFileSync(filePath, content);
+    try {
+      for (const [filePath, content] of originalFiles) {
+        fs.writeFileSync(filePath, content);
+      }
+    } finally {
+      await devServer.close();
     }
-    await devServer.close();
   }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/__tests__/main.test.ts` around lines 460 - 466, The finally block
currently restores mutated files via fs.writeFileSync in a loop then awaits
devServer.close(), which means a thrown error during file restoration will skip
closing the dev server; wrap the restoration in its own try/catch (or move the
devServer.close() into an outer finally) so that devServer.close() is always
awaited regardless of fs.writeFileSync failures — specifically adjust the
finally that uses originalFiles and fs.writeFileSync so errors during
restoration are caught/handled and then ensure devServer.close() is called in a
guaranteed cleanup path referencing originalFiles, fs.writeFileSync, and
devServer.close().
src/index.ts (1)

779-794: Consider capturing the module after transformRequest to avoid timing issues.

The current code captures entryMod before calling transformRequest, but if the module doesn't exist yet, it will be created by transformRequest. In that case, entryMod would be undefined even though the module exists after the transform, and the invalidation would be skipped.

🔧 Suggested fix
           let markoAPI: string | undefined;
           if ("transformRequest" in this.environment) {
-            const entryMod =
-              this.environment.moduleGraph.getModuleById(fileName);
             await this.environment.transformRequest(fileName);
             markoAPI = this.getModuleInfo(fileName)?.meta.markoAPI;
             // transformRequest above re-populates the module's transformResult
             // which prevents the SSR module runner from detecting that it was
             // invalidated. Re-invalidate so the runner properly re-evaluates it.
-
-            if (entryMod) {
+            const entryMod =
+              this.environment.moduleGraph.getModuleById(fileName);
+            if (entryMod) {
               this.environment.moduleGraph.invalidateModule(entryMod);
             }
           } else {
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/index.ts` around lines 779 - 794, The code captures entryMod before
calling transformRequest, so when transformRequest creates the module entryMod
remains undefined and invalidateModule is skipped; change the logic in the block
that checks "transformRequest" in this.environment to fetch the module after
awaiting this.environment.transformRequest(fileName) (e.g., call
this.environment.moduleGraph.getModuleById(fileName) again or reassign entryMod
after the await) and then call
this.environment.moduleGraph.invalidateModule(entryMod) if present; ensure
markoAPI is still read from this.getModuleInfo(fileName)?.meta.markoAPI after
the transform.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/__tests__/fixtures/isomorphic-basic-hmr/dev-server.mjs`:
- Around line 20-27: Remove the invalid server option by deleting the `ws:
false` entry from the server config in the dev server setup (the block that
contains `server: { ... }` with `hmr: false`, `middlewareMode: true`, and
`watch`). Vite 8 does not support `ws`; WebSocket behavior is controlled via
`server.hmr` which is already set to `false`, so simply remove the `ws: false`
line to fix the config.

---

Nitpick comments:
In `@src/__tests__/main.test.ts`:
- Around line 410-422: The test currently swallows timeouts from the
page.waitForFunction call (invocation that uses prevRawHtml) which can hide HMR
failures; update the .catch handler to log a diagnostic message (e.g.,
console.warn or console.error) that includes the error details
(error.name/message/stack), the prevRawHtml value and some context like the
current page URL or a short identifying string, then re-use the comment behavior
(do not throw) so tests remain tolerant but produce useful logs for debugging
HMR issues.
- Around line 393-406: The loop handling HMR changes uses content.replace(find,
replace) which only replaces the first occurrence; to replace all matches update
the replacement logic in the hmrStep.changes handler (the block that reads
filePath, content, newContent) to use replaceAll when find is a string
(content.replaceAll(find, replace)), or convert/find to a RegExp with the global
flag (new RegExp(escapedFind, "g")) before calling content.replace, ensuring
newContent truly reflects all occurrences; keep the existing error check that
compares newContent === content and update handling accordingly.
- Around line 460-466: The finally block currently restores mutated files via
fs.writeFileSync in a loop then awaits devServer.close(), which means a thrown
error during file restoration will skip closing the dev server; wrap the
restoration in its own try/catch (or move the devServer.close() into an outer
finally) so that devServer.close() is always awaited regardless of
fs.writeFileSync failures — specifically adjust the finally that uses
originalFiles and fs.writeFileSync so errors during restoration are
caught/handled and then ensure devServer.close() is called in a guaranteed
cleanup path referencing originalFiles, fs.writeFileSync, and devServer.close().

In `@src/index.ts`:
- Around line 779-794: The code captures entryMod before calling
transformRequest, so when transformRequest creates the module entryMod remains
undefined and invalidateModule is skipped; change the logic in the block that
checks "transformRequest" in this.environment to fetch the module after awaiting
this.environment.transformRequest(fileName) (e.g., call
this.environment.moduleGraph.getModuleById(fileName) again or reassign entryMod
after the await) and then call
this.environment.moduleGraph.invalidateModule(entryMod) if present; ensure
markoAPI is still read from this.getModuleInfo(fileName)?.meta.markoAPI after
the transform.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c086bf61-9f2d-499a-bae0-d7c4060918cd

📥 Commits

Reviewing files that changed from the base of the PR and between e504a51 and 1080c1a.

⛔ Files ignored due to path filters (6)
  • src/__tests__/fixtures/isomorphic-basic-hmr/__snapshots__/build.expected.md is excluded by !**/__snapshots__/** and included by **
  • src/__tests__/fixtures/isomorphic-basic-hmr/__snapshots__/dev-hmr.expected.md is excluded by !**/__snapshots__/** and included by **
  • src/__tests__/fixtures/isomorphic-basic-hmr/__snapshots__/dev.expected.md is excluded by !**/__snapshots__/** and included by **
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/__snapshots__/build.expected.md is excluded by !**/__snapshots__/** and included by **
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/__snapshots__/dev-hmr.expected.md is excluded by !**/__snapshots__/** and included by **
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/__snapshots__/dev.expected.md is excluded by !**/__snapshots__/** and included by **
📒 Files selected for processing (18)
  • .changeset/light-dolls-remain.md
  • src/__tests__/fixtures/isomorphic-basic-hmr/dev-server.mjs
  • src/__tests__/fixtures/isomorphic-basic-hmr/server.mjs
  • src/__tests__/fixtures/isomorphic-basic-hmr/src/components/class-component.marko
  • src/__tests__/fixtures/isomorphic-basic-hmr/src/components/implicit-component.marko
  • src/__tests__/fixtures/isomorphic-basic-hmr/src/components/layout-component.marko
  • src/__tests__/fixtures/isomorphic-basic-hmr/src/index.js
  • src/__tests__/fixtures/isomorphic-basic-hmr/src/template.marko
  • src/__tests__/fixtures/isomorphic-basic-hmr/test.config.ts
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/dev-server.mjs
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/server.mjs
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/src/index.js
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/src/tags/child-tag.marko
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/src/tags/layout.marko
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/src/template.marko
  • src/__tests__/fixtures/isomorphic-tags-api-hmr/test.config.ts
  • src/__tests__/main.test.ts
  • src/index.ts
✅ Files skipped from review due to trivial changes (10)
  • src/tests/fixtures/isomorphic-basic-hmr/src/components/implicit-component.marko
  • src/tests/fixtures/isomorphic-tags-api-hmr/src/template.marko
  • src/tests/fixtures/isomorphic-tags-api-hmr/src/tags/child-tag.marko
  • .changeset/light-dolls-remain.md
  • src/tests/fixtures/isomorphic-tags-api-hmr/src/tags/layout.marko
  • src/tests/fixtures/isomorphic-basic-hmr/src/components/layout-component.marko
  • src/tests/fixtures/isomorphic-basic-hmr/src/template.marko
  • src/tests/fixtures/isomorphic-tags-api-hmr/test.config.ts
  • src/tests/fixtures/isomorphic-basic-hmr/test.config.ts
  • src/tests/fixtures/isomorphic-basic-hmr/src/components/class-component.marko
🚧 Files skipped from review as they are similar to previous changes (5)
  • src/tests/fixtures/isomorphic-basic-hmr/src/index.js
  • src/tests/fixtures/isomorphic-tags-api-hmr/server.mjs
  • src/tests/fixtures/isomorphic-tags-api-hmr/src/index.js
  • src/tests/fixtures/isomorphic-basic-hmr/server.mjs
  • src/tests/fixtures/isomorphic-tags-api-hmr/dev-server.mjs

Comment thread src/__tests__/fixtures/isomorphic-basic-hmr/dev-server.mjs
@DylanPiercey DylanPiercey merged commit fe862a1 into main Apr 6, 2026
9 checks passed
@github-project-automation github-project-automation bot moved this from Todo to Done in Roadmap Apr 6, 2026
@DylanPiercey DylanPiercey deleted the fix-live-reload-tags-api branch April 6, 2026 20:50
@github-actions github-actions bot mentioned this pull request Apr 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant