Skip to content

chore: Cloudflare migration polish — Netlify cleanup, CSP, Pyodide CDN - #187

Merged
ayoub3bidi merged 6 commits into
developfrom
feat/cloudflare-infrastructure
Jun 26, 2026
Merged

chore: Cloudflare migration polish — Netlify cleanup, CSP, Pyodide CDN#187
ayoub3bidi merged 6 commits into
developfrom
feat/cloudflare-infrastructure

Conversation

@ayoub3bidi

@ayoub3bidi ayoub3bidi commented Jun 26, 2026

Copy link
Copy Markdown
Owner

Contribution workflow

  • Base branch is develop: This PR targets develop from feat/cloudflare-infrastructure.
  • Guidelines and docs: Read CONTRIBUTING.md and relevant docs.
  • This template: PR template structure kept; sections below filled in.

Description

Follow-up polish on the Netlify → Cloudflare Workers migration already merged via #183 and #185. Removes stale Netlify hostname handling from runtime code, updates legal/docs for Cloudflare hosting, hardens static asset headers for Workers, and makes the Pyodide CDN base configurable.

This is not a v0.5.0 release PR and does not change production DNS or wrangler.jsonc routes.

Type of Change

  • 🐛 Bug fix (non-breaking change which fixes an issue)
  • ✨ New feature (non-breaking change which adds functionality)
  • 💥 Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • 📚 Documentation update
  • 🎨 Style/UI improvement
  • ⚡ Performance improvement
  • 🧪 Test addition or improvement
  • 🔧 Chore (maintenance, dependencies, etc.)

Related Issues

Fixes #

Changes Made

Runtime & SEO

  • index.html — drop .netlify.app and legacy deploy-preview hostname checks; noindex + Umami routing use production domains, dev.bayanflow.com, and .workers.dev only
  • src/constants/siteSeo.js — align isNoIndexHostname() with the same hostname set

Privacy & legal

  • src/content/legal/privacy.en.js — hosting processor Netlify → Cloudflare; clarify Umami hostname switching and GitHub API usage; bump last-updated date
  • src/content/legal/privacy.en.test.js — assert Cloudflare mention

Static assets & security (public/_headers)

  • CSP: allow Cloudflare Web Analytics beacon (static.cloudflareinsights.com, cloudflareinsights.com) alongside existing Umami/GitHub/jsDelivr origins
  • Cache rules: immutable /assets/*, no-cache for /index.html, short TTL for branding assets
  • Existing workers.dev X-Robots-Tag: noindex rule unchanged

Pyodide CDN

  • src/constants/pyodideCdn.js (new) — centralize PYODIDE_VERSION and getPyodideCdnBase() with optional VITE_PYODIDE_CDN_BASE override
  • src/hooks/usePythonExecution.js — pass cdnBase to the worker on init
  • src/workers/pyodide.worker.js — load Pyodide from configurable base URL (defaults to jsDelivr)
  • src/constants/pyodideCdn.test.js (new) — default base, env override, trailing-slash normalization, script URL

Documentation & repo hygiene

  • docs/ARCHITECTURE.md — Cloudflare deploy/env docs (already on branch); removed stale setup doc link
  • docs/DEVELOPMENT.md, docs/AGENTS_REFERENCE.md, SECURITY.md — Netlify → Cloudflare Workers references
  • .github/labeler.yml — CI label paths use wrangler.jsonc only
  • wrangler.jsonc — remove Netlify rollback comment
  • src/utils/deployContext.js — comment wording for Workers previews

netlify.toml is intentionally unchanged (rollback file; manual removal planned ~2 weeks post cutover).

Algorithm Details (if applicable)

N/A

Testing

  • pnpm vitest run src/constants/siteSeo.test.js src/content/legal/privacy.en.test.js src/constants/pyodideCdn.test.js
  • Full CI green on PR

Test Results

siteSeo.test.js, privacy.en.test.js, pyodideCdn.test.js — all passing locally

Screenshots/GIFs

N/A

Code Quality

  • Focused tests added for touched constants/legal modules
  • CI lint + format + coverage + build

Performance Impact

  • Positive — immutable cache headers on hashed Vite assets; index.html stays fresh for SPA updates

Accessibility

  • N/A

Breaking Changes

None. Default Pyodide CDN remains jsDelivr; production hostnames unchanged.

Checklist

  • Netlify hostname logic removed from runtime code
  • Privacy policy reflects Cloudflare hosting
  • Docs updated for Cloudflare Workers deploy
  • PR preview smoke: SPA refresh, Umami on staging hostname, Python panel loads Pyodide
  • After merge to develop: verify dev.bayanflow.com deploy unchanged

Additional Notes

CSP / Cloudflare Web Analytics

The CSP additions only permit the Cloudflare Web Analytics beacon if enabled in the dashboard. Umami remains the analytics wired in index.html. No second analytics processor is documented unless Web Analytics is turned on in Cloudflare.

Rollback

Legacy hosting config remains in netlify.toml until manual cleanup after the cutover stabilizes.


Reviewer Guidelines:

  • Confirm no production SEO regression (bayanflow.com / www still indexable)
  • Spot-check privacy policy accuracy vs actual third-party calls
  • Optional: open Python panel on PR preview to confirm Pyodide still loads from jsDelivr

Summary by CodeRabbit

  • New Features
    • Added support for configuring the Pyodide CDN base URL (with a default when unset).
  • Bug Fixes
    • Updated no-index behavior and analytics environment detection for current Workers/preview hostnames.
    • Improved HTTP security headers (CSP) and added route/asset-specific caching.
    • Enhanced worker runtime initialization error handling with automatic worker disposal/recreation.
  • Documentation
    • Refreshed deployment/architecture/security/privacy docs for Cloudflare Workers instead of Netlify.
  • Tests
    • Added/updated tests for Pyodide CDN selection and worker failure scenarios.
  • Chores
    • Updated CI labeling rules for the new static asset setup.

@ayoub3bidi ayoub3bidi self-assigned this Jun 26, 2026
@netlify

netlify Bot commented Jun 26, 2026

Copy link
Copy Markdown

Deploy Preview for dev-bayanflow ready!

Name Link
🔨 Latest commit 31d5988
🔍 Latest deploy log https://app.netlify.com/projects/dev-bayanflow/deploys/6a3ef1e83fdad70008c1ee03
😎 Deploy Preview https://deploy-preview-187--dev-bayanflow.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@github-actions github-actions Bot added documentation Improvements or additions to documentation ci Workflows tests labels Jun 26, 2026
@coderabbitai

coderabbitai Bot commented Jun 26, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The PR moves deployment and static-hosting references from Netlify to Cloudflare Workers, updates HTTP headers and hostname-based SEO logic, revises the privacy policy wording, and adds configurable Pyodide CDN plumbing with worker wiring.

Changes

Cloudflare Workers migration and Pyodide flow

Layer / File(s) Summary
Workers docs and repo config
.github/labeler.yml, SECURITY.md, docs/AGENTS_REFERENCE.md, docs/ARCHITECTURE.md, docs/DEVELOPMENT.md, src/utils/deployContext.js
Repo docs, labeler rules, security text, and the deploy-context comment now reference Cloudflare Workers, wrangler.jsonc, PR previews, and optional VITE_PYODIDE_CDN_BASE.
Headers, SEO, and privacy
public/_headers, index.html, src/constants/siteSeo.js, src/constants/siteSeo.test.js, src/content/legal/privacy.en.js, src/content/legal/privacy.en.test.js
HTTP security headers and cache rules are updated, noindex and analytics hostname checks narrow to Workers/local hosts, and the privacy policy wording and tests now reference Cloudflare.
Pyodide CDN helper
src/constants/pyodideCdn.js, src/constants/pyodideCdn.test.js
Shared constants pin PYODIDE_VERSION, normalize VITE_PYODIDE_CDN_BASE, and build the pyodide.js URL with tests for the fallback and override cases.
Pyodide worker execution
src/hooks/usePythonExecution.js, src/hooks/usePythonExecution.test.js, src/workers/pyodide.worker.js
usePythonExecution now sends cdnBase in worker init messages, handles worker readiness and failure disposal, and pyodide.worker.js uses that base or the default jsDelivr path when constructing the Pyodide URL.
Vite build CSP patching
vite.config.js
The build config now derives env per mode and patches the generated _headers file to add the configured Pyodide origin to CSP directives.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • ayoub3bidi/bayan-flow#183: Updates the same Cloudflare Workers migration surface, including workers.dev noindex handling.
  • ayoub3bidi/bayan-flow#185: Adjusts hostname-based behavior to match the Cloudflare custom domains and Workers deployment setup.

Poem

A bunny hopped through headers, neat and light,
With Workers clouds and Pyodide in sight.
I nibbled CSP crumbs and found the CDN trail,
Then bounded past noindex with a whiskered tail.
🐇✨ Hop hop — the build feels bright!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main follow-up changes: Cloudflare migration cleanup, CSP updates, and Pyodide CDN configurability.
Docstring Coverage ✅ Passed Docstring coverage is 88.89% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/cloudflare-infrastructure

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

@codecov

codecov Bot commented Jun 26, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 88.00000% with 9 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
src/workers/pyodide.worker.js 0.00% 6 Missing ⚠️
src/hooks/usePythonExecution.js 93.61% 3 Missing ⚠️

📢 Thoughts on this report? Let us know!

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 6

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/AGENTS_REFERENCE.md`:
- Around line 206-213: The repository config list uses the wrong labeler path,
which can mislead readers looking for the file. Update the documentation entry
in AGENTS_REFERENCE to reference the actual `.github/labeler.yml` path
consistently with the other GitHub workflow/config references, and keep the
surrounding build/CI config list unchanged.

In `@public/_headers`:
- Line 7: The Content-Security-Policy is still hardcoded to allow Pyodide
fetches only from the current CDN host, so deployments using a custom
VITE_PYODIDE_CDN_BASE will be blocked. Update the CSP in the headers
configuration to include the configurable Pyodide CDN origin in the appropriate
directive, keeping the allowlist aligned with the runtime base used by the
Pyodide loader.
- Around line 21-22: Add an HTTP-level noindex rule for the stable dev host
because `_headers` only applies `X-Robots-Tag` to `*.workers.dev`, leaving
`dev.bayanflow.com` without server-side noindex coverage. Update the `_headers`
configuration to include `dev.bayanflow.com` alongside the existing worker host
rule so crawlers receive `X-Robots-Tag: noindex` without relying on `siteSeo` or
`index.html` behavior.

In `@src/constants/pyodideCdn.test.js`:
- Around line 39-42: The failing assertion in pyodideCdn.test.js needs to be
reformatted to satisfy Prettier, specifically the expectation in the
pyodideScriptUrl test. Update the expect(...).toBe(...) statement so it matches
the project's formatted line-wrapping style without changing the test logic or
the pyodideScriptUrl import/stubEnv setup.

In `@src/content/legal/privacy.en.js`:
- Line 29: The privacy text in the GitHub API disclosure is too absolute because
browser requests to api.github.com still expose network metadata like IP address
and user agent. Update the wording in the privacy content string for the
header/footer GitHub API notice to disclose that GitHub may receive such
metadata, or adjust the implementation to proxy the request server-side if you
want to avoid sharing it.

In `@src/hooks/usePythonExecution.js`:
- Around line 99-103: The worker lifecycle in usePythonExecution is leaving a
failed init cached, so later runCode/runTests calls reuse an uninitialized
worker. Update the init flow around workerRef.current.postMessage in the runtime
startup path and the related runCode/runTests fallback so that a failed
runtime-load/init clears or terminates workerRef.current before returning, or
otherwise marks the worker as init-failed and forces a fresh init on the next
call. Use the existing workerRef, runCode, and runTests logic to ensure bad
cdnBase overrides do not keep a broken worker alive.
🪄 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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 25cd7c97-4533-431b-b3ee-8e2ad468b18a

📥 Commits

Reviewing files that changed from the base of the PR and between 6eca5d9 and 6ae5e2f.

📒 Files selected for processing (16)
  • .github/labeler.yml
  • SECURITY.md
  • docs/AGENTS_REFERENCE.md
  • docs/ARCHITECTURE.md
  • docs/DEVELOPMENT.md
  • index.html
  • public/_headers
  • src/constants/pyodideCdn.js
  • src/constants/pyodideCdn.test.js
  • src/constants/siteSeo.js
  • src/constants/siteSeo.test.js
  • src/content/legal/privacy.en.js
  • src/content/legal/privacy.en.test.js
  • src/hooks/usePythonExecution.js
  • src/utils/deployContext.js
  • src/workers/pyodide.worker.js
💤 Files with no reviewable changes (2)
  • .github/labeler.yml
  • src/constants/siteSeo.test.js

Comment thread docs/AGENTS_REFERENCE.md Outdated
Comment thread public/_headers Outdated
Comment thread public/_headers
Comment thread src/constants/pyodideCdn.test.js Outdated
Comment thread src/content/legal/privacy.en.js Outdated
Comment thread src/hooks/usePythonExecution.js
@github-actions

github-actions Bot commented Jun 26, 2026

Copy link
Copy Markdown

Cloudflare Workers preview for bayan-flow-staging ready!

Name Link
🔨 Latest commit 31d5988
🔍 Latest deploy log https://github.com/ayoub3bidi/bayan-flow/actions/runs/28266851820
😎 Deploy Preview https://pr-187-bayan-flow-staging.ayoub3bidi.workers.dev
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

Preview alias pr-187 on the staging worker. Updates automatically with new commits.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/hooks/usePythonExecution.js`:
- Around line 74-80: The worker error paths in usePythonExecution should also
fail the active test run, not just clear the timeout and dispose the worker.
Update the error-handling logic in runTests/its worker message and onerror
handlers so they set the test status to error and populate the test error state
whenever a worker error occurs, using the existing status/error setters in
usePythonExecution to avoid leaving the run stuck in running.

In `@vite.config.js`:
- Around line 68-69: The CSP origin resolution in the Vite config is reading
VITE_PYODIDE_CDN_BASE directly from process.env during config evaluation, so it
can miss .env.* values. Update the Vite config to call loadEnv() and use the
loaded VITE_PYODIDE_CDN_BASE value when invoking resolvePyodideCspOrigin(),
keeping the generated CSP aligned with the runtime CDN origin.
🪄 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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 48302f31-3fcc-49af-9176-2dafab02022d

📥 Commits

Reviewing files that changed from the base of the PR and between a69eca2 and 71ceabd.

📒 Files selected for processing (8)
  • docs/AGENTS_REFERENCE.md
  • public/_headers
  • src/constants/pyodideCdn.js
  • src/content/legal/privacy.en.js
  • src/content/legal/privacy.en.test.js
  • src/hooks/usePythonExecution.js
  • src/hooks/usePythonExecution.test.js
  • vite.config.js
✅ Files skipped from review due to trivial changes (1)
  • docs/AGENTS_REFERENCE.md
🚧 Files skipped from review as they are similar to previous changes (4)
  • src/content/legal/privacy.en.js
  • src/constants/pyodideCdn.js
  • src/content/legal/privacy.en.test.js
  • public/_headers

Comment thread src/hooks/usePythonExecution.js
Comment thread vite.config.js Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/hooks/usePythonExecution.js`:
- Around line 71-88: Worker error handling in usePythonExecution currently
updates the code-run state unconditionally, which causes test-only runs to
surface a fake code-execution failure. Add an analogous hadActiveCode check (for
example, based on timeoutRef.current) alongside the existing hadActiveTests
guard in the error path, and only call setStatus('error') and setError(message)
when a code run is actually active; keep testStatus/testError updates behind the
test guard. Apply the same conditional handling in worker.onerror so both error
paths only affect the execution panel when runCode is in progress.

In `@src/hooks/usePythonExecution.test.js`:
- Around line 209-217: The pre-ready error path in the usePythonExecution test
only checks status and error text, but it should also verify that the worker is
disposed. Update the test case in usePythonExecution.test.js that drives
mockWorker.onmessage with type: 'error' to assert terminate() is called,
matching the cleanup behavior in usePythonExecution.js for the pre-ready
runTests failure branch.

In `@vite.config.js`:
- Around line 87-90: The Pyodide CSP patch in closeBundle() is skipping updates
when resolvePyodideCspOrigin(pyodideCdnBase) returns null for the default CDN,
which leaves jsDelivr out of the generated policy. Update the CSP handling so
the default Pyodide CDN also contributes the jsDelivr origin to both connect-src
and script-src, and keep the existing logic in closeBundle() and
resolvePyodideCspOrigin() aligned so the worker’s runtime CDN is always covered.
🪄 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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 1d532178-1886-4506-aadd-785f321b09eb

📥 Commits

Reviewing files that changed from the base of the PR and between 71ceabd and 9233266.

📒 Files selected for processing (4)
  • src/constants/pyodideCdn.js
  • src/hooks/usePythonExecution.js
  • src/hooks/usePythonExecution.test.js
  • vite.config.js
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/constants/pyodideCdn.js

Comment thread src/hooks/usePythonExecution.js
Comment thread src/hooks/usePythonExecution.test.js
Comment thread vite.config.js Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/hooks/usePythonExecution.js (1)

154-159: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Fail the sibling operation when a shared-worker timeout disposes the worker.

Both timeout handlers terminate the same workerRef.current, but only update their own panel state. If runCode() and runTests() overlap, timing out either one leaves the other stuck in running until its separate timeout fires, even though its worker was already killed on Line 155 / Line 208.

Suggested fix
      timeoutRef.current = setTimeout(() => {
+        const hadActiveTests = testTimeoutRef.current != null;
+        clearTimeout(testTimeoutRef.current);
+        testTimeoutRef.current = null;
         disposeWorker();
         setStatus('timeout');
         setError(`Execution timed out after ${timeout / 1000}s`);
+        if (hadActiveTests) {
+          setTestStatus('error');
+          setTestError('Worker terminated because code execution timed out');
+        }
         timeoutRef.current = null;
       }, timeout);
...
      testTimeoutRef.current = setTimeout(() => {
+        const hadActiveCode = timeoutRef.current != null;
+        clearTimeout(timeoutRef.current);
+        timeoutRef.current = null;
         disposeWorker();
         setTestStatus('error');
         setTestError(`Tests timed out after ${timeout / 1000}s`);
+        if (hadActiveCode) {
+          setStatus('error');
+          setError('Worker terminated because tests timed out');
+        }
         testTimeoutRef.current = null;
       }, timeout);

Also applies to: 207-212

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/hooks/usePythonExecution.js` around lines 154 - 159, The shared-worker
timeout path in usePythonExecution is only updating the local operation state,
so the sibling run can stay stuck in running after disposeWorker kills
workerRef.current. Update the timeout handlers used by runCode() and runTests()
to also fail any other active operation when the shared worker is disposed,
clearing its running state and setting an appropriate timeout/worker-terminated
error. Keep the fix centralized around usePythonExecution, disposeWorker, and
the timeout callbacks so both operations are synchronized.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@vite.config.js`:
- Around line 19-23: The CSP override handling in the configured-origin block
should not silently ignore an invalid non-empty VITE_PYODIDE_CDN_BASE while
getPyodideCdnBase still returns it; instead, validate the value up front and
fail the build/configuration when the override is malformed. Update the logic
around configured and origins in vite.config.js so an invalid override throws or
exits with a clear error, keeping the runtime base URL and CSP policy in sync.

---

Outside diff comments:
In `@src/hooks/usePythonExecution.js`:
- Around line 154-159: The shared-worker timeout path in usePythonExecution is
only updating the local operation state, so the sibling run can stay stuck in
running after disposeWorker kills workerRef.current. Update the timeout handlers
used by runCode() and runTests() to also fail any other active operation when
the shared worker is disposed, clearing its running state and setting an
appropriate timeout/worker-terminated error. Keep the fix centralized around
usePythonExecution, disposeWorker, and the timeout callbacks so both operations
are synchronized.
🪄 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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 77a6b88d-4ab1-42cb-90f8-7f3601684d25

📥 Commits

Reviewing files that changed from the base of the PR and between 9233266 and bd149da.

📒 Files selected for processing (4)
  • public/_headers
  • src/hooks/usePythonExecution.js
  • src/hooks/usePythonExecution.test.js
  • vite.config.js
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/hooks/usePythonExecution.test.js
  • public/_headers

Comment thread vite.config.js Outdated
@ayoub3bidi
ayoub3bidi merged commit fe9612d into develop Jun 26, 2026
15 checks passed
@ayoub3bidi
ayoub3bidi deleted the feat/cloudflare-infrastructure branch June 26, 2026 21:43
@ayoub3bidi ayoub3bidi mentioned this pull request Jul 16, 2026
35 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci Workflows config documentation Improvements or additions to documentation tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant