Skip to content

Package Relaycast self-host image for Ratify federation - #317

Merged
khaliqgant merged 8 commits into
mainfrom
feat/ratify-self-host-container
Aug 10, 2026
Merged

Package Relaycast self-host image for Ratify federation#317
khaliqgant merged 8 commits into
mainfrom
feat/ratify-self-host-container

Conversation

@khaliqgant

@khaliqgant khaliqgant commented Aug 9, 2026

Copy link
Copy Markdown
Member

Summary

  • build a non-root self-host image from the digest-pinned, multi-platform node:22.23.2-bookworm-slim base
  • install exact @relaycast/engine@7.0.0, force the native better-sqlite3 source build, and fail the build if package and image version metadata drift
  • refuse startup unless --base-url is provided exactly once as an HTTPS, multi-label public DNS origin with valid bounded labels; .local, .localhost, all IP literals, loopback authorities, and malformed option-value layouts fail before opening a socket
  • make the executable entrypoint unconditional, so symlink invocation cannot silently bypass validation
  • normalize the Node adapter's tunnel-side request authority to that validated public HTTPS origin, preventing agent cards from advertising a plaintext loopback-derived RPC URL
  • persist SQLite and uploaded files in a project-scoped named volume with a semantic JSON healthcheck
  • add a Ratify-owned runbook for build/run, Cloudflare named-tunnel TLS, guarded bootstrap, health, backup, and teardown
  • build and boot the real image under linux/amd64 and linux/arm64 PR CI, with bounded refusal and accepted-origin controls

Federation version parity

This image pins engine 7.0.0.

Hosted cast.agentrelay.com is also confirmed on engine 7.0.0: the private AgentWorkforce/relaycast-cloud lockfile resolves 7.0.0, and its 7.0.0 rebundle commit 599e4163d7c74f3fb284efd4b048998bb20945a1 completed the production SST deploy successfully in run 31211768363.

The hosted /health response says version: 1.0.0; that is the gateway application version, not the engine dependency. The runbook prevents operators from using that field as skew evidence.

Release gate: standard A2A discovery

Published engine 7.0.0 has a production-confirmed discovery defect. On a three-label host, bare GET /.well-known/agent-card.json treats the first host label as the workspace name, and host inference also shadows the documented path-param form. The explicit ?workspace=ratify-protocol form works, but it is not the standard bare discovery URL a counterparty will try.

The source fix now exists in PR #318 at commit d5dcc954597c274e6e9cc87391f30e51a9f4f46a, but its package still reports 7.0.0 and it is not published or deployed. A stock published 7.0.0 artifact cannot contain it.

The runbook keeps Ratify's meaningful workspace name and documents the query form only as an interim operator check. Do not hand this image to Ratify as federation-ready until either:

  1. the resolver fix is published under a new exact engine version and that version is deployed at both ends; or
  2. an explicit rehearsal decision deploys the exact same source commit at both ends and records the commit identity in addition to semver.

A self-host-only overlay would create the version skew this package is designed to prevent.

Validation

  • npm run test:container: 14/14 pass; every test contains an inverse control, including .local, IPv4, IPv6, malformed DNS labels, and symlink-invocation regressions
  • real image smoke: required invalid authorities and malformed option layouts exit 64; the valid Ratify origin starts engine 7.0.0, returns { "ok": true }, and advertises https://relay.ratifyprotocol.com/a2a/rpc even when its tunnel-side request has a deliberately wrong HTTP authority
  • final PR matrix run 31340962476:
    • linux/amd64: pass in 1m51s
    • linux/arm64: pass in 10m12s
    • both legs compiled and queried native SQLite, loaded and booted the image, ran bounded refusal controls for missing, plaintext, single-label, malformed-label, .local, .localhost, loopback, IPv4, IPv6, and malformed arguments, checked package/label version equality, validated semantic health, created the Ratify workspace, and checked the HTTPS agent-card RPC URL
  • docker compose up --build --wait: pass under the read-only/capability-dropped configuration; project-scoped volume, database, file directory, and health state verified
  • npx turbo lint: pass
  • npx turbo test under Node 22: 18/18 Turbo tasks pass
  • npx turbo build under Node 22: 9/9 tasks pass
  • Hadolint, Actionlint, Compose config, diff/secret checks, Cloudflare ingress rule validation, and automated PR review findings: pass/addressed

Operational notes

  • Engine 7.0.0 leaves initial POST /v1/workspaces unauthenticated. The runbook bootstraps locally before exposure and blocks that exact public path at cloudflared; omitting the block would permit storage abuse.
  • Self-host remains deliberately single-tenant, single-process, and not horizontally scalable as shipped.
  • The image lockfile audit reports the upstream @hono/node-server Windows encoded-backslash advisory (moderate, no compatible upstream fix). This image supports Linux only, so that Windows-only path traversal is not applicable to the delivered runtime.
  • Veto MCP commands required by repository guidance were not exposed in this worker session; equivalent local diff, secret, lint, build, test, real-image, and CI gates were run instead.

No image is published and nothing is deployed or merged by this PR.

@cursor

cursor Bot commented Aug 9, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@coderabbitai

coderabbitai Bot commented Aug 9, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@khaliqgant, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 18 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: ad70cd28-e3cb-4950-90b4-83506755b1e6

📥 Commits

Reviewing files that changed from the base of the PR and between cb6e2b8 and 06bc496.

📒 Files selected for processing (8)
  • .github/workflows/ci.yml
  • CHANGELOG.md
  • Dockerfile
  • RUNBOOK.md
  • docker/entrypoint-core.mjs
  • docker/entrypoint.mjs
  • docs/self-hosting.md
  • test/container-entrypoint.test.mjs
📝 Walkthrough

Walkthrough

Adds a pinned, multi-architecture Relaycast container deployment. The change includes HTTPS base URL validation, Docker Compose configuration, persistent storage, operational procedures, entrypoint tests, and CI checks for container tests and ARM64/AMD64 builds.

Changes

Container deployment

Layer / File(s) Summary
Container image packaging
.dockerignore, docker/package.json, Dockerfile
Adds a multi-stage Node image with locked production installation, native SQLite validation, persistent data paths, port configuration, and non-root execution.
Entrypoint validation and tests
docker/entrypoint.mjs, package.json, test/container-entrypoint.test.mjs
Validates HTTPS origin-only base URLs, normalizes engine arguments, rewrites public request authority, handles shutdown, and tests accepted and rejected configurations.
Compose deployment wiring
docker-compose.yml, docs/self-hosting.md
Adds Compose build and runtime settings, persistent storage, health checks, security restrictions, and updated self-hosting instructions.
Operations and automated verification
.github/workflows/*, RUNBOOK.md, CHANGELOG.md
Adds container tests, AMD64 and ARM64 image checks, deployment procedures, tunnel configuration, backups, upgrades, teardown steps, and release notes.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

Suggested labels: size:L

Sequence Diagram(s)

sequenceDiagram
  participant DockerCompose
  participant Entrypoint
  participant RelaycastEngine
  participant HealthCheck
  DockerCompose->>Entrypoint: Start with RELAYCAST_BASE_URL
  Entrypoint->>Entrypoint: Validate HTTPS origin
  Entrypoint->>RelaycastEngine: Launch with normalized arguments
  HealthCheck->>RelaycastEngine: Request health endpoint
  RelaycastEngine-->>HealthCheck: Return health status
Loading

Poem

I’m a rabbit in a container neat,
With HTTPS guards beneath my feet.
Compose stores my carrots bright,
Health checks watch me through the night.
ARM and AMD share the lane—
Hop, deploy, and run again! 🐇

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Linked Issues check ❓ Inconclusive The description links related workflow runs and an upstream pull request, but no issue-linking requirement is provided. Provide the repository requirement for linked issues or confirm that no issue link is required.
✅ Passed checks (3 passed)
Check name Status Explanation
Out of Scope Changes check ✅ Passed The Docker image, entrypoint, Compose configuration, runbook, tests, and CI changes support the stated self-hosting objective.
Title check ✅ Passed The title clearly summarizes the primary change: packaging a Relaycast self-host image for Ratify federation.
Description check ✅ Passed The description directly explains the container image, federation safeguards, runbook, CI validation, and operational limitations.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/ratify-self-host-container

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@devin-ai-integration devin-ai-integration 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.

Devin Review found 1 potential issue.

View 1 additional finding in Devin Review.

Open in Devin Review

Comment thread CHANGELOG.md Outdated
Packages without a separate changelog are covered by the cross-package notes below.

## [Unreleased]
## [Unreleased - Patch]

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 Release notes label a new feature as a patch-level release

The pending release heading is set to patch level (## [Unreleased - Patch] at CHANGELOG.md:19) even though the entry below it is an ### Added new-feature note, so the next release would be cut at the wrong version level.
Impact: Consumers see a new capability shipped under a patch version bump, contradicting the project's stated versioning promise.

Changelog release-level rule in AGENTS.md

AGENTS.md requires: "The first pending user-visible change must set the heading to [Unreleased - Patch], [Unreleased - Minor], or [Unreleased - Major] according to its SemVer impact." The only pending entry is an addition (a new self-host container/Compose deployment path), which is a minor-level change under SemVer, not a patch. The publish workflow (scripts/cut-changelog.mjs) uses this heading to derive the release level.

Suggested change
## [Unreleased - Patch]
## [Unreleased - Minor]
Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a39a9d0d83

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread CHANGELOG.md Outdated
Packages without a separate changelog are covered by the cross-package notes below.

## [Unreleased]
## [Unreleased - Patch]

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Mark the new container feature as a minor release

This commit adds a new user-visible deployment capability—a supported multi-architecture container, Compose configuration, and operations runbook—rather than merely fixing existing behavior. Classifying it as Patch understates its SemVer impact and can allow the next release to be cut with the wrong bump; change this pending heading to [Unreleased - Minor].

AGENTS.md reference: AGENTS.md:L38-L41

Useful? React with 👍 / 👎.

@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: 8

🤖 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 @.github/workflows/ci.yml:
- Line 38: Update the actions/checkout@v4 step in the CI workflow to set
persist-credentials to false, ensuring the checkout does not retain GITHUB_TOKEN
credentials for subsequent steps.
- Around line 27-30: Update the container job configuration in the CI workflow
to set its default permissions to contents: read, ensuring run-only steps do not
inherit write access while preserving the existing container settings.

In `@CHANGELOG.md`:
- Around line 19-23: Update the changelog heading from “[Unreleased - Patch]” to
“[Unreleased - Minor]” to classify the new user-facing self-host deployment
capability as a feature addition, leaving the added entry unchanged.

In `@docker-compose.yml`:
- Around line 35-37: Update the relaycast-data volume declaration to avoid the
explicit unscoped name, allowing Docker Compose to apply project scoping; only
use an external pre-created volume if the deployment requires it, and then
document its creation and usage in RUNBOOK.md.
- Around line 23-28: Update the healthcheck command in the healthcheck
configuration to parse the `/health` response body and require `body.ok ===
true`, while retaining failure handling for non-OK HTTP responses and request
errors. Keep the implementation aligned with the documented contract in
RUNBOOK.md.

In `@docker/entrypoint.mjs`:
- Around line 119-152: Update validatedEngineArgs to reject any second
--base-url occurrence before appending or validating it, covering both
separate-value and --base-url= forms; preserve the existing missing-value
refusal and single-value validation behavior, and add a regression test for
mixed valid and invalid duplicate options.

In `@docs/self-hosting.md`:
- Around line 201-204: Use non-destructive .env setup in both documented paths:
in docs/self-hosting.md lines 201-204, guard creation before writing
RELAYCAST_BASE_URL; in RUNBOOK.md lines 40-44, apply the same guard before
writing RELAYCAST_BASE_URL and RELAYCAST_PORT, preserving existing Compose
settings instead of overwriting them.
- Around line 219-223: Update the upgrade guidance to keep the repository image
tag synchronized with docker-compose.yml at the new version, and instruct
updating the installed engine-version check to that same version as documented
in RUNBOOK.md. Preserve the existing migration and federation-peer guidance.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 77970e07-95dc-4ab8-b712-fd1b5ef125c4

📥 Commits

Reviewing files that changed from the base of the PR and between eb7563f and a39a9d0.

⛔ Files ignored due to path filters (1)
  • docker/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (12)
  • .dockerignore
  • .github/workflows/ci.yml
  • .github/workflows/deploy.yml
  • CHANGELOG.md
  • Dockerfile
  • RUNBOOK.md
  • docker-compose.yml
  • docker/entrypoint.mjs
  • docker/package.json
  • docs/self-hosting.md
  • package.json
  • test/container-entrypoint.test.mjs

Comment thread .github/workflows/ci.yml Outdated
Comment thread .github/workflows/ci.yml
Comment thread CHANGELOG.md Outdated
Comment thread docker-compose.yml Outdated
Comment thread docker-compose.yml Outdated
Comment thread docker/entrypoint.mjs Outdated
Comment thread docs/self-hosting.md
Comment thread docs/self-hosting.md

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

2 issues found across 13 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="docs/self-hosting.md">

<violation number="1" location="docs/self-hosting.md:220">
P3: The image's engine version is pinned in more places than the doc suggests, so following the upgrade instruction alone leaves tags/labels stale. Besides `docker/package.json` (dep + `version`), the version is also hardcoded in `Dockerfile`'s `org.opencontainers.image.version`/`io.relaycast.engine.version` LABELs and in `docker-compose.yml`'s `image: relaycast-self-host:7.0.0`, so bumping only the engine dep + lockfile produces a rebuilt image still tagged `relaycast-self-host:7.0.0` and labeled 7.0.0. Consider listing all the version-pin locations that must be updated together so the rebuild is self-consistent.</violation>
</file>

<file name="Dockerfile">

<violation number="1" location="Dockerfile:29">
P3: The engine version 7.0.0 is repeated in four places (Dockerfile LABELs, the compose `image:` tag, and docker/package.json version) so it must be bumped in lockstep manually. On a future engine upgrade, it's easy to update `@relaycast/engine` and the lockfile but forget the LABELs and image tag, leaving image metadata and the compose tag asserting a version that no longer matches the shipped engine. Since the runbook and health meta deliberately surface this version string, centralizing it (e.g., `ARG RELAYCAST_ENGINE_VERSION`/`ENV` read from one source, or deriving the tag) would remove the drift risk.</violation>
</file>

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

Comment thread .github/workflows/ci.yml
Comment thread docs/self-hosting.md
then restart. New migrations apply automatically on boot; already-applied ones
are skipped.
- **Upgrade**: for a global install, run
`npm install -g @relaycast/engine@<tested-version>`. For the repository image,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P3: The image's engine version is pinned in more places than the doc suggests, so following the upgrade instruction alone leaves tags/labels stale. Besides docker/package.json (dep + version), the version is also hardcoded in Dockerfile's org.opencontainers.image.version/io.relaycast.engine.version LABELs and in docker-compose.yml's image: relaycast-self-host:7.0.0, so bumping only the engine dep + lockfile produces a rebuilt image still tagged relaycast-self-host:7.0.0 and labeled 7.0.0. Consider listing all the version-pin locations that must be updated together so the rebuild is self-consistent.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At docs/self-hosting.md, line 220:

<comment>The image's engine version is pinned in more places than the doc suggests, so following the upgrade instruction alone leaves tags/labels stale. Besides `docker/package.json` (dep + `version`), the version is also hardcoded in `Dockerfile`'s `org.opencontainers.image.version`/`io.relaycast.engine.version` LABELs and in `docker-compose.yml`'s `image: relaycast-self-host:7.0.0`, so bumping only the engine dep + lockfile produces a rebuilt image still tagged `relaycast-self-host:7.0.0` and labeled 7.0.0. Consider listing all the version-pin locations that must be updated together so the rebuild is self-consistent.</comment>

<file context>
@@ -195,34 +195,32 @@ WorkingDirectory=/var/lib/relaycast
-  then restart. New migrations apply automatically on boot; already-applied ones
-  are skipped.
+- **Upgrade**: for a global install, run
+  `npm install -g @relaycast/engine@<tested-version>`. For the repository image,
+  update the exact engine version and lockfile only after confirming federation
+  peers use the same version, then rebuild. New migrations apply automatically
</file context>

Comment thread Dockerfile Outdated
org.opencontainers.image.description="Single-process Relaycast engine with SQLite persistence" \
org.opencontainers.image.source="https://github.com/AgentWorkforce/relaycast" \
org.opencontainers.image.version="7.0.0" \
io.relaycast.engine.version="7.0.0"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P3: The engine version 7.0.0 is repeated in four places (Dockerfile LABELs, the compose image: tag, and docker/package.json version) so it must be bumped in lockstep manually. On a future engine upgrade, it's easy to update @relaycast/engine and the lockfile but forget the LABELs and image tag, leaving image metadata and the compose tag asserting a version that no longer matches the shipped engine. Since the runbook and health meta deliberately surface this version string, centralizing it (e.g., ARG RELAYCAST_ENGINE_VERSION/ENV read from one source, or deriving the tag) would remove the drift risk.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At Dockerfile, line 29:

<comment>The engine version 7.0.0 is repeated in four places (Dockerfile LABELs, the compose `image:` tag, and docker/package.json version) so it must be bumped in lockstep manually. On a future engine upgrade, it's easy to update `@relaycast/engine` and the lockfile but forget the LABELs and image tag, leaving image metadata and the compose tag asserting a version that no longer matches the shipped engine. Since the runbook and health meta deliberately surface this version string, centralizing it (e.g., `ARG RELAYCAST_ENGINE_VERSION`/`ENV` read from one source, or deriving the tag) would remove the drift risk.</comment>

<file context>
@@ -0,0 +1,46 @@
+      org.opencontainers.image.description="Single-process Relaycast engine with SQLite persistence" \
+      org.opencontainers.image.source="https://github.com/AgentWorkforce/relaycast" \
+      org.opencontainers.image.version="7.0.0" \
+      io.relaycast.engine.version="7.0.0"
+
+ENV NODE_ENV=production \
</file context>

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

All reported issues were addressed across 8 files (changes from recent commits).

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

Comment thread docker/entrypoint.mjs Outdated
Comment thread docker/entrypoint.mjs Outdated

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

All reported issues were addressed across 3 files (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread docker/entrypoint.mjs 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

🤖 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 @.github/workflows/ci.yml:
- Around line 64-70: Update the assert_refused helper to wrap the docker run
command with timeout, using a short test-appropriate duration so regressions
that start the server fail promptly while preserving the existing refusal.log
capture and refusal-message validation.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 2679db02-f95a-4ea7-886a-35c920c1639d

📥 Commits

Reviewing files that changed from the base of the PR and between a39a9d0 and cb6e2b8.

📒 Files selected for processing (8)
  • .github/workflows/ci.yml
  • CHANGELOG.md
  • Dockerfile
  • RUNBOOK.md
  • docker-compose.yml
  • docker/entrypoint.mjs
  • docs/self-hosting.md
  • test/container-entrypoint.test.mjs
🚧 Files skipped from review as they are similar to previous changes (3)
  • docker-compose.yml
  • CHANGELOG.md
  • docs/self-hosting.md

Comment thread .github/workflows/ci.yml

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

All reported issues were addressed across 7 files (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread docker/entrypoint-core.mjs
@khaliqgant
khaliqgant force-pushed the feat/ratify-self-host-container branch from 26553f7 to 06bc496 Compare August 10, 2026 14:03
@khaliqgant
khaliqgant merged commit 639d654 into main Aug 10, 2026
7 checks passed
@khaliqgant
khaliqgant deleted the feat/ratify-self-host-container branch August 10, 2026 14:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant