Repository navigation
Conversation
The scope prefix was the md5 of the absolute file path, so two builds of the same source at different paths gave different data-scopedcss attributes, and prerendered HTML from one build did not match the CSS of the other. A file inside a package is now identified by its package name and its path inside the package. A file that does not exist on disk keeps its filename, so the realm transpile's synthetic paths are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RhwZUafCP38ur35n87R7BW
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Contributor
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X7duKLnisge7fjfHUXftWw
richardhjtan
approved these changes
Oct 8, 2026
The patch hashes path.relative(process.cwd(), filename) instead of walking up to the nearest package.json and hashing the package name and the path inside the package. A file that does not exist on disk still keeps its filename. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RhwZUafCP38ur35n87R7BW
process.cwd() is always a real path. A filename reached through a symlink otherwise gives a relative path up to the root and back down, which holds the absolute path again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RhwZUafCP38ur35n87R7BW
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Background and Goal
glimmer-scoped-cssmakes eachdata-scopedcss-*prefix frommd5of the absolute file path. Two builds of the same source at different paths therefore give different attributes. Prerendered HTML holds the attributes of the build that rendered it, so a build at another path does not style it. boxel-ui components are affected most, because the host supplies their CSS and the prerendered card does not record it (CS-13587).This PR is a
pnpm patchthat tests the fix before the library changes. A file on disk now gets the prefix of its path relative to the build's working directory, with both paths resolved through symlinks. Every host build runs frompackages/host, so every checkout gives the same prefixes. A file that does not exist on disk keeps its filename, so the realm transpile's synthetic paths (/spec.gts) and their prefixes do not change.How to confirm it
Each PR builds the host test assets twice, at two paths: CI Host on runs-on (
/home/runner/_work/…, artifact…-env-ci) and CI onubuntu-latest(/home/runner/work/…, artifact…-env-std). The main-branch index cache is built from theubuntu-latestone.5e3d619371):Pillis.pill[data-scopedcss-f0e3e9ccf9-9feed8dbe3]in…-env-std(components-BTXBHzll.css) and.pill[data-scopedcss-7c8ff8e74a-9feed8dbe3]in…-env-ci(components-CE4lH1v2.css)..pill[data-scopedcss-f135659bf3-9feed8dbe3](md5('../boxel-ui/src/components/pill/index.gts')). At08a9258742both have the same 259 CSS file names and the same 456 scope prefixes.End-to-end evidence
[Claude Code 🤖] The arms ran the patch at
7fb6f326a3, which identified a file by its package name and the path inside the package. That form and the working-directory form are both independent of the checkout path, which is the property the arms test. Two arms on top of #6445 atc97a5c9bbf, the branch that reproduces the unstyledPill. Each arm built its own index cache onubuntu-latestwithci.yaml's owntest-web-assetsandcache-indexsteps, asmaindoes. A dispatched CI Host run on runs-on then imported that cache, and the shard logs confirm each arm imported its own. A temporary harness on throwaway branches did this; it is not part of this PR.closes the top-most modal first when clicking overlay backgrounddiffers at 0.0120107, the ratio of the original diff on #6367Arm B also had one failing integration test (
card-chooser | paging: Select All keeps a row selected from past the first page, awaitFortimeout). That test does not use the index cache, and arm A passed it.Key decisions and non-obvious mechanics
mainkeeps the old prefixes until amainrun after this merge rebuilds it, so expect Percy diffs on cached HTML until then. Staging and production prerendered HTML keeps the old prefixes until a reindex re-renders it.cardstack/glimmer-scoped-css, and a release replaces this patch.🤖 Generated with Claude Code
https://claude.ai/code/session_01RhwZUafCP38ur35n87R7BW