Skip to content

Docs: require local unit + example integration tests to merge#193

Open
obj-p wants to merge 4 commits into
mainfrom
docs-no-ci-verification
Open

Docs: require local unit + example integration tests to merge#193
obj-p wants to merge 4 commits into
mainfrom
docs-no-ci-verification

Conversation

@obj-p

@obj-p obj-p commented Jun 5, 2026

Copy link
Copy Markdown
Owner

CI is disabled (the CI and Cache warmer workflows are off and the required_status_checks rule was removed from the main ruleset). This documents the local verification gate in AGENTS.md.

To merge a PR:

  • all unit tests pass (swift test, plus --filter PreviewsJITLinkTests --no-parallel for JIT)
  • the example integration tests pass via the integration-test skill

Docs-only change.

🤖 Generated with Claude Code

obj-p and others added 4 commits June 4, 2026 22:12
CI is disabled, so document the local verification gate in AGENTS.md:
a PR does not merge until all unit tests pass and the example
integration tests pass via the integration-test skill.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
bitmapImageRepForCachingDisplay inherits the host window's backingScaleFactor,
so on a Retina (2x) display the snapshot came out 800x1200 instead of the
logical 400x600, making output depend on which machine the daemon ran on.
Build the NSBitmapImageRep manually at the point bounds so capture is 1x and
reproducible across machines.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The structural split compiled the bulk into a prebuilt stable module that the
hot file imported. That is one-directional, so a non-leaf hot file (one the
bulk references, e.g. a previewed view used by another preview) failed with
"cannot find <type> in scope" when the bulk compiled without it.

Detect the non-leaf case (the stable-module compile fails) and compile the whole
target module incrementally instead: the editable overlay plus the other sources
under one module name, where the Swift driver recompiles only the hot file and
reuses the bulk objects. References resolve in both directions. Because the
overlay then uses the target's own module name, its @observable DesignTimeStore
would re-register across generations, so non-leaf builds respawn the agent each
structural edit.

hotReloadStructural now exercises this on the JIT daemon. Its sync marker moves
from "Compiled:" (only the non-JIT recompile logs it) to "Reloaded", which both
daemon kinds log on a successful structural edit.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
lookupInitialized read session->initialized outside the lock with no re-check,
so two threads could both pass the guard and double-initialize the JITDylib
(and the bool itself was a data race). Hold the lock across the check and the
init so the flag is only touched under the lock.

PreviewsAnonymousMapper::prepare and ::initialize decremented the upper_bound
iterator with no bounds check, which is undefined behavior if the reservation
map is empty or the address precedes all reservations. Guard r == begin():
prepare returns nullptr, initialize reports an Expected error.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant