Commit Graph
63 Commits
Author SHA1 Message Date
Jesse_ChenandCursor 13bde020fb fix(staging): let migrate accept docs-only-ahead like deploy
Independent Staging Quality Gate / validate (push) Successful in 8m57s
Independent Staging Quality Gate / publish (push) Successful in 1m49s
Docs-only staging HEAD blocked Migrate Staging Database even when an ancestor already had a successful exact-SHA gate, so pending SQL could not be applied.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-03 10:29:19 +08:00
Jesse_ChenandClaude Fable 5.1 f7428909d2 ci(gate): drop the removed GitHub workflow directory from the gated path list
Independent Staging Quality Gate / validate (push) Successful in 21m36s
Independent Staging Quality Gate / publish (push) Successful in 1m56s
The mirror workflows were deleted in the same release, so the gated
path list, both trigger filters and the contract test no longer name
.github/workflows/**.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VawU7Xfd5jS9wUEXz1XYmS
2026-09-02 04:02:04 +00:00
Jesse_ChenandClaude Fable 5.1 68414a8223 ci(gate): check out the exact SHA from a host-persistent mirror with remote fallback
Both gate jobs spent 4-8 minutes (validate) plus 3-5 minutes (publish) on
`git fetch --depth=1` of a 105 MB tree over the WAN, and run 2270 burned
15 minutes on three timed-out attempts. act_runner's hostexecutor discards
the workspace between runs but keeps the host filesystem, so keep a bare
mirror at /root/.cache/jyotisha-mirror.git: take an flock on it (validate,
publish, or overlapping runs may race), clone it once or `fetch --prune`
only when it lacks the requested commit, fetch the exact SHA from local
disk, then point origin back at Gitea for every later step.

The mirror is an accelerator, not a dependency: an unwritable path, a busy
lock, a failed clone/fetch, a non-repository directory, or a stale git lock
file all fall through to the unchanged bounded three-attempt remote fetch,
and the SHA-format, checkout, `git clean -ffdx`, HEAD-equals-SHA, and
clean-tree assertions are untouched. Rehearsed locally against a local
remote for fresh, reused, prune-refresh, unwritable, corrupt, stale-lock,
and lock-contention cases.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VawU7Xfd5jS9wUEXz1XYmS
2026-09-02 04:02:04 +00:00
Jesse_ChenandClaude Fable 5.1 534f5e617c ci(gate): skip the staging gate for docs-only pushes without releasing stale code
Twenty-four of the last sixty staging pushes were pure documentation, yet each
one ran (and cancelled) the full gate and image publish. Introduce
deploy/gated-paths.txt as the single source of truth for what must rerun the
gate: every Dockerfile COPY source, the Python package inputs, the workflow and
build-context files, and the repository files frontend/tests read at gate time.
Both triggers of backend-quality-gate.yml now carry that exact list; pushes
that touch none of it neither run the gate nor cancel a running code gate.

Because staging head may then legitimately sit ahead of the last tested SHA,
add deploy/is-docs-only-range.sh: it proves <base> is an ancestor of <head>
and that no changed path matches a gated glob, from local history when it is
available and otherwise from the Gitea compare API (per-commit `files`, parent
walk for ancestry, total_commits cross-checked). The publish dispatch and the
deploy-staging head checks accept an advanced head only when that script
succeeds; diverged, older, or code-bearing heads are still refused. In
deploy-staging the check runs after the gate-attested controller bundle is
extracted so only the tested checker and path list are ever executed; the
manual rollback branch is unchanged.

AGENTS.md §6.3/§6.4 describe the new contract: `.deployment.gitCommit` must
equal the latest staging commit that touched a gated path, not staging head.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VawU7Xfd5jS9wUEXz1XYmS
2026-09-02 04:02:04 +00:00
Jesse_ChenandClaude Fable 5.1 fb69e43c90 ci: remove GitHub mirror workflows and dead Gitea manual workflows
Gitea (git.copse.top) is the only CI/CD control plane; GitHub is a
read-only mirror whose Actions are being disabled in repository settings.

- Delete all 11 `.github/workflows/*.yml` (stale copies of the old design).
- Delete unused Gitea manual workflows `ci.yml`, `test.yml`,
  `publish-pypi.yml`, `apply-supabase-profile-migrations.yml`
  (0-1 historical runs, no remaining target).
- Fold the full `python -m pytest` tree and `tests/run_all.py` into
  `release-quality-gate.yml`, which previously only ran the curated
  release profile; update the `run_quality_gate.py` comment accordingly.
- Port `reset-staging-account.yml` to Gitea: `runs-on: xiaoxin`, bounded
  exact-SHA checkout, `refs/heads/staging` only, `staging-mutation`
  concurrency, same email/confirmation/host/port/user/path assertions.
- Repoint frontend workflow tests at `.gitea/workflows/`, drop the
  GitHub-only assertions, add coverage for the new reset workflow, and
  remove `tests/test_supabase_profile_migration_workflow.py`.
- Update AGENTS.md §6.8, README.md, and deploy/README.md to the current
  production/mirror facts and document the staging account reset.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VawU7Xfd5jS9wUEXz1XYmS
2026-09-02 04:02:04 +00:00
Jesse_ChenandCursor 5687182980 ci(runner): move every Gitea job to xiaoxin and let the gate reclaim its own disk
Independent Staging Quality Gate / validate (push) Successful in 9m24s
Independent Staging Quality Gate / publish (push) Successful in 7m24s
质量门跑在以 :host 模式注册的跳板机上,与无关生产服务共用文件系统,累积的按
SHA 打标镜像把根分区占满,PostgreSQL fixture 起不来,staging 连续 5 个提交发不
出去。把 12 个 job 统一迁到 xiaoxin,并在开跑前回收磁盘、余量不足时直接报磁盘
原因而不是让 23 个数据库测试代为失败。

当年据以搬迁的「xiaoxin 缺少 Docker Compose v2」是误诊:真实原因是用户级插件
目录里一个零字节 docker-compose 遮蔽了系统插件。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-18 10:12:55 +08:00
Jesse_Chen 8ddcef4cf1 fix(deploy): prevent Next.js chunk version skew
Independent Staging Quality Gate / validate (push) Successful in 13m28s
Independent Staging Quality Gate / publish (push) Successful in 10m14s
2026-08-16 09:09:27 +08:00
Jesse_Chen 934c4175d3 ops: automate production recovery attestation
Independent Staging Quality Gate / validate (push) Successful in 13m3s
Independent Staging Quality Gate / publish (push) Successful in 2m18s
2026-08-16 01:03:10 +08:00
Jesse_Chen 0fd111d16b fix(ui): align message motion and composer button radius with DESIGN.md; tolerate unreadable staging revision state
Independent Staging Quality Gate / validate (push) Successful in 13m6s
Independent Staging Quality Gate / publish (push) Successful in 8m3s
- Message entry: 300/420ms power3.out -> Standard 180ms cubic-bezier(.22,1,.36,1) (DESIGN.md section 6); update the layout contract test to the shipped values.
- Composer icon button: full radius instead of 8px (DESIGN.md section 5 Button).
- Staging deploy workflow: fall back to container SHA discovery when .state/deployed-revision exists but is unreadable by the deploy user (Gitea pipeline writes it as root).
2026-08-14 09:13:57 +08:00
Jesse_Chen 7a613f26db fix(ci): isolate staging gate from legacy main listener
Independent Staging Quality Gate / validate (push) Successful in 12m45s
Independent Staging Quality Gate / publish (push) Successful in 2m7s
2026-08-13 13:05:59 +08:00
Jesse_Chen c8bd8e8a2b fix(ci): provide Gitea context to deploy dispatch
Staging Backend Quality Gate / validate (push) Successful in 12m15s
Staging Backend Quality Gate / publish (push) Successful in 2m10s
2026-08-13 12:43:18 +08:00
Jesse_Chen 945f8974d4 fix(ci): inject token for staging deploy dispatch
Staging Backend Quality Gate / validate (push) Successful in 12m40s
Staging Backend Quality Gate / publish (push) Failing after 2m5s
2026-08-13 12:23:13 +08:00
Jesse_Chen 013c15a9e9 ci(staging): decouple deployment from main
Staging Backend Quality Gate / validate (push) Successful in 14m50s
Staging Backend Quality Gate / publish (push) Failing after 7m58s
2026-08-13 11:57:24 +08:00
Jesse_Chen 455917a870 ops: keep production SSH sessions alive
Staging Backend Quality Gate / validate (push) Successful in 10m16s
Staging Backend Quality Gate / publish (push) Successful in 2m8s
2026-08-10 16:17:41 +08:00
Jesse_Chen a0f8118e32 ops: read production migration revision from container
Staging Backend Quality Gate / validate (push) Successful in 11m33s
Staging Backend Quality Gate / publish (push) Successful in 2m4s
2026-08-10 15:31:35 +08:00
Jesse_Chen 43d0647de2 ops: read production revision from container
Staging Backend Quality Gate / validate (push) Successful in 10m15s
Staging Backend Quality Gate / publish (push) Successful in 2m17s
2026-08-10 06:58:51 +08:00
Jesse_Chen f6b3301035 ci: pin release gate to Node 22
Staging Backend Quality Gate / validate (push) Successful in 13m25s
Staging Backend Quality Gate / publish (push) Successful in 5m4s
2026-08-10 02:31:35 +08:00
Jesse_Chen 417417835a ci: stabilize release dependency install
Staging Backend Quality Gate / validate (push) Successful in 12m45s
Staging Backend Quality Gate / publish (push) Successful in 8m43s
2026-08-10 00:56:40 +08:00
Jesse_Chen a77fb514cb ci: run release gate on compose runner
Staging Backend Quality Gate / validate (push) Has been cancelled
Staging Backend Quality Gate / publish (push) Has been cancelled
2026-08-09 23:17:29 +08:00
Jesse_Chen 9235ee66f6 keep staging image build on turbopack
Staging Backend Quality Gate / validate (push) Successful in 17m58s
Staging Backend Quality Gate / publish (push) Successful in 4m14s
2026-08-09 22:14:40 +08:00
Jesse_Chen 4f3f842958 avoid duplicate staging production build
Staging Backend Quality Gate / validate (push) Successful in 12m20s
Staging Backend Quality Gate / publish (push) Failing after 47m39s
2026-08-09 21:06:47 +08:00
Jesse_Chen b40f3a1cf0 fix staging npm ci in-container timeout
Staging Backend Quality Gate / validate (push) Successful in 16m27s
Staging Backend Quality Gate / publish (push) Failing after 55m53s
2026-08-09 16:06:16 +08:00
Jesse_Chen f53e2d09ed ops: add production PostgreSQL migration tooling 2026-08-09 13:20:06 +08:00
Jesse_Chen 04c4bd3ead ci: isolate staging dependency install
Staging Backend Quality Gate / validate (push) Has been cancelled
Staging Backend Quality Gate / publish (push) Has been cancelled
2026-08-09 13:18:47 +08:00
Codex 9b07e12b0c ops: prepare self-hosted production migration
Staging Backend Quality Gate / validate (push) Has been cancelled
Staging Backend Quality Gate / publish (push) Has been cancelled
2026-08-08 21:12:55 -04:00
Jesse_Chen 07223b6b4a fix(staging): extend Gitea publish timeout
Staging Backend Quality Gate / validate (push) Successful in 20m7s
Staging Backend Quality Gate / publish (push) Successful in 14m51s
2026-08-07 15:24:55 +08:00
Jesse f145f52b01 fix(staging): bound frontend quality build
Staging Backend Quality Gate / validate (pull_request) Successful in 11m6s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-07 00:06:45 +08:00
Jesse c1061695c7 fix(staging): retry exact gate checkout 2026-08-06 20:47:38 +08:00
Jesse 8473146773 fix(staging): deploy gate-attested controllers
Staging Backend Quality Gate / validate (pull_request) Successful in 14m1s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-06 19:18:04 +08:00
Jesse 975f5c346d fix(staging): bound trusted main fetch retries 2026-08-06 17:40:41 +08:00
Jesse cfc7af6b46 fix(staging): rotate SSH secret handling and env ownership
Staging Backend Quality Gate / validate (pull_request) Successful in 16m32s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-06 15:34:31 +08:00
Jesse_Chen fa65e76c77 Resolve staging manifest from actual artifacts
Staging Backend Quality Gate / validate (pull_request) Successful in 12m2s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-06 03:53:19 +08:00
Jesse_Chen 35fa0f0c78 Fix artifact inputs in Docker uploader
Staging Backend Quality Gate / validate (pull_request) Successful in 11m18s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-06 02:50:40 +08:00
Jesse_Chen fdd0dcdd3b Run vendored artifact uploader directly
Staging Backend Quality Gate / validate (pull_request) Successful in 14m17s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-06 02:14:34 +08:00
Jesse_Chen c1c2094b77 Fix local artifact action inputs
Staging Backend Quality Gate / validate (pull_request) Successful in 13m30s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-06 01:38:36 +08:00
Jesse_Chen 809b8391cc Include vendored artifact action entrypoint
Staging Backend Quality Gate / validate (pull_request) Successful in 13m47s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-06 01:00:10 +08:00
Jesse_Chen b412108a2b Vendor Gitea artifact upload action
Staging Backend Quality Gate / validate (pull_request) Has been cancelled
Staging Backend Quality Gate / publish (pull_request) Has been cancelled
2026-08-06 00:59:46 +08:00
Jesse_Chen f8ace3125a Use internal artifact action mirror
Staging Backend Quality Gate / validate (pull_request) Has been cancelled
Staging Backend Quality Gate / publish (pull_request) Has been cancelled
2026-08-06 00:54:16 +08:00
Jesse_Chen 11ae58c7e5 Use Gitea-compatible artifact upload action
Staging Backend Quality Gate / validate (pull_request) Successful in 13m27s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-06 00:08:18 +08:00
Jesse_Chen 88cdb6e6a0 Use runner-native artifact upload action
Staging Backend Quality Gate / validate (pull_request) Successful in 11m51s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-05 23:17:56 +08:00
Jesse_Chen 7d818d5e51 Keep registry auth through manifest capture
Staging Backend Quality Gate / validate (pull_request) Successful in 15m59s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-05 20:00:41 +08:00
Jesse_Chen 3b08826752 Run pinned Node integration tests on host
Staging Backend Quality Gate / validate (pull_request) Successful in 12m18s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-05 17:33:55 +08:00
Jesse_Chen c2949bbb50 Run integration tests on runner tooling
Staging Backend Quality Gate / validate (pull_request) Failing after 13m5s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-05 17:16:21 +08:00
Jesse_Chen 2e62dc15bf Skip unused Playwright setup in Gitea CI
Staging Backend Quality Gate / validate (pull_request) Failing after 16m38s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-05 16:53:28 +08:00
Jesse_Chen 0127321c06 Use reachable npm registry in Gitea CI
Staging Backend Quality Gate / validate (pull_request) Has been cancelled
Staging Backend Quality Gate / publish (pull_request) Has been cancelled
2026-08-05 16:41:23 +08:00
Jesse_Chen 9190b0edef Use reachable Playwright mirror in Gitea CI
Staging Backend Quality Gate / validate (pull_request) Has been cancelled
Staging Backend Quality Gate / publish (pull_request) Has been cancelled
2026-08-05 16:21:26 +08:00
Jesse_Chen a3a354e88f Install C++ compiler for Gitea CI
Staging Backend Quality Gate / validate (pull_request) Has been cancelled
Staging Backend Quality Gate / publish (pull_request) Has been cancelled
2026-08-05 15:57:46 +08:00
Jesse_Chen 77c663b9b7 Install Python headers for Gitea CI
Staging Backend Quality Gate / validate (pull_request) Failing after 5m19s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-05 15:48:09 +08:00
Jesse_Chen a49ab48936 Use existing PyPI mirror in Gitea CI
Staging Backend Quality Gate / validate (pull_request) Failing after 10m0s
Staging Backend Quality Gate / publish (pull_request) Has been skipped
2026-08-05 15:32:56 +08:00
Jesse_Chen c1543bdb5c Bound Gitea CI dependency resolution
Staging Backend Quality Gate / validate (pull_request) Has been cancelled
Staging Backend Quality Gate / publish (pull_request) Has been cancelled
2026-08-05 15:16:09 +08:00