Skip to content

chore: complete deployment retirement and console typography takeover - #256

Merged
HTExplicit merged 24 commits into
mainfrom
integration/claude-takeover
Oct 7, 2026
Merged

HTExplicit merged 24 commits into
mainfrom
integration/claude-takeover

Conversation

@HTExplicit

Copy link
Copy Markdown
Owner

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 chore: retire stale release scaffolding and deployment templates #253, refactor: retire release acceptance API key leases #254, ci: simplify production deployment to a single image operation #255 and style(ui): console text follows official sub2api #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.

Codex and others added 24 commits October 7, 2026 15:43
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.
The console theme's text now follows how official sub2api renders it, while
keeping the console layout, surfaces, brand accent and stacked tables:

- Font: the official system-ui stack (Microsoft YaHei UI on zh-CN Windows),
  no web fonts; Geist / Geist Mono files and the runtime MiSans stylesheet are
  removed. Mono only for identifiers and code (official stack + CJK fallbacks).
- Sizes and weights: official text-sm 14/20, text-xs 12/16; headers 12/500
  (usage tables) or 14/500 (TablePageLayout tables), uppercase only on headers
  and sidebar section titles; KPI values 20/700; no negative tracking.
- Colour: class-driven official Tailwind greys (#111827 / #374151 / #4b5563 /
  meta #616977; dark #f3f4f6 / #d1d5db / #a4abb6), meta clamped to 4.5:1 on
  every neutral fill; official figure and tag colours return (cost, cache,
  account cost, latency, group / type / billing tags). The two-tone data text
  roles are deleted; dark selected rows lift their meta greys.
- Layout: no horizontal overflow in Chinese at 1280-1920 (API key and user
  wrap recipes extended, accounts label gutter 50/56px, status header width);
  English TablePageLayout headers 12px and wrapping, recipes below 1680px.
- Accounts name column measures names at 14px.

Owner request 2026-10-01: text still hard to read, follow official sub2api.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts:
#	.github/workflows/downstream-verify.yml
# Conflicts:
#	.downstream/native-domains.md
#	deploy/README.md
…rized takeover

# Conflicts:
#	THIRD_PARTY_NOTICES.md
@HTExplicit
HTExplicit merged commit 7132011 into main Oct 7, 2026
18 checks passed
@HTExplicit
HTExplicit deleted the integration/claude-takeover 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