v1.2.0
Self-host hardening, operator docs site, multi-tenant workers, and release packaging (Helm OCI + SpaceXAI branding).
Added
- Documentation site — Docusaurus handbook at top-level
docs/(replaces flat markdown-only docs folder).
Product handbook: why Codesteward, Compose + Kubernetes quick start, install (Compose/Helm),
configure, product UI, pipeline, integrations, ops, security, FAQ. Theme aligned with product UI
(official brand assets); Cloudflare Workers viadocs/wrangler.toml. - Helm chart OCI publish on release —
helm package+helm pushto
oci://ghcr.io/codesteward/codesteward/charts/codesteward(version = product semver);.tgz
also attached to the GitHub Release. Docs: Kubernetes quick start + Helm install from GHCR. - Multi-tenant worker isolation — harden shared workers against cross-org clone reads
(path layout + tool jail + optional hard sandbox + claim affinity). See
docs/docs/ops/multi-tenant-workers.md.- Workspace layout:
{STEW_WORKSPACE_DIR}/{orgId}/{sessionId}
(STEW_TENANT_ISOLATION=pathdefault;offfor legacy flat paths). - Path jail on agent tools / packing (
packages/agents/src/path-jail.ts). STEW_TENANT_ISOLATION=strictprefers Docker/k8s sandbox (no host shell for agent tools).- Org-affine workers:
STEW_WORKER_ORG_IDSfilters Postgres job claim. - Graph scope: graph
tenant_id= productorgId; rebuildrepo_pathjailed to session workspace.
- Workspace layout:
- Platform queue republish — after optional broker (NATS/Rabbit/Pulsar) message loss,
platform operators rehydrate wake-up depth from Postgres via
GET/POST /v1/platform/queue(+/republish) or Settings → Platform ops → Job queue recovery. - Embedded Graph MCP in workers — removed standalone graph-mcp service; workers spawn
codesteward-mcp --transport stdio. Shared Neo4j/Janus viaGRAPH_BACKEND+NEO4J_URI
(tenant_id = product orgId). No shared clone PVC between graph and workers.
Changed
- SpaceXAI rebrand — user-facing "xAI" renamed to SpaceXAI (docs, UI Models, CLI doctor).
Env: preferSPACEXAI_API_KEY(legacyXAI_API_KEYstill accepted). Provider idxaikept for
stored configs; aliasspacexaiaccepted in the model router. API host remainsapi.x.aiuntil
upstream changes. - Default container images — Helm defaults use
ghcr.io/codesteward/codesteward(+/ui,/keycloak). - Models — removed unrealistic per-stage env
apiKeyRefUI/API surface; org provider keys remain BYOK.
Fixed
- CI —
require-toolstest importsafterfromnode:test; zizmor template-injection in
Keycloak base-update workflow (inputs via env);serialize-javascriptoverride for docs/Docusaurus
HIGH advisory; Hadolint onDockerfile.node(DL3008 ignore placement + merge consecutive RUNs).
Upgrade notes
- Pull images / chart for 1.2.0:
Or from git:
helm upgrade --install codesteward oci://ghcr.io/codesteward/codesteward/charts/codesteward \ --version 1.2.0 \ --set image.tag=1.2.0 \ --set ui.image.tag=1.2.0
./deploy/helm/codestewardwith image tags1.2.0. - Set
SPACEXAI_API_KEYif you used Grok/XAI_API_KEY(legacy env still works). - Multi-tenant production: review
STEW_TENANT_ISOLATIONand optionalSTEW_WORKER_ORG_IDS
(docs/docs/ops/multi-tenant-workers.md). - Graph: no standalone graph-mcp Deployment — workers embed MCP; point
GRAPH_BACKEND+ Neo4j/Janus as needed. - Optional broker: after broker data loss, use Platform ops Republish pending or
POST /v1/platform/queue/republish.
Container images
docker pull ghcr.io/codesteward/codesteward:1.2.0
docker pull ghcr.io/codesteward/codesteward/ui:1.2.0
docker pull ghcr.io/codesteward/codesteward/keycloak:26.7.0 # tag = upstream Keycloak, not product 1.2.0App image runs API by default (SERVICE=api). Worker:
docker run --rm -e SERVICE=worker ghcr.io/codesteward/codesteward:1.2.0Keycloak image tags match upstream Keycloak (theme + realm baked in; no git mounts):
docker run --rm -p 8083:8083 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin \
ghcr.io/codesteward/codesteward/keycloak:26.7.0 start-dev --import-realm --http-port=8083Helm chart (OCI on GHCR)
helm install codesteward oci://ghcr.io/codesteward/codesteward/charts/codesteward --version 1.2.0
# or: helm pull oci://ghcr.io/codesteward/codesteward/charts/codesteward --version 1.2.0Chart package is also attached to this release as codesteward-1.2.0.tgz.
Docs: Kubernetes quick start in the product documentation site.
Images are signed with cosign keyless via GitHub OIDC.
Verify with:
cosign verify ghcr.io/codesteward/codesteward:1.2.0 \
--certificate-identity-regexp 'https://github.com/Codesteward/codesteward/.*' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com