Skip to content

ci: batch Rust and release smoke checks into one job - #9

Open
ashutoshpw wants to merge 102 commits into
mainfrom
ci/batch-short-jobs
Open

ashutoshpw wants to merge 102 commits into
mainfrom
ci/batch-short-jobs

Conversation

@ashutoshpw

@ashutoshpw ashutoshpw commented Sep 22, 2026 •

Copy link
Copy Markdown
Owner

Problem

Rust (66s wall) and Release Smoke (66s wall) each started a runner and paid their own sparse checkout for work that finishes well before the fork's critical path (Test, ~424s). Two runner allocations for two short checks is the repeated-setup tax Linear removed by batching short checks.

Fix

Merge both into one job, Rust + Release Smoke (rust job id): cargo fmt then cargo test first so Rust failures surface fast, then the filtered @t2code/scripts... install and node scripts/release-smoke.ts. No step was lost, no timeout or permission weakened, and no setup-apt-mirrors was added (neither job needed it).

Evidence

  • Same-repo baseline (main@99908f59f, run 35655900272): Rust 66s + Release Smoke 66s, two runner allocations.
  • This branch's CI run: the merged Rust + Release Smoke job is 115s — one runner, one checkout, and both step groups green.
  • Ruleset 22675324 has only deletion/creation rules and no required status checks, so the job rename does not block merges.
  • Local validation: YAML parses; jobs list no longer contains release_smoke.

Stack

#9 (this PR) ← #11 (skip the desktop build on documentation-only changes)

Merge in order; after this one merges, the next PR is retargeted to main.

Manual Testing Guide

  1. Get the run for this PR: gh run view <run-id> --repo ashutoshpw/t2code --json jobs.
  2. Confirm exactly one job named Rust + Release Smoke exists and no Release Smoke job exists.
  3. Confirm the job's steps include Check Rust formatting, Test Rust crates, Setup Vite+ (filtered install), and Exercise release-only workflow steps, all passing.
  4. Confirm the job wall time is under the sum of the two old jobs (132s) and one fewer runner allocation is used.
  5. Regression: Check still runs knip, vp check, typecheck, and the Electron setup; Test and Test Server 1-3 are unchanged.

- Replace Blacksmith runner labels across workflows
- Rename the APT mirror list and update mobile showcase documentation
Desktop, mobile, and hosted-web now present as T2 Code. Mobile bundle
IDs and URL schemes move to t2code/t2code-dev/t2code-preview while
mobile is still undistributed; desktop dual-registers legacy t3code
schemes and the server trusts both generations of renderer origins so
existing installs keep working. Desktop userData dir names and
appUserModelId are intentionally unchanged for data migration.
MCP server identity, provider status messages, CLI output, desktop
menus and error dialogs. Legacy userData dir name and appUserModelId
assertions keep the old T3 Code names on purpose.
Includes legal pages and the T2 Code Relay API OpenAPI title. Legal
entity T3 Tools, Inc. and t3.codes domains unchanged.
The upstream rebase restored the pre-rebrand APP_SCHEME, Android
package, and Xcode workspace/scheme/product names in the mobile
showcase harness, so it would build and deep-link the old t3code app.
Align them with the rebranded app.config.ts (t2code scheme,
com.t3tools.t2code, T2Code workspace) and rename the T3CodePublicConfig
identifier while touching the file.

Worked by GLM (zai-coding-plan/glm-5.3-flash) via opencode.
The upstream rebase reintroduced brand strings in comments, generated
scripts, error copy, git author identity, live-activity titles, and the
'95 marketing page. Rebrand the producer copy and the test expectations
that assert it; legacy userData dir names, T3CODE_* env vars, upstream
URLs, and the relay stack identifier stay as-is by design.

Worked by GLM (zai-coding-plan/glm-5.3-flash) via opencode.
User-facing guides, operations notes, glossary/overview, README, and
AGENTS.md still called the product T3 Code after the upstream rebase.
Rewrite the copy; upstream repo URLs, app.t3.codes, winget/cask/AUR
package IDs, and .t3 paths are intentionally unchanged.

Worked by GLM (zai-coding-plan/glm-5.3-flash) via opencode.
Adds scripts/check-rebrand.ts, a zero-dependency guard wired into the
vite+ pre-commit and pre-push hooks: added lines are checked against the
rebrand rules (T3 Code copy, @t3code scope, port 3773, legacy t3code
schemes) with allowlists and an exact-line baseline for intentional
legacy/upstream strings. Also adds a CI tree-scan workflow and points the
rebase skill's audit step at the tool.
…space

Renames the two app packages to @t2code/web and @t2code/marketing and
updates every reference: the server's workspace dep and its turbo
dependsOn, root package.json marketing scripts, dev-runner filters (plus
test expectations), CI install filters in web-preview and release
workflows, Vercel install/build commands, the knip ignore entry, and the
Effect context tag in the web httpClient. Lockfile regenerated via vp i.

Verified: dev-runner test suite (72 passed), typecheck on @t2code/web
and @t2code/cli.

Ran with GLM (zai-coding-plan/glm-5.3-flash) via opencode.
Rename the iOS bundle identifier and Android package per variant:
production codes.t2.mobile, preview codes.t2.mobile.preview,
development codes.t2.mobile.dev. Update the showcase script and the
test-t3-mobile skill docs/scripts that launch or inspect the dev app
by its identifier.
Move the skill directory, update its frontmatter, cross-references in
test-t3-app and AGENTS.md, and fix stale identity references inside it
(app name T2 Code Dev, scheme t2code-dev, workspace T2CodeDev) to match
the current Expo config.
Renames the internal scope for contracts, shared, client-runtime, ssh,
tailscale, scripts, desktop, mobile, the mobile native modules, the
oxlint plugin, and the monorepo root, covering ~2900 occurrences:
source imports, subpath exports, Effect context tags, vi.mock paths,
vp/pnpm filters (including the monorepo negation in CI), Vercel install
commands, knip, lint rule names, and the stale @t3tools/server tag that
predates the @t2code/cli rename. Lockfile regenerated.

Desktop artifact identity moves to the t2 namespace: app id
codes.t2.desktop (matching the mobile codes.t2.mobile move), artifact
names codes.t2.desktop-*, Linux executable/desktop-entry/WM-class
t2code, and the t2codeCommitHash build metadata field.

Legacy compat is removed rather than carried: the dual-registered
t3code/t3code-dev deep-link schemes, the legacy T3 Code (Dev)/(Alpha)
userData-dir migration, the mobile t3code* link prefixes, the
t3code-dev default in the mobile pairing script, and the scheme
allowlist in the rebrand guard. The guard gains a t3tools-scope rule so
upstream rebases cannot silently reintroduce the old scope, and the
rebase skill's audit grep and scope classification were corrected
(upstream's CLI is unscoped "t3"; @t3code/ never existed upstream).

Live state namespaces are intentionally untouched: the t3code userData
directory, persist:t3code-preview partitions, and localStorage keys stay
so existing installs keep their data.

Verified: typechecks across web, cli, desktop, mobile, shared,
client-runtime, contracts, ssh, tailscale, scripts, marketing, relay;
test suites for web (4052), cli (3993+13 pre-existing env failures),
desktop (818+1 env), mobile (1262), shared (570), client-runtime (1259),
and the scripts package; knip unchanged from HEAD; rebrand guard tree
audit clean.

Ran with GLM (zai-coding-plan/glm-5.3-flash) via opencode.
Port of upstream pingdotgg#7267 (inayayousfi), squashed and
adapted to the fork: server-owned environmentLabel setting with an
inline web editor, native mobile rename sheet, config-stream label
events, and relay label synchronization.

Adaptations for current upstream drift (969 commits since the PR
forked): environmentLabel Ref moved into make() (descriptor builder),
label projection case ported into serverConfigProjection.ts, relay
sync requirements bound at the startup call site (ServerSecretStore +
FetchHttpClient), startup-heartbeat test dropped (removed upstream),
machine icon kept beside the rename control, derived duplicate-dialog
state instead of setState-in-effect.

Verified: rebrand guard clean; targeted typecheck + tests green for
contracts, client-runtime, server, relay, web, and mobile.

Ported-by: GLM (zai-coding-plan/glm-5.3-flash) via opencode, driven
by ashutoshpw
Chat history import was only reachable through the welcome wizard, and the
server refused anything older than 30 days, so a new install could backfill
recent work but nothing else, and an existing install had no path at all.

Add an optional 'since' bound to agentSessions.import (decode-time validated,
absent/null keeps the 30-day default) and thread it through the scanner's
recency cutoff. Extract the wizard's per-project import loop into a shared
module and build an 'Import chats' dialog on it in Settings > Providers with
a window picker (30 days / since date / all time). Re-runs stay safe through
the existing imported-transcript dedup. Imported conversations still resume
the original provider session.
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 22, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
🔒 Security Review ✅ Completed 2026-09-22T04:53:14.558030Z c00cbd5 PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions github-actions Bot added the vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. label Sep 22, 2026
@github-actions

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 13.5 KiB 13.5 KiB −1 B (−0.0%) 15.1 KiB ✅
Codex Thread snapshot wire 7.1 KiB 7.1 KiB −1 B (−0.0%) 7.3 KiB ✅
Codex Live turn WebSocket wire 6.4 KiB 6.4 KiB 0 B (0.0%) 7.8 KiB ✅
Codex Live turn WebSocket decoded 56.2 KiB 56.2 KiB 0 B (0.0%) 66.4 KiB ✅
Codex Live turn messages 9 9 0 (0.0%) 21 ✅
Claude Total thread wire 13.5 KiB 13.5 KiB +1 B (+0.0%) 15.1 KiB ✅
Claude Thread snapshot wire 7.1 KiB 7.1 KiB +5 B (+0.1%) 7.3 KiB ✅
Claude Live turn WebSocket wire 6.5 KiB 6.5 KiB −4 B (−0.1%) 7.8 KiB ✅
Claude Live turn WebSocket decoded 57.0 KiB 57.0 KiB 0 B (0.0%) 66.4 KiB ✅
Claude Live turn messages 9 9 0 (0.0%) 21 ✅

Baseline: 99908f5 · PR result: c00cbd5 · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 113.9 KiB
  • Claude decoded thread snapshot: 114.6 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant