Releases: Codesteward/codesteward
Release list
v1.5.0
Product session traces (ClickHouse), pull-only deploy stack, DeepAgents/workspace reliability, Graph MCP stdio
fixes, and unified-diff proposed fixes for SCM comments.
Added
- Platform ClickHouse product traces — optional install-wide sink (Platform settings). When enabled, every
org dual-writes full session observations (agents, tools, LLM I/O, metadata; secret-redacted, no normal truncation)
for session deep-dive + analytics. Orgs cannot disable ingestion; they may only override TTL days
(GET/PUT /v1/org/trace-ttl). Read paths:GET /v1/org/trace-storage,GET /v1/org/traces/sessions,
GET /v1/sessions/:id/traces. Env:CLICKHOUSE_URL,CLICKHOUSE_USER,CLICKHOUSE_PASSWORD,
CLICKHOUSE_DATABASE,STEW_CLICKHOUSE_DEFAULT_TTL_DAYS. - Traces UI — org-scoped Traces nav (any tenant member when ClickHouse is enabled): list sessions with
stored observations, expand generations / tools / spans with readable I/O (raw JSON optional). Collapsible
help for event types and LangChain internals (RunnableSequence,RunnableLambda, graph spans). - ClickHouse compose overlay —
deploy/compose/docker-compose.clickhouse.yml(+clickhouse/config.d) for
local product-trace testing; configure the sink in Platform → ClickHouse (no preferred env wire file). - Pull-only stack — standalone
deploy/compose/docker-compose.stack.yml(optional
docker-compose.stack.swarm.ymlfor Swarm): published GHCR images, no monorepo / no build. - Re-review GitHub thread resolve — when lifecycle marks prior findings
fixed(fingerprint gone after a new
push/session), resolve matching PR review threads via GraphQL whenscmCommentId/ fingerprint / finding markers
match. Disable withSTEW_RESOLVE_FIXED_THREADS=0. - Org Analytics — token totals, average tokens per session, estimated total cost, and average cost per session
(from sessiontokenUsage/ list-price estimates). - Langfuse dual-write / sticky session IDs — full agent + subagent turns dual-written with product
sessionId
(org + platform destinations); specialist trace ids scoped per unit/role for parallel runs.
Changed
- Proposed fixes are always unified git diffs — specialists are prompted for unified-diff
suggestedFix;
extract normalizes plain snippets →---/+++/@@hunks; PR comments, session reports, and Findings UI always
render Proposed fix as a```difffence (Context blocks still use path language, e.g.go/ts).
Fixes GH comment parsers that previously saw language-tagged fences around diff-shaped bodies. - PR finding Context blocks continue to use GFM language tags from the file path for non-fix snippets.
- Finding status mix labels are humanized (
false_positive→ “False positive”). - DeepAgents review filesystem —
FilesystemBackendrooted on the unit clone (virtualMode), path jail +
host/cross-repo rewrite, empty permissions (avoidspath must be absolutekills), read-only write/edit refuse,
sandbox tools jailed to unit cwd, prompts no longer leak hostrepoPath. - Worker Graph MCP — default
GRAPH_MCP_COMMAND=/opt/graph-venv/bin/codesteward-mcp; image installs uv CPython
underUV_PYTHON_INSTALL_DIR=/opt/uv-python(readable by uid 1001); entrypoint opens legacy/root/.local/share/uv
when needed; stdio protocol is NDJSON (not Content-Length) forcodesteward-mcp.
Fixed
- DeepAgents empty filesystem tools — built-in
ls/read_file/glob/grepbound to the review clone
instead of an empty in-memory FS;sandbox_ls/ smartersandbox_read; cross-repo mistaken host paths
(workspace/local/ses_…/cross/…) rewritten or refused. - DeepAgents
path must be absolute: "."— non-empty DeepAgentspermissionsforced absolute paths before
our normalizer and aborted specialists underSTEW_REQUIRE_TOOL_AGENTS. Permissions cleared; jail/read-only
enforced in the review backend. - Graph MCP
spawn … EACCESas steward — uv CPython lived under mode-700/root; shebang could not load
libpythonafter privilege drop. Fixed install path + entrypoint chmod. - Worker not claiming jobs after Graph MCP hang — Content-Length framing broke
codesteward-mcpNDJSON
init; worker never entered dequeue. NDJSON write/parse + short init timeout; job loop starts even if graph soft-fails. - Cross-repo specialist path probing — unit-rooted tools + prompt/metadata host-path redaction so agents do not
lssession tree prefixes relative to the linked clone.
Upgrade notes
- Pull images / chart for 1.5.0:
helm upgrade --install codesteward oci://ghcr.io/codesteward/codesteward/charts/codesteward \ --version 1.5.0 \ --set image.tag=1.5.0 \ --set ui.image.tag=1.5.0
- Optional product traces: deploy ClickHouse (or managed), set platform ClickHouse in UI, or compose
docker-compose.clickhouse.yml. Members see Traces when the sink is enabled. - Workers: rebuild so Graph MCP binary + NDJSON client ship; confirm logs show
[graph-mcp] stdio session readythen[worker] starting Codesteward review worker. - Suggested code fixes: existing DB rows may still store plain snippets; new extracts + PR publish always
emit unified```difffor proposed fixes.
Container images
docker pull ghcr.io/codesteward/codesteward:1.5.0
docker pull ghcr.io/codesteward/codesteward/ui:1.5.0
docker pull ghcr.io/codesteward/codesteward/keycloak:26.7.0 # tag = upstream Keycloak, not product 1.5.0App image runs API by default (SERVICE=api). Worker:
docker run --rm -e SERVICE=worker ghcr.io/codesteward/codesteward:1.5.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.5.0
# or: helm pull oci://ghcr.io/codesteward/codesteward/charts/codesteward --version 1.5.0Chart package is also attached to this release as codesteward-1.5.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.5.0 \
--certificate-identity-regexp 'https://github.com/Codesteward/codesteward/.*' \
--certificate-oidc-issuer https://token.actions.githubusercontent.comv1.4.0
Indirect eval / outcome loop, reliable GitHub App multi-install gate reviews, PR status + republish, and per-finding SCM comments.
Added
- Automatic / indirect eval (outcome loop) — learn from what users and merges actually do:
- Merge webhooks (GitHub
closed+merged, GitLabmerge) enqueuejobKind=pr_outcome(no agent pipeline) - Classifies findings: accepted / fixed / thumbs_up / false_positive / dismissed / unaddressed_at_merge
- Mines agent-miss candidates on sensitive paths changed with no finding
- Gate regret: approve+critical open, or request_changes+only noise
- Durable
pr_outcomes+finding_outcomes(migration015_review_outcomes.sqlor file store) - 👍 creates positive preference memories (mirrors 👎 suppress)
- Preference bag-of-words embeddings filter in noise stack (near 👎 → drop)
- Analytics: split fixAcceptRate / noiseRate / openRate + confidence calibration
(GET /v1/analytics/address-rate,/v1/analytics/outcomes,/eval-export) - Offline eval harness consumes production outcome fixtures (
packages/evals) - Outcome consolidator — promote frequent merge outcomes to memories with correct scope:
repo-only common → repo memory; multi-repo or important (critical/high / gate regret) → org memory.
POST /v1/analytics/outcomes/consolidate; also runs after each merge outcome job.
Sourceoutcome_aggregate(auditable on Learnings). No longer writes a repo memory on every single accept. - Docs — GitHub App / GitLab webhook events for gate + merge outcomes (
docs/docs/configure/connectors.md, README). - GitHub
pull_request_review_thread— resolved/unresolved maps comment ids → findings (scmCommentId), writes
thread_resolved/thread_unresolvedoutcomes, soft status tags, consolidator feed. - GitHub
security_advisory(+ repository_advisory) — external GHSA →security_advisoryoutcome + soft pattern
memory for coverage / FN; optional org promotion when severity is high. - Manifest defaults include
pull_request_review_threadandsecurity_advisory.
- Merge webhooks (GitHub
- PR status comments — webhook-triggered reviews post a progress comment on the PR (“Reviewing / Re-reviewing now…”),
then update it on prepare failure, crash (exhausted retries), or successful completion so GitHub-only readers are not stuck. - Republish to PR — post findings for a finished gate session without re-running agents:
POST /v1/sessions/:id/publish(reviewer+)- Sessions UI drawer action Republish to PR
- Diff-aware inline comments + conversation fallbacks with full finding body (suggestion / proposed fix)
Changed
- SCM publish posts per-finding PR comments with UI-style bodies (severity, path, explanation, suggestion, proposed fix),
not only a summary review. Default cap raised to 40 findings (STEW_COMMENT_CAP). - Display brand in PR summary / gate check titles: Codesteward (not “CodeSteward”).
- Gate review jobs carry
headBranchfor clone/checkout of the PR tip (not base).
Fixed
- GitHub webhook redeliver — same
X-GitHub-Deliveryid is reprocessed afterprocessed/failed(or stale
received), instead of always returning{ duplicate: true }with no new session. Concurrent in-flight claims
still dedupe (~2 min,STEW_WEBHOOK_CLAIM_STALE_MS). - Multi-install GitHub App token pick — mint installation tokens for the repo owner (e.g.
scigility) instead of a
stale connectoraccountLogin: localinstall. Applied to webhook SCM, clone auth, check runs, publish, and republish.
Fixes clone “Repository not found”,getPullRequest404 on mentions, andpostReview404 after a successful review. - Workspace clone checkout —
git checkout --force -- <sha>treated the SHA as a pathspec and failed with
pathspec '…' did not match any file(s) known to git. Checkout now usesswitch --detach/checkout -f <ref>;
fetch fallbacks includepull/<n>/head, head branch, then object id. - PR review comments 422 “Line could not be resolved” — only attach inline comments to lines present in PR diff hunks;
other findings become conversation comments so they are not dropped when a batch fails. - Stuck “Re-reviewing now” comment — completion path now updates the status comment (and notes when SCM publish failed).
- Webhook delivery logging — outcomes (ignored reason, session/job ids, publish errors) written to logs / delivery row
so redeliver forensics is not silent.
Container images
docker pull ghcr.io/codesteward/codesteward:1.4.0
docker pull ghcr.io/codesteward/codesteward/ui:1.4.0
docker pull ghcr.io/codesteward/codesteward/keycloak:26.7.0 # tag = upstream Keycloak, not product 1.4.0App image runs API by default (SERVICE=api). Worker:
docker run --rm -e SERVICE=worker ghcr.io/codesteward/codesteward:1.4.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.4.0
# or: helm pull oci://ghcr.io/codesteward/codesteward/charts/codesteward --version 1.4.0Chart package is also attached to this release as codesteward-1.4.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.4.0 \
--certificate-identity-regexp 'https://github.com/Codesteward/codesteward/.*' \
--certificate-oidc-issuer https://token.actions.githubusercontent.comv1.3.0
Cloud one-click trial deploys, first-review product tour, and Scorecard publish fix.
Added
- First-review product tour — guided spotlight walkthrough (driver.js) after first login:
Models → Connectors → Gate → Findings. Completion/skip dual-written tousers.preferences
(productTour.firstReviewStatus) and browser localStorage (hard-refresh safe); replay from
Account → Replay product tour. Closing mid-tour (X) toasts how to restart.
Migration014_user_preferences.sql;PATCH /v1/auth/me/preferences(all signed-in roles).
Popover follows light/dark theme tokens. - Cloud one-click trial deploys — shared single-VM stack under
deploy/cloud/
(nginx edge HTTPS + Keycloak OIDC + API/worker/UI + Postgres). No LLM key at install (Models UI).
Self-signed TLS by default (PKCE /crypto.subtle); optionalDOMAINfor cert CN.- AWS CloudFormation Launch Stack (
deploy/cloud/aws/) - Azure Bicep/ARM Deploy (
deploy/cloud/azure/) - GCP Cloud Shell +
gcloud(deploy/cloud/gcp/) - DigitalOcean Marketplace 1-Click vendor assets (
deploy/cloud/do/)
- AWS CloudFormation Launch Stack (
Fixed
- Cloud trial deploys (
deploy/cloud/): production-shaped single-VM path hardened after Azure pilot:- nginx edge (HTTPS self-signed) instead of Traefik (Docker Engine 29 API incompatibility)
- SPA OIDC: ignore bake-time localhost issuer off-loopback; empty UI Dockerfile OIDC defaults
- nginx routes
/auth/callbackto UI (Keycloak is under/auth/*) - Keycloak Admin issuer parse supports path-based
/auth/realms/...(org create) - first-boot: quoted
.env, IaC placeholder sanitization, Azure IMDS, always-HTTPS for PKCE - Azure cloud-init via Bicep
format()+ NSG on NIC
- Product tour UX — sidebar nav scroll for Models/Connectors; step counter no longer resets on
SPA navigation; “Configure a provider” targets provider API keys (not the stage matrix);
dark-mode button hover contrast on popover controls. - CI — OpenSSF Scorecard job uses only
uses:steps whenpublish_results: true(OpenSSF
workflow verification; shell retry steps caused 400 “scorecard job must only have steps with uses”). - Code scanning — pin Docker base images and Keycloak workflow actions by digest/SHA;
Confluence HTML strip handles</script…>end tags; git clone SHA fetch restricted to object ids +
checkout --; remove empty Keycloak password field from Helm values; drop unused locals flagged by CodeQL.
Container images
docker pull ghcr.io/codesteward/codesteward:1.3.0
docker pull ghcr.io/codesteward/codesteward/ui:1.3.0
docker pull ghcr.io/codesteward/codesteward/keycloak:26.7.0 # tag = upstream Keycloak, not product 1.3.0App image runs API by default (SERVICE=api). Worker:
docker run --rm -e SERVICE=worker ghcr.io/codesteward/codesteward:1.3.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.3.0
# or: helm pull oci://ghcr.io/codesteward/codesteward/charts/codesteward --version 1.3.0Chart package is also attached to this release as codesteward-1.3.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.3.0 \
--certificate-identity-regexp 'https://github.com/Codesteward/codesteward/.*' \
--certificate-oidc-issuer https://token.actions.githubusercontent.comv1.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.comv1.1.0
Post–1.0.0 release: parallel review pipeline hardening, install-wide ops visibility, findings quality, security triage, and product docs with UI screenshots.
Added
- Parallel specialists + structured rationale → senior verifier — roles on a unit always run
concurrently (Promise.all) with a barrier before the next stage; findings may carry
reasoning(plusevidence.type=reasoning). Verifier is a principal-SWE batch pass
(keep/drop/severity) using rationale + packed context. Migration013_finding_reasoning.sql. - Session timing ledger —
session.audit.timings/metadata.timings: wall clock per pipeline
stage, per unit, rollups (longest stage/unit/specialist,byStageMs, tool time). Session report
Timing / bottlenecks section; worker logsstage=X done …+ end-of-job summary. - Live specialist heartbeats — SSE
specialist_runstarted / running (interval
STEW_SPECIALIST_HEARTBEAT_MS, default 15s) / completed / failed. Session blade Live specialists
banner with per-role elapsed timers. - Platform ops analytics —
GET /v1/platform/analytics?days=N(platform operators) for
install-wide success rate, p50/p95 latency, stage averages, specialist role stats, worker queue,
tokens. UI: Settings → Platform ops (/settings/platform/ops). Distinct from tenant Analytics. - GitHub Code Scanning SARIF upload — PR gate publishes via
code-scanning/sarifs(gzip+base64).
STEW_PUBLISH_SARIF(env → platform runtime → org → default On). Requires code scanning enabled
andsecurity_events: write. - Three-level finding confidence — product
confidence, specialistmodelConfidence,
optionaltokenConfidence(logprobs). UI/SARIF/suggested-fix gate use product confidence.
Migration012_finding_confidence_layers.sql. - Suggested code fixes —
suggestedFix/suggestion/existingCodeon findings; Findings UI,
reports, SARIF, PR comments. Min confidence gateSTEW_SUGGESTED_FIX_MIN_CONFIDENCE(default 0.75).
Migrations011_finding_suggested_fix.sql. - Install-wide platform runtime store —
GET/PUT /v1/platform/runtime-config; org may only
override suggested code fixes when platform policy is Unset. - Product docs —
docs/UI_GUIDE.md(screenshot tour),docs/README.md,
docs/REVIEW_PIPELINE.md, session audit notes; screenshots underdocs/screenshots/(kebab-case).
Changed
- Job queue is Postgres-only — removed file-backed
FileJobQueue/jobs.json.
DATABASE_URLrequired for multi-replica safety; NATS/Rabbit/Pulsar remain optional wake-up brokers. - Specialist timeouts —
STEW_SPECIALIST_TIMEOUT_MS(default 8m); truncated runs emit coverage-gap
findings (steward.specialist_timeout), auditcoverageGaps, UI TIMEOUT ledger — never a silent
clean empty scan. LLM retries:STEW_LLM_MAX_RETRIES+STEW_LLM_REQUEST_TIMEOUT_MS. - Session stage pipeline UI — per-stage durations, live active step, skipped optional stages,
timing bars; audit JSON download only under Review audit (not duplicated on Review report). - Members UI — role capability help; Keycloak vs local create-user copy clarified.
- Runtime UI — Unset / Off / On for booleans; platform vs org scope clearly labeled.
- Codesteward Graph image — default
ghcr.io/codesteward/codesteward-graph. - README — self-host focused; docs links to UI guide + pipeline.
- Local sandbox defaults to in-place repo read (
STEW_SANDBOX_COPY=1for full tree copy).
Fixed
- GitHub clone host — map
api.github.com/GITHUB_API_URLto git hosthttps://github.com
(resolveGithubGitHost); exact hostnames only (no substring SSRF). Hardened clone args
(assertSafeGitArg,--on clone). - Keycloak first install user — first OIDC JIT user on empty store gets
platformAdmin+ product
admin(parity with local bootstrap). - Code scanning triage — crypto temp passwords; Confluence CQL/HTML strip; remove unused
vulnerablediffpackage (GHSA-73rr-hh4g-fpgx); rootSECURITY.md; CodeQL quality cleanups. - Keycloak login path — no fallback to local password form when IdP is configured (break-glass
only/login?local=1). - Workspace GC — delete
{STEW_WORKSPACE_DIR}/{sessionId}clones after terminal status
(STEW_WORKSPACE_KEEP=1to retain). - Container permissions — entrypoint chowns data/workspace volumes for non-root
steward. - LocalSandbox spawn — handle ENOENT; prefer
/bin/bashor/bin/sh; no worker process crash. - Resume UI — failure branding only on terminal status; resume clears prior error.
- CI / release — Trivy 0.72.0; Semgrep GCM
authTagLength; zizmor cache-poisoning fixes;
multi-stage Docker; drop SaaS-billing image from public CI/release; CodeQL action v4. - GitHub connector icon visible on light theme (
currentColor). - Plan-gate UI for audit log / SCIM; SCIM org entitlement; platform GitHub App enforce UX.
Migrations
Operators with Postgres should run migrations through 011–013 (suggested fix, confidence layers,
finding reasoning) if upgrading from 1.0.0:
pnpm migrate
# or: pnpm --filter @codesteward/db run migrateUpgrade notes
- Ensure
DATABASE_URLis set (file job queue removed). - Run DB migrations 011–013.
- Rebuild/redeploy API, worker, and UI images (or
pnpm -r run build). - Optional: set
STEW_PLATFORM_ADMIN_EMAILSfor additional platform operators under Keycloak. - Helm: set image tag
1.1.0(chartappVersionupdated).
Container images
docker pull ghcr.io/codesteward/codesteward:1.1.0
docker pull ghcr.io/codesteward/codesteward/ui:1.1.0App image runs API by default (SERVICE=api). Worker:
docker run --rm -e SERVICE=worker ghcr.io/codesteward/codesteward:1.1.0Images are signed with cosign keyless via GitHub OIDC.
Verify with:
cosign verify ghcr.io/codesteward/codesteward:1.1.0 \
--certificate-identity-regexp 'https://github.com/Codesteward/codesteward/.*' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com