[codex] normalize server process and preview Effect services - #3191

Merged
juliusmarminge merged 1 commit into
mainfrom
codex/effect-service-server-process-preview
Jun 20, 2026
Merged

[codex] normalize server process and preview Effect services#3191
juliusmarminge merged 1 commit into
mainfrom
codex/effect-service-server-process-preview

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Jun 20, 2026

Copy link
Copy Markdown
Member

What changed

  • inlined service contracts for ProcessRunner, ExternalLauncher, PreviewManager, PortDiscovery, and PreviewAutomationBroker
  • replaced standalone shape references with Service["Service"]
  • normalized local service consumption to namespace imports and module-qualified members
  • exported canonical make and layer definitions
  • migrated process-run failures to structured Schema.TaggedErrorClass errors with messages derived from their attributes

Why

These services now follow the single-file Effect module convention used by relay infrastructure and newer client runtime code. No tests were added solely for the structural refactor.

Orchestration modules and McpInvocationContext / McpSessionRegistry remain intentionally excluded because orchestration is being replaced by #2829.

Validation

  • focused process, preview, environment, and server tests: 143 passed
  • vp check (passes with unrelated existing warnings)
  • vp run typecheck

Note

Medium Risk
Process error types now use Schema tagged classes with computed messages, which can affect logging or callers that assumed empty messages; service API surface is structurally the same but import paths and test factories changed.

Overview
Aligns ProcessRunner, ExternalLauncher, PreviewManager, PortDiscovery, and PreviewAutomationBroker with the single-file Effect module pattern: standalone *Shape interfaces are removed in favor of types inlined on Context.Service, implementations return Service.of(...), and make is exported for tests instead of hidden __testing hooks.

Imports move from barrel effect to explicit submodule paths (effect/Effect, effect/unstable/process/ChildProcess, etc.), and call sites/tests use namespace imports (ProcessRunner.ProcessRunner, ProcessRunner.layer).

ProcessRunner errors switch from Data.TaggedError to Schema.TaggedErrorClass with shared invocation fields and message getters built from command/args/cwd (spawn, stdin, output limit, read, timeout). Runtime behavior of run is unchanged aside from error presentation/serialization semantics.

Tests are updated to match the new module-qualified tags and the public PreviewAutomationBroker.make entry point.

Reviewed by Cursor Bugbot for commit c0c72a7. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Normalize process and preview Effect services to use namespaced exports and schema-based errors

  • Removes separate *Shape interfaces across ProcessRunner, PreviewManager, PortDiscovery, ExternalLauncher, and PreviewAutomationBroker, inlining service API types directly into Context.Service generics.
  • Exports make factories directly from each service module and removes __testing escape hatches, making make the standard construction path in tests and production.
  • Replaces effect/DataTaggedError with effect/SchemaTaggedErrorClass for all process error types, adding human-readable message strings that include command, args, cwd, and other context.
  • Switches unstable process imports from the barrel effect/unstable/process to explicit module paths effect/unstable/process/ChildProcess and effect/unstable/process/ChildProcessSpawner.
  • Behavioral Change: process error instances now expose customized message strings; any code that previously relied on default error message formatting will see different output.

Macroscope summarized c0c72a7.

@coderabbitai

coderabbitaiBot commented Jun 20, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 472e738d-d3b4-4210-b347-4cb6a0f4b349

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/effect-service-server-process-preview

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

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. labels Jun 20, 2026
@github-actions

github-actionsBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

🚀 Expo continuous deployment is ready!

  • Project → t3-code
  • Platforms → android, ios
  • Scheme → t3code-preview
🤖 Android🍎 iOS
Fingerprintfe5a51f2e189da69dfc4c2cd458e6cfb5fdff2eaae3bd597809dfd7771d0898f735d172973d4c1c8
Build DetailsBuild Permalink
DetailsDistribution: INTERNAL
Build profile: preview:dev
Runtime version: fe5a51f2e189da69dfc4c2cd458e6cfb5fdff2ea
App version: 0.1.0
Git commit: 1942ed85fe1559363b94339df832d7d33f84399c
Build Permalink
DetailsDistribution: INTERNAL
Build profile: preview:dev
Runtime version: ae3bd597809dfd7771d0898f735d172973d4c1c8
App version: 0.1.0
Git commit: b4706aa685da92ae179e34c97839c2a0e9840f09
Update DetailsUpdate Permalink
DetailsBranch: pr-3191
Runtime version: fe5a51f2e189da69dfc4c2cd458e6cfb5fdff2ea
Git commit: 8b22ef2a73b9f66fbcb383088a7f5bcb50b7f81e
Update Permalink
DetailsBranch: pr-3191
Runtime version: ae3bd597809dfd7771d0898f735d172973d4c1c8
Git commit: 8b22ef2a73b9f66fbcb383088a7f5bcb50b7f81e
Update QR

@juliusmarminge
juliusmarminge marked this pull request as ready for review June 20, 2026 02:06
macroscopeapp[bot]
macroscopeappBot previously approved these changes Jun 20, 2026
@macroscopeapp

macroscopeappBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Mechanical refactoring that normalizes Effect service definitions across the codebase. Changes are type-level (interface inlining, import style) and organizational (exporting make functions directly) with no runtime behavior changes.

You can customize Macroscope's approvability policy. Learn more.

@juliusmarminge
juliusmarmingeforce-pushed the codex/effect-service-server-process-preview branch from d7cdba3 to 60671a6CompareJune 20, 2026 02:43
@macroscopeapp
macroscopeappBot dismissed their stale reviewJune 20, 2026 02:43

Dismissing prior approval to re-evaluate 60671a6

macroscopeapp[bot]
macroscopeappBot previously approved these changes Jun 20, 2026
Co-authored-by: codex <codex@users.noreply.github.com>
@juliusmarminge
juliusmarmingeforce-pushed the codex/effect-service-server-process-preview branch from 60671a6 to c0c72a7CompareJune 20, 2026 03:26
@macroscopeapp
macroscopeappBot dismissed their stale reviewJune 20, 2026 03:26

Dismissing prior approval to re-evaluate c0c72a7

@juliusmarminge
juliusmarminge merged commit 5c1ac92 into mainJun 20, 2026
15 checks passed
@juliusmarminge
juliusmarminge deleted the codex/effect-service-server-process-preview branch June 20, 2026 04:09
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
darjss pushed a commit to darjss/t3code that referenced this pull request Aug 26, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

[codex] normalize server process and preview Effect services - #3191

Merged
juliusmarminge merged 1 commit into
mainfrom
codex/effect-service-server-process-preview
Jun 20, 2026
Merged

[codex] normalize server process and preview Effect services#3191
juliusmarminge merged 1 commit into
mainfrom
codex/effect-service-server-process-preview

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Jun 20, 2026

Copy link
Copy Markdown
Member

What changed

  • inlined service contracts for ProcessRunner, ExternalLauncher, PreviewManager, PortDiscovery, and PreviewAutomationBroker
  • replaced standalone shape references with Service["Service"]
  • normalized local service consumption to namespace imports and module-qualified members
  • exported canonical make and layer definitions
  • migrated process-run failures to structured Schema.TaggedErrorClass errors with messages derived from their attributes

Why

These services now follow the single-file Effect module convention used by relay infrastructure and newer client runtime code. No tests were added solely for the structural refactor.

Orchestration modules and McpInvocationContext / McpSessionRegistry remain intentionally excluded because orchestration is being replaced by #2829.

Validation

  • focused process, preview, environment, and server tests: 143 passed
  • vp check (passes with unrelated existing warnings)
  • vp run typecheck

Note

Medium Risk
Process error types now use Schema tagged classes with computed messages, which can affect logging or callers that assumed empty messages; service API surface is structurally the same but import paths and test factories changed.

Overview
Aligns ProcessRunner, ExternalLauncher, PreviewManager, PortDiscovery, and PreviewAutomationBroker with the single-file Effect module pattern: standalone *Shape interfaces are removed in favor of types inlined on Context.Service, implementations return Service.of(...), and make is exported for tests instead of hidden __testing hooks.

Imports move from barrel effect to explicit submodule paths (effect/Effect, effect/unstable/process/ChildProcess, etc.), and call sites/tests use namespace imports (ProcessRunner.ProcessRunner, ProcessRunner.layer).

ProcessRunner errors switch from Data.TaggedError to Schema.TaggedErrorClass with shared invocation fields and message getters built from command/args/cwd (spawn, stdin, output limit, read, timeout). Runtime behavior of run is unchanged aside from error presentation/serialization semantics.

Tests are updated to match the new module-qualified tags and the public PreviewAutomationBroker.make entry point.

Reviewed by Cursor Bugbot for commit c0c72a7. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Normalize process and preview Effect services to use namespaced exports and schema-based errors

  • Removes separate *Shape interfaces across ProcessRunner, PreviewManager, PortDiscovery, ExternalLauncher, and PreviewAutomationBroker, inlining service API types directly into Context.Service generics.
  • Exports make factories directly from each service module and removes __testing escape hatches, making make the standard construction path in tests and production.
  • Replaces effect/DataTaggedError with effect/SchemaTaggedErrorClass for all process error types, adding human-readable message strings that include command, args, cwd, and other context.
  • Switches unstable process imports from the barrel effect/unstable/process to explicit module paths effect/unstable/process/ChildProcess and effect/unstable/process/ChildProcessSpawner.
  • Behavioral Change: process error instances now expose customized message strings; any code that previously relied on default error message formatting will see different output.

Macroscope summarized c0c72a7.

@coderabbitai

coderabbitaiBot commented Jun 20, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 472e738d-d3b4-4210-b347-4cb6a0f4b349

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/effect-service-server-process-preview

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

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. labels Jun 20, 2026
@github-actions

github-actionsBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

🚀 Expo continuous deployment is ready!

  • Project → t3-code
  • Platforms → android, ios
  • Scheme → t3code-preview
🤖 Android🍎 iOS
Fingerprintfe5a51f2e189da69dfc4c2cd458e6cfb5fdff2eaae3bd597809dfd7771d0898f735d172973d4c1c8
Build DetailsBuild Permalink
DetailsDistribution: INTERNAL
Build profile: preview:dev
Runtime version: fe5a51f2e189da69dfc4c2cd458e6cfb5fdff2ea
App version: 0.1.0
Git commit: 1942ed85fe1559363b94339df832d7d33f84399c
Build Permalink
DetailsDistribution: INTERNAL
Build profile: preview:dev
Runtime version: ae3bd597809dfd7771d0898f735d172973d4c1c8
App version: 0.1.0
Git commit: b4706aa685da92ae179e34c97839c2a0e9840f09
Update DetailsUpdate Permalink
DetailsBranch: pr-3191
Runtime version: fe5a51f2e189da69dfc4c2cd458e6cfb5fdff2ea
Git commit: 8b22ef2a73b9f66fbcb383088a7f5bcb50b7f81e
Update Permalink
DetailsBranch: pr-3191
Runtime version: ae3bd597809dfd7771d0898f735d172973d4c1c8
Git commit: 8b22ef2a73b9f66fbcb383088a7f5bcb50b7f81e
Update QR

@juliusmarminge
juliusmarminge marked this pull request as ready for review June 20, 2026 02:06
macroscopeapp[bot]
macroscopeappBot previously approved these changes Jun 20, 2026
@macroscopeapp

macroscopeappBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Mechanical refactoring that normalizes Effect service definitions across the codebase. Changes are type-level (interface inlining, import style) and organizational (exporting make functions directly) with no runtime behavior changes.

You can customize Macroscope's approvability policy. Learn more.

@juliusmarminge
juliusmarmingeforce-pushed the codex/effect-service-server-process-preview branch from d7cdba3 to 60671a6CompareJune 20, 2026 02:43
@macroscopeapp
macroscopeappBot dismissed their stale reviewJune 20, 2026 02:43

Dismissing prior approval to re-evaluate 60671a6

macroscopeapp[bot]
macroscopeappBot previously approved these changes Jun 20, 2026
Co-authored-by: codex <codex@users.noreply.github.com>
@juliusmarminge
juliusmarmingeforce-pushed the codex/effect-service-server-process-preview branch from 60671a6 to c0c72a7CompareJune 20, 2026 03:26
@macroscopeapp
macroscopeappBot dismissed their stale reviewJune 20, 2026 03:26

Dismissing prior approval to re-evaluate c0c72a7

@juliusmarminge
juliusmarminge merged commit 5c1ac92 into mainJun 20, 2026
15 checks passed
@juliusmarminge
juliusmarminge deleted the codex/effect-service-server-process-preview branch June 20, 2026 04:09
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
darjss pushed a commit to darjss/t3code that referenced this pull request Aug 26, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[codex] normalize server process and preview Effect services - #3191

Merged
juliusmarminge merged 1 commit into
mainfrom
codex/effect-service-server-process-preview
Jun 20, 2026
Merged

[codex] normalize server process and preview Effect services#3191
juliusmarminge merged 1 commit into
mainfrom
codex/effect-service-server-process-preview

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Jun 20, 2026

Copy link
Copy Markdown
Member

What changed

  • inlined service contracts for ProcessRunner, ExternalLauncher, PreviewManager, PortDiscovery, and PreviewAutomationBroker
  • replaced standalone shape references with Service["Service"]
  • normalized local service consumption to namespace imports and module-qualified members
  • exported canonical make and layer definitions
  • migrated process-run failures to structured Schema.TaggedErrorClass errors with messages derived from their attributes

Why

These services now follow the single-file Effect module convention used by relay infrastructure and newer client runtime code. No tests were added solely for the structural refactor.

Orchestration modules and McpInvocationContext / McpSessionRegistry remain intentionally excluded because orchestration is being replaced by #2829.

Validation

  • focused process, preview, environment, and server tests: 143 passed
  • vp check (passes with unrelated existing warnings)
  • vp run typecheck

Note

Medium Risk
Process error types now use Schema tagged classes with computed messages, which can affect logging or callers that assumed empty messages; service API surface is structurally the same but import paths and test factories changed.

Overview
Aligns ProcessRunner, ExternalLauncher, PreviewManager, PortDiscovery, and PreviewAutomationBroker with the single-file Effect module pattern: standalone *Shape interfaces are removed in favor of types inlined on Context.Service, implementations return Service.of(...), and make is exported for tests instead of hidden __testing hooks.

Imports move from barrel effect to explicit submodule paths (effect/Effect, effect/unstable/process/ChildProcess, etc.), and call sites/tests use namespace imports (ProcessRunner.ProcessRunner, ProcessRunner.layer).

ProcessRunner errors switch from Data.TaggedError to Schema.TaggedErrorClass with shared invocation fields and message getters built from command/args/cwd (spawn, stdin, output limit, read, timeout). Runtime behavior of run is unchanged aside from error presentation/serialization semantics.

Tests are updated to match the new module-qualified tags and the public PreviewAutomationBroker.make entry point.

Reviewed by Cursor Bugbot for commit c0c72a7. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Normalize process and preview Effect services to use namespaced exports and schema-based errors

  • Removes separate *Shape interfaces across ProcessRunner, PreviewManager, PortDiscovery, ExternalLauncher, and PreviewAutomationBroker, inlining service API types directly into Context.Service generics.
  • Exports make factories directly from each service module and removes __testing escape hatches, making make the standard construction path in tests and production.
  • Replaces effect/DataTaggedError with effect/SchemaTaggedErrorClass for all process error types, adding human-readable message strings that include command, args, cwd, and other context.
  • Switches unstable process imports from the barrel effect/unstable/process to explicit module paths effect/unstable/process/ChildProcess and effect/unstable/process/ChildProcessSpawner.
  • Behavioral Change: process error instances now expose customized message strings; any code that previously relied on default error message formatting will see different output.

Macroscope summarized c0c72a7.

@coderabbitai

coderabbitaiBot commented Jun 20, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 472e738d-d3b4-4210-b347-4cb6a0f4b349

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/effect-service-server-process-preview

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

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. labels Jun 20, 2026
@github-actions

github-actionsBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

🚀 Expo continuous deployment is ready!

  • Project → t3-code
  • Platforms → android, ios
  • Scheme → t3code-preview
🤖 Android🍎 iOS
Fingerprintfe5a51f2e189da69dfc4c2cd458e6cfb5fdff2eaae3bd597809dfd7771d0898f735d172973d4c1c8
Build DetailsBuild Permalink
DetailsDistribution: INTERNAL
Build profile: preview:dev
Runtime version: fe5a51f2e189da69dfc4c2cd458e6cfb5fdff2ea
App version: 0.1.0
Git commit: 1942ed85fe1559363b94339df832d7d33f84399c
Build Permalink
DetailsDistribution: INTERNAL
Build profile: preview:dev
Runtime version: ae3bd597809dfd7771d0898f735d172973d4c1c8
App version: 0.1.0
Git commit: b4706aa685da92ae179e34c97839c2a0e9840f09
Update DetailsUpdate Permalink
DetailsBranch: pr-3191
Runtime version: fe5a51f2e189da69dfc4c2cd458e6cfb5fdff2ea
Git commit: 8b22ef2a73b9f66fbcb383088a7f5bcb50b7f81e
Update Permalink
DetailsBranch: pr-3191
Runtime version: ae3bd597809dfd7771d0898f735d172973d4c1c8
Git commit: 8b22ef2a73b9f66fbcb383088a7f5bcb50b7f81e
Update QR

@juliusmarminge
juliusmarminge marked this pull request as ready for review June 20, 2026 02:06
macroscopeapp[bot]
macroscopeappBot previously approved these changes Jun 20, 2026
@macroscopeapp

macroscopeappBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Mechanical refactoring that normalizes Effect service definitions across the codebase. Changes are type-level (interface inlining, import style) and organizational (exporting make functions directly) with no runtime behavior changes.

You can customize Macroscope's approvability policy. Learn more.

@juliusmarminge
juliusmarmingeforce-pushed the codex/effect-service-server-process-preview branch from d7cdba3 to 60671a6CompareJune 20, 2026 02:43
@macroscopeapp
macroscopeappBot dismissed their stale reviewJune 20, 2026 02:43

Dismissing prior approval to re-evaluate 60671a6

macroscopeapp[bot]
macroscopeappBot previously approved these changes Jun 20, 2026
Co-authored-by: codex <codex@users.noreply.github.com>
@juliusmarminge
juliusmarmingeforce-pushed the codex/effect-service-server-process-preview branch from 60671a6 to c0c72a7CompareJune 20, 2026 03:26
@macroscopeapp
macroscopeappBot dismissed their stale reviewJune 20, 2026 03:26

Dismissing prior approval to re-evaluate c0c72a7

@juliusmarminge
juliusmarminge merged commit 5c1ac92 into mainJun 20, 2026
15 checks passed
@juliusmarminge
juliusmarminge deleted the codex/effect-service-server-process-preview branch June 20, 2026 04:09
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
darjss pushed a commit to darjss/t3code that referenced this pull request Aug 26, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[codex] normalize server process and preview Effect services - #3191

Merged
juliusmarminge merged 1 commit into
mainfrom
codex/effect-service-server-process-preview
Jun 20, 2026
Merged

[codex] normalize server process and preview Effect services#3191
juliusmarminge merged 1 commit into
mainfrom
codex/effect-service-server-process-preview

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Jun 20, 2026

Copy link
Copy Markdown
Member

What changed

  • inlined service contracts for ProcessRunner, ExternalLauncher, PreviewManager, PortDiscovery, and PreviewAutomationBroker
  • replaced standalone shape references with Service["Service"]
  • normalized local service consumption to namespace imports and module-qualified members
  • exported canonical make and layer definitions
  • migrated process-run failures to structured Schema.TaggedErrorClass errors with messages derived from their attributes

Why

These services now follow the single-file Effect module convention used by relay infrastructure and newer client runtime code. No tests were added solely for the structural refactor.

Orchestration modules and McpInvocationContext / McpSessionRegistry remain intentionally excluded because orchestration is being replaced by #2829.

Validation

  • focused process, preview, environment, and server tests: 143 passed
  • vp check (passes with unrelated existing warnings)
  • vp run typecheck

Note

Medium Risk
Process error types now use Schema tagged classes with computed messages, which can affect logging or callers that assumed empty messages; service API surface is structurally the same but import paths and test factories changed.

Overview
Aligns ProcessRunner, ExternalLauncher, PreviewManager, PortDiscovery, and PreviewAutomationBroker with the single-file Effect module pattern: standalone *Shape interfaces are removed in favor of types inlined on Context.Service, implementations return Service.of(...), and make is exported for tests instead of hidden __testing hooks.

Imports move from barrel effect to explicit submodule paths (effect/Effect, effect/unstable/process/ChildProcess, etc.), and call sites/tests use namespace imports (ProcessRunner.ProcessRunner, ProcessRunner.layer).

ProcessRunner errors switch from Data.TaggedError to Schema.TaggedErrorClass with shared invocation fields and message getters built from command/args/cwd (spawn, stdin, output limit, read, timeout). Runtime behavior of run is unchanged aside from error presentation/serialization semantics.

Tests are updated to match the new module-qualified tags and the public PreviewAutomationBroker.make entry point.

Reviewed by Cursor Bugbot for commit c0c72a7. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Normalize process and preview Effect services to use namespaced exports and schema-based errors

  • Removes separate *Shape interfaces across ProcessRunner, PreviewManager, PortDiscovery, ExternalLauncher, and PreviewAutomationBroker, inlining service API types directly into Context.Service generics.
  • Exports make factories directly from each service module and removes __testing escape hatches, making make the standard construction path in tests and production.
  • Replaces effect/DataTaggedError with effect/SchemaTaggedErrorClass for all process error types, adding human-readable message strings that include command, args, cwd, and other context.
  • Switches unstable process imports from the barrel effect/unstable/process to explicit module paths effect/unstable/process/ChildProcess and effect/unstable/process/ChildProcessSpawner.
  • Behavioral Change: process error instances now expose customized message strings; any code that previously relied on default error message formatting will see different output.

Macroscope summarized c0c72a7.

@coderabbitai

coderabbitaiBot commented Jun 20, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 472e738d-d3b4-4210-b347-4cb6a0f4b349

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/effect-service-server-process-preview

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

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. labels Jun 20, 2026
@github-actions

github-actionsBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

🚀 Expo continuous deployment is ready!

  • Project → t3-code
  • Platforms → android, ios
  • Scheme → t3code-preview
🤖 Android🍎 iOS
Fingerprintfe5a51f2e189da69dfc4c2cd458e6cfb5fdff2eaae3bd597809dfd7771d0898f735d172973d4c1c8
Build DetailsBuild Permalink
DetailsDistribution: INTERNAL
Build profile: preview:dev
Runtime version: fe5a51f2e189da69dfc4c2cd458e6cfb5fdff2ea
App version: 0.1.0
Git commit: 1942ed85fe1559363b94339df832d7d33f84399c
Build Permalink
DetailsDistribution: INTERNAL
Build profile: preview:dev
Runtime version: ae3bd597809dfd7771d0898f735d172973d4c1c8
App version: 0.1.0
Git commit: b4706aa685da92ae179e34c97839c2a0e9840f09
Update DetailsUpdate Permalink
DetailsBranch: pr-3191
Runtime version: fe5a51f2e189da69dfc4c2cd458e6cfb5fdff2ea
Git commit: 8b22ef2a73b9f66fbcb383088a7f5bcb50b7f81e
Update Permalink
DetailsBranch: pr-3191
Runtime version: ae3bd597809dfd7771d0898f735d172973d4c1c8
Git commit: 8b22ef2a73b9f66fbcb383088a7f5bcb50b7f81e
Update QR

@juliusmarminge
juliusmarminge marked this pull request as ready for review June 20, 2026 02:06
macroscopeapp[bot]
macroscopeappBot previously approved these changes Jun 20, 2026
@macroscopeapp

macroscopeappBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Mechanical refactoring that normalizes Effect service definitions across the codebase. Changes are type-level (interface inlining, import style) and organizational (exporting make functions directly) with no runtime behavior changes.

You can customize Macroscope's approvability policy. Learn more.

@juliusmarminge
juliusmarmingeforce-pushed the codex/effect-service-server-process-preview branch from d7cdba3 to 60671a6CompareJune 20, 2026 02:43
@macroscopeapp
macroscopeappBot dismissed their stale reviewJune 20, 2026 02:43

Dismissing prior approval to re-evaluate 60671a6

macroscopeapp[bot]
macroscopeappBot previously approved these changes Jun 20, 2026
Co-authored-by: codex <codex@users.noreply.github.com>
@juliusmarminge
juliusmarmingeforce-pushed the codex/effect-service-server-process-preview branch from 60671a6 to c0c72a7CompareJune 20, 2026 03:26
@macroscopeapp
macroscopeappBot dismissed their stale reviewJune 20, 2026 03:26

Dismissing prior approval to re-evaluate c0c72a7

@juliusmarminge
juliusmarminge merged commit 5c1ac92 into mainJun 20, 2026
15 checks passed
@juliusmarminge
juliusmarminge deleted the codex/effect-service-server-process-preview branch June 20, 2026 04:09
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
darjss pushed a commit to darjss/t3code that referenced this pull request Aug 26, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

[codex] normalize server process and preview Effect services - #3191

Merged
juliusmarminge merged 1 commit into
mainfrom
codex/effect-service-server-process-preview
Jun 20, 2026
Merged

[codex] normalize server process and preview Effect services#3191
juliusmarminge merged 1 commit into
mainfrom
codex/effect-service-server-process-preview

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Jun 20, 2026

Copy link
Copy Markdown
Member

What changed

  • inlined service contracts for ProcessRunner, ExternalLauncher, PreviewManager, PortDiscovery, and PreviewAutomationBroker
  • replaced standalone shape references with Service["Service"]
  • normalized local service consumption to namespace imports and module-qualified members
  • exported canonical make and layer definitions
  • migrated process-run failures to structured Schema.TaggedErrorClass errors with messages derived from their attributes

Why

These services now follow the single-file Effect module convention used by relay infrastructure and newer client runtime code. No tests were added solely for the structural refactor.

Orchestration modules and McpInvocationContext / McpSessionRegistry remain intentionally excluded because orchestration is being replaced by #2829.

Validation

  • focused process, preview, environment, and server tests: 143 passed
  • vp check (passes with unrelated existing warnings)
  • vp run typecheck

Note

Medium Risk
Process error types now use Schema tagged classes with computed messages, which can affect logging or callers that assumed empty messages; service API surface is structurally the same but import paths and test factories changed.

Overview
Aligns ProcessRunner, ExternalLauncher, PreviewManager, PortDiscovery, and PreviewAutomationBroker with the single-file Effect module pattern: standalone *Shape interfaces are removed in favor of types inlined on Context.Service, implementations return Service.of(...), and make is exported for tests instead of hidden __testing hooks.

Imports move from barrel effect to explicit submodule paths (effect/Effect, effect/unstable/process/ChildProcess, etc.), and call sites/tests use namespace imports (ProcessRunner.ProcessRunner, ProcessRunner.layer).

ProcessRunner errors switch from Data.TaggedError to Schema.TaggedErrorClass with shared invocation fields and message getters built from command/args/cwd (spawn, stdin, output limit, read, timeout). Runtime behavior of run is unchanged aside from error presentation/serialization semantics.

Tests are updated to match the new module-qualified tags and the public PreviewAutomationBroker.make entry point.

Reviewed by Cursor Bugbot for commit c0c72a7. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Normalize process and preview Effect services to use namespaced exports and schema-based errors

  • Removes separate *Shape interfaces across ProcessRunner, PreviewManager, PortDiscovery, ExternalLauncher, and PreviewAutomationBroker, inlining service API types directly into Context.Service generics.
  • Exports make factories directly from each service module and removes __testing escape hatches, making make the standard construction path in tests and production.
  • Replaces effect/DataTaggedError with effect/SchemaTaggedErrorClass for all process error types, adding human-readable message strings that include command, args, cwd, and other context.
  • Switches unstable process imports from the barrel effect/unstable/process to explicit module paths effect/unstable/process/ChildProcess and effect/unstable/process/ChildProcessSpawner.
  • Behavioral Change: process error instances now expose customized message strings; any code that previously relied on default error message formatting will see different output.

Macroscope summarized c0c72a7.

@coderabbitai

coderabbitaiBot commented Jun 20, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 472e738d-d3b4-4210-b347-4cb6a0f4b349

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/effect-service-server-process-preview

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

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. labels Jun 20, 2026
@github-actions

github-actionsBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

🚀 Expo continuous deployment is ready!

  • Project → t3-code
  • Platforms → android, ios
  • Scheme → t3code-preview
🤖 Android🍎 iOS
Fingerprintfe5a51f2e189da69dfc4c2cd458e6cfb5fdff2eaae3bd597809dfd7771d0898f735d172973d4c1c8
Build DetailsBuild Permalink
DetailsDistribution: INTERNAL
Build profile: preview:dev
Runtime version: fe5a51f2e189da69dfc4c2cd458e6cfb5fdff2ea
App version: 0.1.0
Git commit: 1942ed85fe1559363b94339df832d7d33f84399c
Build Permalink
DetailsDistribution: INTERNAL
Build profile: preview:dev
Runtime version: ae3bd597809dfd7771d0898f735d172973d4c1c8
App version: 0.1.0
Git commit: b4706aa685da92ae179e34c97839c2a0e9840f09
Update DetailsUpdate Permalink
DetailsBranch: pr-3191
Runtime version: fe5a51f2e189da69dfc4c2cd458e6cfb5fdff2ea
Git commit: 8b22ef2a73b9f66fbcb383088a7f5bcb50b7f81e
Update Permalink
DetailsBranch: pr-3191
Runtime version: ae3bd597809dfd7771d0898f735d172973d4c1c8
Git commit: 8b22ef2a73b9f66fbcb383088a7f5bcb50b7f81e
Update QR

@juliusmarminge
juliusmarminge marked this pull request as ready for review June 20, 2026 02:06
macroscopeapp[bot]
macroscopeappBot previously approved these changes Jun 20, 2026
@macroscopeapp

macroscopeappBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Mechanical refactoring that normalizes Effect service definitions across the codebase. Changes are type-level (interface inlining, import style) and organizational (exporting make functions directly) with no runtime behavior changes.

You can customize Macroscope's approvability policy. Learn more.

@juliusmarminge
juliusmarmingeforce-pushed the codex/effect-service-server-process-preview branch from d7cdba3 to 60671a6CompareJune 20, 2026 02:43
@macroscopeapp
macroscopeappBot dismissed their stale reviewJune 20, 2026 02:43

Dismissing prior approval to re-evaluate 60671a6

macroscopeapp[bot]
macroscopeappBot previously approved these changes Jun 20, 2026
Co-authored-by: codex <codex@users.noreply.github.com>
@juliusmarminge
juliusmarmingeforce-pushed the codex/effect-service-server-process-preview branch from 60671a6 to c0c72a7CompareJune 20, 2026 03:26
@macroscopeapp
macroscopeappBot dismissed their stale reviewJune 20, 2026 03:26

Dismissing prior approval to re-evaluate c0c72a7

@juliusmarminge
juliusmarminge merged commit 5c1ac92 into mainJun 20, 2026
15 checks passed
@juliusmarminge
juliusmarminge deleted the codex/effect-service-server-process-preview branch June 20, 2026 04:09
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
darjss pushed a commit to darjss/t3code that referenced this pull request Aug 26, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[codex] normalize server process and preview Effect services - #3191

Merged
juliusmarminge merged 1 commit into
mainfrom
codex/effect-service-server-process-preview
Jun 20, 2026
Merged

[codex] normalize server process and preview Effect services#3191
juliusmarminge merged 1 commit into
mainfrom
codex/effect-service-server-process-preview

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Jun 20, 2026

Copy link
Copy Markdown
Member

What changed

  • inlined service contracts for ProcessRunner, ExternalLauncher, PreviewManager, PortDiscovery, and PreviewAutomationBroker
  • replaced standalone shape references with Service["Service"]
  • normalized local service consumption to namespace imports and module-qualified members
  • exported canonical make and layer definitions
  • migrated process-run failures to structured Schema.TaggedErrorClass errors with messages derived from their attributes

Why

These services now follow the single-file Effect module convention used by relay infrastructure and newer client runtime code. No tests were added solely for the structural refactor.

Orchestration modules and McpInvocationContext / McpSessionRegistry remain intentionally excluded because orchestration is being replaced by #2829.

Validation

  • focused process, preview, environment, and server tests: 143 passed
  • vp check (passes with unrelated existing warnings)
  • vp run typecheck

Note

Medium Risk
Process error types now use Schema tagged classes with computed messages, which can affect logging or callers that assumed empty messages; service API surface is structurally the same but import paths and test factories changed.

Overview
Aligns ProcessRunner, ExternalLauncher, PreviewManager, PortDiscovery, and PreviewAutomationBroker with the single-file Effect module pattern: standalone *Shape interfaces are removed in favor of types inlined on Context.Service, implementations return Service.of(...), and make is exported for tests instead of hidden __testing hooks.

Imports move from barrel effect to explicit submodule paths (effect/Effect, effect/unstable/process/ChildProcess, etc.), and call sites/tests use namespace imports (ProcessRunner.ProcessRunner, ProcessRunner.layer).

ProcessRunner errors switch from Data.TaggedError to Schema.TaggedErrorClass with shared invocation fields and message getters built from command/args/cwd (spawn, stdin, output limit, read, timeout). Runtime behavior of run is unchanged aside from error presentation/serialization semantics.

Tests are updated to match the new module-qualified tags and the public PreviewAutomationBroker.make entry point.

Reviewed by Cursor Bugbot for commit c0c72a7. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Normalize process and preview Effect services to use namespaced exports and schema-based errors

  • Removes separate *Shape interfaces across ProcessRunner, PreviewManager, PortDiscovery, ExternalLauncher, and PreviewAutomationBroker, inlining service API types directly into Context.Service generics.
  • Exports make factories directly from each service module and removes __testing escape hatches, making make the standard construction path in tests and production.
  • Replaces effect/DataTaggedError with effect/SchemaTaggedErrorClass for all process error types, adding human-readable message strings that include command, args, cwd, and other context.
  • Switches unstable process imports from the barrel effect/unstable/process to explicit module paths effect/unstable/process/ChildProcess and effect/unstable/process/ChildProcessSpawner.
  • Behavioral Change: process error instances now expose customized message strings; any code that previously relied on default error message formatting will see different output.

Macroscope summarized c0c72a7.

@coderabbitai

coderabbitaiBot commented Jun 20, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 472e738d-d3b4-4210-b347-4cb6a0f4b349

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/effect-service-server-process-preview

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

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. labels Jun 20, 2026
@github-actions

github-actionsBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

🚀 Expo continuous deployment is ready!

  • Project → t3-code
  • Platforms → android, ios
  • Scheme → t3code-preview
🤖 Android🍎 iOS
Fingerprintfe5a51f2e189da69dfc4c2cd458e6cfb5fdff2eaae3bd597809dfd7771d0898f735d172973d4c1c8
Build DetailsBuild Permalink
DetailsDistribution: INTERNAL
Build profile: preview:dev
Runtime version: fe5a51f2e189da69dfc4c2cd458e6cfb5fdff2ea
App version: 0.1.0
Git commit: 1942ed85fe1559363b94339df832d7d33f84399c
Build Permalink
DetailsDistribution: INTERNAL
Build profile: preview:dev
Runtime version: ae3bd597809dfd7771d0898f735d172973d4c1c8
App version: 0.1.0
Git commit: b4706aa685da92ae179e34c97839c2a0e9840f09
Update DetailsUpdate Permalink
DetailsBranch: pr-3191
Runtime version: fe5a51f2e189da69dfc4c2cd458e6cfb5fdff2ea
Git commit: 8b22ef2a73b9f66fbcb383088a7f5bcb50b7f81e
Update Permalink
DetailsBranch: pr-3191
Runtime version: ae3bd597809dfd7771d0898f735d172973d4c1c8
Git commit: 8b22ef2a73b9f66fbcb383088a7f5bcb50b7f81e
Update QR

@juliusmarminge
juliusmarminge marked this pull request as ready for review June 20, 2026 02:06
macroscopeapp[bot]
macroscopeappBot previously approved these changes Jun 20, 2026
@macroscopeapp

macroscopeappBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Mechanical refactoring that normalizes Effect service definitions across the codebase. Changes are type-level (interface inlining, import style) and organizational (exporting make functions directly) with no runtime behavior changes.

You can customize Macroscope's approvability policy. Learn more.

@juliusmarminge
juliusmarmingeforce-pushed the codex/effect-service-server-process-preview branch from d7cdba3 to 60671a6CompareJune 20, 2026 02:43
@macroscopeapp
macroscopeappBot dismissed their stale reviewJune 20, 2026 02:43

Dismissing prior approval to re-evaluate 60671a6

macroscopeapp[bot]
macroscopeappBot previously approved these changes Jun 20, 2026
Co-authored-by: codex <codex@users.noreply.github.com>
@juliusmarminge
juliusmarmingeforce-pushed the codex/effect-service-server-process-preview branch from 60671a6 to c0c72a7CompareJune 20, 2026 03:26
@macroscopeapp
macroscopeappBot dismissed their stale reviewJune 20, 2026 03:26

Dismissing prior approval to re-evaluate c0c72a7

@juliusmarminge
juliusmarminge merged commit 5c1ac92 into mainJun 20, 2026
15 checks passed
@juliusmarminge
juliusmarminge deleted the codex/effect-service-server-process-preview branch June 20, 2026 04:09
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
darjss pushed a commit to darjss/t3code that referenced this pull request Aug 26, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[codex] normalize server process and preview Effect services - #3191

Merged
juliusmarminge merged 1 commit into
mainfrom
codex/effect-service-server-process-preview
Jun 20, 2026
Merged

[codex] normalize server process and preview Effect services#3191
juliusmarminge merged 1 commit into
mainfrom
codex/effect-service-server-process-preview

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Jun 20, 2026

Copy link
Copy Markdown
Member

What changed

  • inlined service contracts for ProcessRunner, ExternalLauncher, PreviewManager, PortDiscovery, and PreviewAutomationBroker
  • replaced standalone shape references with Service["Service"]
  • normalized local service consumption to namespace imports and module-qualified members
  • exported canonical make and layer definitions
  • migrated process-run failures to structured Schema.TaggedErrorClass errors with messages derived from their attributes

Why

These services now follow the single-file Effect module convention used by relay infrastructure and newer client runtime code. No tests were added solely for the structural refactor.

Orchestration modules and McpInvocationContext / McpSessionRegistry remain intentionally excluded because orchestration is being replaced by #2829.

Validation

  • focused process, preview, environment, and server tests: 143 passed
  • vp check (passes with unrelated existing warnings)
  • vp run typecheck

Note

Medium Risk
Process error types now use Schema tagged classes with computed messages, which can affect logging or callers that assumed empty messages; service API surface is structurally the same but import paths and test factories changed.

Overview
Aligns ProcessRunner, ExternalLauncher, PreviewManager, PortDiscovery, and PreviewAutomationBroker with the single-file Effect module pattern: standalone *Shape interfaces are removed in favor of types inlined on Context.Service, implementations return Service.of(...), and make is exported for tests instead of hidden __testing hooks.

Imports move from barrel effect to explicit submodule paths (effect/Effect, effect/unstable/process/ChildProcess, etc.), and call sites/tests use namespace imports (ProcessRunner.ProcessRunner, ProcessRunner.layer).

ProcessRunner errors switch from Data.TaggedError to Schema.TaggedErrorClass with shared invocation fields and message getters built from command/args/cwd (spawn, stdin, output limit, read, timeout). Runtime behavior of run is unchanged aside from error presentation/serialization semantics.

Tests are updated to match the new module-qualified tags and the public PreviewAutomationBroker.make entry point.

Reviewed by Cursor Bugbot for commit c0c72a7. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Normalize process and preview Effect services to use namespaced exports and schema-based errors

  • Removes separate *Shape interfaces across ProcessRunner, PreviewManager, PortDiscovery, ExternalLauncher, and PreviewAutomationBroker, inlining service API types directly into Context.Service generics.
  • Exports make factories directly from each service module and removes __testing escape hatches, making make the standard construction path in tests and production.
  • Replaces effect/DataTaggedError with effect/SchemaTaggedErrorClass for all process error types, adding human-readable message strings that include command, args, cwd, and other context.
  • Switches unstable process imports from the barrel effect/unstable/process to explicit module paths effect/unstable/process/ChildProcess and effect/unstable/process/ChildProcessSpawner.
  • Behavioral Change: process error instances now expose customized message strings; any code that previously relied on default error message formatting will see different output.

Macroscope summarized c0c72a7.

@coderabbitai

coderabbitaiBot commented Jun 20, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 472e738d-d3b4-4210-b347-4cb6a0f4b349

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/effect-service-server-process-preview

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

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. labels Jun 20, 2026
@github-actions

github-actionsBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

🚀 Expo continuous deployment is ready!

  • Project → t3-code
  • Platforms → android, ios
  • Scheme → t3code-preview
🤖 Android🍎 iOS
Fingerprintfe5a51f2e189da69dfc4c2cd458e6cfb5fdff2eaae3bd597809dfd7771d0898f735d172973d4c1c8
Build DetailsBuild Permalink
DetailsDistribution: INTERNAL
Build profile: preview:dev
Runtime version: fe5a51f2e189da69dfc4c2cd458e6cfb5fdff2ea
App version: 0.1.0
Git commit: 1942ed85fe1559363b94339df832d7d33f84399c
Build Permalink
DetailsDistribution: INTERNAL
Build profile: preview:dev
Runtime version: ae3bd597809dfd7771d0898f735d172973d4c1c8
App version: 0.1.0
Git commit: b4706aa685da92ae179e34c97839c2a0e9840f09
Update DetailsUpdate Permalink
DetailsBranch: pr-3191
Runtime version: fe5a51f2e189da69dfc4c2cd458e6cfb5fdff2ea
Git commit: 8b22ef2a73b9f66fbcb383088a7f5bcb50b7f81e
Update Permalink
DetailsBranch: pr-3191
Runtime version: ae3bd597809dfd7771d0898f735d172973d4c1c8
Git commit: 8b22ef2a73b9f66fbcb383088a7f5bcb50b7f81e
Update QR

@juliusmarminge
juliusmarminge marked this pull request as ready for review June 20, 2026 02:06
macroscopeapp[bot]
macroscopeappBot previously approved these changes Jun 20, 2026
@macroscopeapp

macroscopeappBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Mechanical refactoring that normalizes Effect service definitions across the codebase. Changes are type-level (interface inlining, import style) and organizational (exporting make functions directly) with no runtime behavior changes.

You can customize Macroscope's approvability policy. Learn more.

@juliusmarminge
juliusmarmingeforce-pushed the codex/effect-service-server-process-preview branch from d7cdba3 to 60671a6CompareJune 20, 2026 02:43
@macroscopeapp
macroscopeappBot dismissed their stale reviewJune 20, 2026 02:43

Dismissing prior approval to re-evaluate 60671a6

macroscopeapp[bot]
macroscopeappBot previously approved these changes Jun 20, 2026
Co-authored-by: codex <codex@users.noreply.github.com>
@juliusmarminge
juliusmarmingeforce-pushed the codex/effect-service-server-process-preview branch from 60671a6 to c0c72a7CompareJune 20, 2026 03:26
@macroscopeapp
macroscopeappBot dismissed their stale reviewJune 20, 2026 03:26

Dismissing prior approval to re-evaluate c0c72a7

@juliusmarminge
juliusmarminge merged commit 5c1ac92 into mainJun 20, 2026
15 checks passed
@juliusmarminge
juliusmarminge deleted the codex/effect-service-server-process-preview branch June 20, 2026 04:09
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
darjss pushed a commit to darjss/t3code that referenced this pull request Aug 26, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

[codex] normalize server process and preview Effect services - #3191

Merged
juliusmarminge merged 1 commit into
mainfrom
codex/effect-service-server-process-preview
Jun 20, 2026
Merged

[codex] normalize server process and preview Effect services#3191
juliusmarminge merged 1 commit into
mainfrom
codex/effect-service-server-process-preview

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Jun 20, 2026

Copy link
Copy Markdown
Member

What changed

  • inlined service contracts for ProcessRunner, ExternalLauncher, PreviewManager, PortDiscovery, and PreviewAutomationBroker
  • replaced standalone shape references with Service["Service"]
  • normalized local service consumption to namespace imports and module-qualified members
  • exported canonical make and layer definitions
  • migrated process-run failures to structured Schema.TaggedErrorClass errors with messages derived from their attributes

Why

These services now follow the single-file Effect module convention used by relay infrastructure and newer client runtime code. No tests were added solely for the structural refactor.

Orchestration modules and McpInvocationContext / McpSessionRegistry remain intentionally excluded because orchestration is being replaced by #2829.

Validation

  • focused process, preview, environment, and server tests: 143 passed
  • vp check (passes with unrelated existing warnings)
  • vp run typecheck

Note

Medium Risk
Process error types now use Schema tagged classes with computed messages, which can affect logging or callers that assumed empty messages; service API surface is structurally the same but import paths and test factories changed.

Overview
Aligns ProcessRunner, ExternalLauncher, PreviewManager, PortDiscovery, and PreviewAutomationBroker with the single-file Effect module pattern: standalone *Shape interfaces are removed in favor of types inlined on Context.Service, implementations return Service.of(...), and make is exported for tests instead of hidden __testing hooks.

Imports move from barrel effect to explicit submodule paths (effect/Effect, effect/unstable/process/ChildProcess, etc.), and call sites/tests use namespace imports (ProcessRunner.ProcessRunner, ProcessRunner.layer).

ProcessRunner errors switch from Data.TaggedError to Schema.TaggedErrorClass with shared invocation fields and message getters built from command/args/cwd (spawn, stdin, output limit, read, timeout). Runtime behavior of run is unchanged aside from error presentation/serialization semantics.

Tests are updated to match the new module-qualified tags and the public PreviewAutomationBroker.make entry point.

Reviewed by Cursor Bugbot for commit c0c72a7. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Normalize process and preview Effect services to use namespaced exports and schema-based errors

  • Removes separate *Shape interfaces across ProcessRunner, PreviewManager, PortDiscovery, ExternalLauncher, and PreviewAutomationBroker, inlining service API types directly into Context.Service generics.
  • Exports make factories directly from each service module and removes __testing escape hatches, making make the standard construction path in tests and production.
  • Replaces effect/DataTaggedError with effect/SchemaTaggedErrorClass for all process error types, adding human-readable message strings that include command, args, cwd, and other context.
  • Switches unstable process imports from the barrel effect/unstable/process to explicit module paths effect/unstable/process/ChildProcess and effect/unstable/process/ChildProcessSpawner.
  • Behavioral Change: process error instances now expose customized message strings; any code that previously relied on default error message formatting will see different output.

Macroscope summarized c0c72a7.

@coderabbitai

coderabbitaiBot commented Jun 20, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 472e738d-d3b4-4210-b347-4cb6a0f4b349

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/effect-service-server-process-preview

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

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. labels Jun 20, 2026
@github-actions

github-actionsBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

🚀 Expo continuous deployment is ready!

  • Project → t3-code
  • Platforms → android, ios
  • Scheme → t3code-preview
🤖 Android🍎 iOS
Fingerprintfe5a51f2e189da69dfc4c2cd458e6cfb5fdff2eaae3bd597809dfd7771d0898f735d172973d4c1c8
Build DetailsBuild Permalink
DetailsDistribution: INTERNAL
Build profile: preview:dev
Runtime version: fe5a51f2e189da69dfc4c2cd458e6cfb5fdff2ea
App version: 0.1.0
Git commit: 1942ed85fe1559363b94339df832d7d33f84399c
Build Permalink
DetailsDistribution: INTERNAL
Build profile: preview:dev
Runtime version: ae3bd597809dfd7771d0898f735d172973d4c1c8
App version: 0.1.0
Git commit: b4706aa685da92ae179e34c97839c2a0e9840f09
Update DetailsUpdate Permalink
DetailsBranch: pr-3191
Runtime version: fe5a51f2e189da69dfc4c2cd458e6cfb5fdff2ea
Git commit: 8b22ef2a73b9f66fbcb383088a7f5bcb50b7f81e
Update Permalink
DetailsBranch: pr-3191
Runtime version: ae3bd597809dfd7771d0898f735d172973d4c1c8
Git commit: 8b22ef2a73b9f66fbcb383088a7f5bcb50b7f81e
Update QR

@juliusmarminge
juliusmarminge marked this pull request as ready for review June 20, 2026 02:06
macroscopeapp[bot]
macroscopeappBot previously approved these changes Jun 20, 2026
@macroscopeapp

macroscopeappBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Mechanical refactoring that normalizes Effect service definitions across the codebase. Changes are type-level (interface inlining, import style) and organizational (exporting make functions directly) with no runtime behavior changes.

You can customize Macroscope's approvability policy. Learn more.

@juliusmarminge
juliusmarmingeforce-pushed the codex/effect-service-server-process-preview branch from d7cdba3 to 60671a6CompareJune 20, 2026 02:43
@macroscopeapp
macroscopeappBot dismissed their stale reviewJune 20, 2026 02:43

Dismissing prior approval to re-evaluate 60671a6

macroscopeapp[bot]
macroscopeappBot previously approved these changes Jun 20, 2026
Co-authored-by: codex <codex@users.noreply.github.com>
@juliusmarminge
juliusmarmingeforce-pushed the codex/effect-service-server-process-preview branch from 60671a6 to c0c72a7CompareJune 20, 2026 03:26
@macroscopeapp
macroscopeappBot dismissed their stale reviewJune 20, 2026 03:26

Dismissing prior approval to re-evaluate c0c72a7

@juliusmarminge
juliusmarminge merged commit 5c1ac92 into mainJun 20, 2026
15 checks passed
@juliusmarminge
juliusmarminge deleted the codex/effect-service-server-process-preview branch June 20, 2026 04:09
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
darjss pushed a commit to darjss/t3code that referenced this pull request Aug 26, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@juliusmarminge