Skip to content

chore: retire stale release scaffolding and deployment templates - #253

Merged
HTExplicit merged 11 commits into
mainfrom
chore/deploy-cleanup-stage1
Oct 7, 2026
Merged

HTExplicit merged 11 commits into
mainfrom
chore/deploy-cleanup-stage1

Conversation

@HTExplicit

Copy link
Copy Markdown
Owner

Retired plugin and Cindy deployment mechanisms still shape release setup, deployment templates and migration checks after their runtime objects were removed. This change removes that scaffolding and keeps the effective downstream behavior documented in one current contract.

  • Simplify immutable image Release preflight and candidate setup, remove the completed one-time cleanup workflow, obsolete records and plugin notice, and restore the official Docker build/template behavior where no current fork contract needs a difference.
  • Remove the unused skill-registry environment variable and mounts from all four Compose templates. Remove the 19 historical-only migration test files and their selectors, preserving every SQL migration, active startup-precondition integration fixture, shared integration helpers and MiniMax SQL assertions.
  • Consolidate current model discovery/capacity, Codex/OpenCode catalog, effort/model identity and stream-terminal contracts in DOWNSTREAM.md; describe initial_conflict_files as the fixed integration snapshot rather than current unresolved conflicts.

Validation: compose security, gateway-environment and runtime-resource shell contracts passed; the runtime-resource script now matches upstream v0.2.13 exactly. Default migration tests, the narrowed unit selector and integration-tag go vet passed. Static checks confirm all historical SQL and preserved fixtures/helpers are unchanged. Existing unchanged release-preflight (12), upstream-risk (4), and upstream-automation (16) passing results are reused. Required PR checks remain enabled. No production call, deployment or PostgreSQL integration test was run for this change.

Before merge, confirm no active release or upstream promotion still needs the old main workflow. After this preflight CLI cleanup, an old tag must be supplemented with gh workflow run downstream-release.yml --ref <that-tag> -f release_tag=<that-tag> so the workflow and tag's script have the same argument contract. The latest 100 Release runs have no active run; current v0.2.13-codexrip tags through .12 are published. The obsolete September 8 v0.2.3-codexrip.7 draft has no assets and is separate from current publication.

Production Deploy, SSH entrypoint and runtime application behavior stay at their current stage; image-owned /app/skill-registry removal follows the authorized host/configuration cleanup.

Codex and others added 11 commits October 7, 2026 15:57
The backend reads neither GATEWAY_IMAGE_STUDIO_ENABLED nor
GATEWAY_ACCOUNT_TRAFFIC_TELEMETRY_DISABLED (gateway.account_traffic_telemetry_disabled),
and no GATEWAY_CINDY_* variable. Remove them from .env.example, the four
Compose files, config.example.yaml and deploy/README.md, and put the Gateway
block order and the force_http comment back to upstream v0.2.13.

deploy/tests/docker-compose-gateway-env-test.sh is upstream's file again: its
Image Studio special case leaves with the variable.

Differences from upstream that remain, each read by live code:
GATEWAY_OPENAI_CODEX_REQUEST_ZSTD, GATEWAY_OPENAI_REQUEST_INTEGRITY_MODE,
SECURITY_ACCOUNT_API_KEY_REVEAL_PASSWORD and the MiSans font origins in the
example CSP. The /app/skill-registry mounts with their host path variable are
left for the change that removes the directory from the image, and the README
section on the production workflow's rollout tuple for the change that
removes those inputs from the workflow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… tooling

release_preflight.py: --kind accepted one value and local_assets always
returned nothing, so the per-asset comparison never ran. Both go, with the
root argument and ROOT that only they used. The four stages check what they
checked before; a draft that carries assets now fails with
draft_assets_unexpected instead of draft_assets_incomplete.

The command line is now

    release_preflight.py --stage <before-build|before-push|before-create|before-publish> \
        --tag <tag> --source-sha <sha> [--image-digest <digest>]

and the four calls in downstream-release.yml use it.

downstream-release.yml: drop the pnpm, Node and Go setup steps. The image is
built inside Docker and no later step runs those tools. Image labels are
unchanged.

test_release_preflight.py: the assertions naming plugin-era artifacts go; the
provenance and Image:/Source: assertions they shared a test with move into the
remaining workflow contract. A new contract passes every preflight invocation
in the workflow through the script's argument parser, which a pull request
could not exercise before.

deploy/plugin-bundle/README.md described the bundle's build input.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…stream

plugins/ and backend/pkg/extensionapi/ were first-party plugin directories;
upstream has neither and ignores a top-level plugins/. Upstream's own plugin
framework stays critical through backend/pkg/pluginapi/ and service/plugin_*.

The test names files that exist: plugin_manager.go replaces a first-party file
deleted in September, and the two samples under the removed directories go.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
It deleted the 0.1.172-codexrip.3 to .9 package versions on 2026-08-11. It
requires each of those versions to exist before it deletes anything, so a
second run can only fail.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
DOWNSTREAM.md: the baseline line points at .downstream/upstream-base and the
v0.2.13 review instead of naming v0.2.8; the sentence about public model
management goes; "CPA stays stopped" goes, the CPA service having been removed
from the server.

.gitignore: remove the two exceptions for the promptskills seed scripts, a
directory that no longer exists.

.gitattributes: the LF rules stay. Their comment now says what they are for,
and *.ps1 goes: the only PowerShell files this fork ever tracked belonged to
the remote skill registry and the prompt bundle.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Root Dockerfile, backend builder stage, three lines back to upstream v0.2.13.
bash is no longer installed: it was added for the plugin bundle script, which
ran in a stage built on this one, and nothing here runs it (the one script the
stage calls, backend/scripts/resolve-version.sh, is /bin/sh). GOOS and GOARCH
come straight from TARGETOS and TARGETARCH again, not from two shell variables
the plugin builds shared. The build comment is upstream's; the one it replaces
dated from folding the plugins into the binary.

What the built image runs does not change: the release and candidate builds
both go through buildx with platforms linux/amd64, which sets TARGETARCH=amd64,
the value the removed default supplied, and bash was only ever in the builder
stage, which is not part of the image.

downstream-verify.yml: the candidate image is built as VERSION=0.0.0-candidate
again. The step that derived <VERSION>-codexrip.candidate existed so that the
image build could verify the bundled plugins against that host version; the
Dockerfile verifies no bundle now, and the candidate is only uploaded as a
three-day artifact. Release images take their version from the tag as before.

Differences from upstream's Dockerfile that remain: the vite build without
type checking (the release reuses the pull request's validation), GOMEMLIMIT
for the 768 MiB production limit, the THIRD_PARTY_NOTICES.md copy for the
bundled fonts and icons, and /app/skill-registry, which production still
mounts and a later change removes together with the mount.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ir CI step

The "Historical Cindy migration tests" step of Downstream backend selected
tests from twelve files under backend/migrations. They assert the text of, or
replay, migrations of the retired Cindy platform: the one-time account
rewrites 207 to 209, the balance marker updates 210, 211 and 213, the platform
projection of 229, 234 and 235, and the managed channel of 236. Migration 260
has since dropped the balance marker column, the projection table and
functions, and the managed channel's triggers and functions. The step and the
twelve files go; every migration file stays as it is, and the runner still
refuses an applied migration whose checksum changed.

Two of the files held more than the step selected, and all of it leaves with
them: the 229 and 236 text checks and one more replay of 235, which belong to
the same retired platform, and
TestMigration235ModelAllowlistPreservesLegacyJSONByRenamingOnly, which is not
Cindy: it pinned upstream's 235_group_model_allowlist.sql to a column rename.
That file is byte-identical to upstream v0.2.13 and upstream has no such test.

The unit selector in "Image, model list, and turn-state tests" loses
Migration235 and Migration236, which matched only tests in a deleted file.
Each remaining branch still selects at least one test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No workflow, script or test reads any of these files.

.downstream/coverage-v0.2.7.json and .md, refresh-coverage.mjs with its test,
and implementation-v0.2.7.md: the ownership and review inventory of the
seven-plugin release, taken against upstream v0.2.7. The generator can only
rewrite that inventory; it assigns paths to the plugins of that release, and
the inventory names more files that no longer exist than files that do.

.superpowers/: the task ledger of the August work on Cindy groups and the
capability catalogue.

.downstream/cindy-catalog-refresh-20260905.json and -20260911.json: probe
records for the fixed Cindy catalogue; Cindy accounts take their models from
model sync.

.downstream/upstream-0.2.0-overlap-review.md and upstream-review-v0.2.1, .5,
.6, .8, .9, .10 and .11: integrations that are no longer the baseline.
upstream-review-v0.2.13.md, the record of the current one, stays.

.gitattributes loses *.mjs, which matched only the two deleted scripts.

.downstream/upstream-risk.json still lists these paths. It is the risk
classifier's output for the v0.2.13 integration, the gate recomputes it from
the commits it records, and the next sync rewrites it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…pped

THIRD_PARTY_NOTICES.md opened with the notice and MIT licence for the
gpt-5.6-instruct v45 prompt body, which was imported as an inactive template.
The imported file left the tree with the prompt library rework (#206). Checked
by hash and by line, without reading the text: the file at the import commit
has the SHA-256 the notice records; no tracked file has that hash and none
contains any of its lines, also not in SQL or JSON escaping.

The image copies this file to /app/THIRD_PARTY_NOTICES.md. The Geist and
Lucide notices, for fonts and icons the frontend still bundles, are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The three documents introduced current behaviour as "first-party domains" that
"run inside the host" on "native" pages, next to a plugin framework that
"remains". Those sentences go; what they introduced is stated directly.

DOWNSTREAM.md: the section is "Settings and account operations" and says what
the linked document holds, naming migrations 264 and 272, whose refusals send
the reader here. "native host image" is "image".

.downstream/native-domains.md (path unchanged, migration 272's text leads to
it through DOWNSTREAM.md): titled "Settings, stored data and rollback". The
opening paragraph, the note on what one past change did not do to bulk
editing, and the Verification section go; DOWNSTREAM.md already states the
HTTP 202 jobs, the key-reveal password, the reuse of PR validation and what a
health check proves. "Native theme switch" is "Console theme switch", "The
host is delivered" is "Each release is". Every migration contract, data
boundary and rollback note is unchanged, as are the two paragraphs on the
deploy-preserve and rollback-preserve operations, which describe the
production workflow as it still is.

.downstream/gpt6-models-and-prompts.md: the sentence about built-in prompts
running in the host goes; the gateway, not "the host", restores the SSE
content type; the closing section goes, which described a plugin iframe
component that no longer exists and how past changes were verified.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Remove unused skill registry template mounts and the remaining historical-only migration tests. Restore the upstream runtime-resource shell contract, retain every SQL migration and active precondition fixture, and consolidate effective model and forwarding contracts in DOWNSTREAM.md.
@HTExplicit
HTExplicit force-pushed the chore/deploy-cleanup-stage1 branch from 424d0b7 to 49dd307 Compare October 7, 2026 07:59
HTExplicit added a commit that referenced this pull request Oct 7, 2026
The deployment path still carried retired acceptance, rollback, resource-request and plugin-era controls, while console typography needed to be brought up to date with the current upstream style. This integrates the remaining authorized takeover work after the reasoning repair in #252.

- Integrates #253, #254, #255 and #222 while retaining their commit ancestry. Removes stale release scaffolding and deployment template settings; preserves every existing migration SQL file.
- Production Deploy accepts only `release_tag` and `confirmation=DEPLOY`, sends `deploy <immutable-image>`, and retains standard OCI provenance and fixed SSH/environment controls. Both automation callers and historical-run deduplication match it.
- Migration 274 deletes only validated, soft-deleted release-acceptance keys and their usage/dedup rows, removes the two acceptance columns, and leaves ordinary keys and diagnostic logs. The matching application no longer reads those columns. Older images cannot be deployed after 274; failures require a forward fix.
- Uses upstream system fonts, sizes and readable semantic text colors without dropping table columns. Fixes the TLS empty-state color and whole-badge/word wrapping, and normalizes the audit helper's LF bytes without semantic changes.
- Removes the image-side skill-registry directory after the host mount and retired runtime configuration were removed.

Validation: reuse the component branches' directly affected tests and source-identical UI matrix; normal required checks run on this final integration tree. The only integration conflicts were the migration CI selector and retired documentation/notices; the resolved selector retains the new PostgreSQL migration fixture and live migration tests. All existing migration SQL is unchanged. Entry-point Bash syntax and diff checks pass.

The simplified host tool has completed a successful unchanged-image `.12` redeploy, preserving environment/resources and other containers. Host config retirement also passed with a new complete backup retained. UI localhost fake-data validation sampled 7,728 normal text/input/placeholder elements across 36 after states, with no sample below 4.5:1; account tables fit at 1280/1440/1920 in both languages/themes. Before screenshots block external fonts and show their fallback stack. No real model call or live upstream ID-less-item acceptance test was performed.
@HTExplicit
HTExplicit merged commit 4c9df57 into main Oct 7, 2026
18 checks passed
@HTExplicit
HTExplicit deleted the chore/deploy-cleanup-stage1 branch October 7, 2026 08:45
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