32 Commits

Author SHA1 Message Date
Isabel Wu eb3d01ee50 ci: run Linux workspace tests on pull requests
Use the existing nextest, doctest, and lockfile gates on the Ubuntu matrix leg for heavy pull requests regardless of branch prefix. Keep CNB as the non-PR Linux path and assert the workflow contract for #5547.
2026-08-23 16:43:27 -07:00
CodeWhale Bot 959dbe4382 fix(release): promote tested v0.9.11 nonbenchmark candidate
Promotes the fully gated non-benchmark candidate while preserving the benchmark tree exactly from the prior release-PR head.

Signed-off-by: CodeWhale Bot <bot@codewhale.net>
2026-08-22 04:16:55 -07:00
Hunter Bown 9607e06e81 fix(ci): remove stale acid-bath test references
Stop invoking deleted brittle harnesses, drop the retired PTY nextest target, and preserve Agent Mail error and redaction behavior without duplicate branches.

Signed-off-by: Hunter Bown <hmbown@gmail.com>
2026-08-19 18:52:05 -07:00
Hunter Bown 7887498c7f test(ci): lock release workflow timeout budget (#5496)
Pin the measured 10/15/90 minute release-lane ceilings, exercise the timeout parser itself, and document the last-useful-log recovery rule for 404 or stalled runner logs.

Signed-off-by: Hunter Bown <hmbown@gmail.com>
2026-08-19 00:24:01 -07:00
Hunter Bown 2fcdce329f test(ci): hermeticize flaky config and service fixtures
Seal intentional config fixtures, isolate unsealed config/state/skills paths from the developer home, serialize persistent-service cases under nextest and libtest, and give the PDF success path a realistic timeout while retaining its short timeout regression.

Also treat removed or empty home variables as unsealed so tests cannot fall back into the user profile.

Verified with 477 config tests, 7 test-support tests, 27 config-persistence tests, 12 provider-key tests, 5 PDF tests, 3 nextest and 3 libtest persistent-service tests, workflow wiring checks, formatting, and diff checks.

Signed-off-by: Hunter Bown <hmbown@gmail.com>
2026-08-18 23:43:22 -07:00
CodeWhale Bot a6450ea7dc ci: bound every release-lane job and guard the bound (#5496)
#5495 capped `ci.yml`; the release path was left on GitHub's 360-minute
default. That is not theoretical — the v0.9.9 train had an assigned-but-dead
runner sit `in_progress` with 404 logs, and the operator rule (cancel/rerun
after 20 minutes of 404s) only limits damage while somebody is watching.

Twenty jobs were uncapped: all of `release-candidate.yml`,
`release-artifacts.yml`, `release.yml`, and `release-republish.yml`. Caps use
the four values agreed in the issue (candidate resolve 10, candidate web 15,
artifact build 90, and 15 each for bundle / windows-installer / assemble /
smoke) and size the rest against observed healthy durations with margin.

Jobs that call a reusable workflow are deliberately left alone: GitHub rejects
`timeout-minutes` on a `uses:` job, which is exactly why the artifact bounds
belong in `release-artifacts.yml` rather than in its callers.

The acceptance criterion asked for a test that fails when a new uncapped
release job appears, so the guard lands with the thing it guards. It walks each
workflow's job headers, skips `uses:` jobs, and requires an explicit
`timeout-minutes` — and it immediately found a job the manual pass missed,
`nightly.yml`'s `build`, now capped at 90 minutes alongside the artifact build.
It also asserts the artifact build keeps at least 60 minutes, because a tight
cap there would fail healthy Windows builds that historically run 40-45.

Timeouts are containment, not recovery: the runbook keeps the 404-log
cancel/rerun rule for infrastructure failures.

Verified: `node .github/scripts/release-workflows.test.js` passes; re-run with
an uncapped job spliced into release.yml it fails with
"release.yml: every job must set timeout-minutes (#5496)". All six workflows
still parse as YAML with their job counts unchanged.
2026-08-18 19:52:32 -07:00
CodeWhale Bot 83c8fb7fa4 fix(release): stamp CNB tag binaries
Bind the CNB tag build to the checked-out commit before compiling and fail if CNB's advertised commit disagrees. Keep the release notes on the same verified identity and lock the ordering in the workflow contract test.

No-Issue: owner-directed v0.9.9 CNB release identity gate
2026-08-18 02:00:59 -07:00
CodeWhale Bot f9519454ca fix(ci): close the CodeQL cache-poisoning Highs in the release workflows
All 19 open actions/cache-poisoning/poisonable-step alerts (#88-#106) sit in
release.yml, release-candidate.yml and release-artifacts.yml: jobs interpolated
the caller SHA into ref/caches and let setup-node's implicit npm cache key on
run identity. Now caller source_sha is pinned against github.sha by a pin job
(refusing any retarget), checkout and build identity use GITHUB_SHA through
env indirection instead of template interpolation, rust-cache keys use stable
prefix-key values, and setup-node's implicit package cache is off where it
cannot be keyed safely.

Also carries the CodeQL #107 fix from the same lane: catalog_models_dev.py
prints remote limit values as numbers/null/redacted only and drops query and
fragment material from source URLs before logging.

Harvested from #5401 (workflow+script files; CHANGELOG edit intentionally
excluded here and lands with the release branch; GHSA advisory text split to
a later PR as advised).

No-Issue: CodeQL alert remediation (alerts #88-#107); no single user-facing issue tracks these

Signed-off-by: Hunter Bown <hunter@hmbown.com>
2026-08-16 22:52:15 -07:00
CodeWhale Bot 5c53d7f16c feat(packaging): ship Homebrew as the codewhale formula
brew tap Hmbown/deepseek-tui && brew install codewhale is the install
path. The legacy deepseek-tui formula stays a deprecated alias for one
overlap release. TAP_REPO is unchanged.
2026-08-15 00:28:06 -07:00
CodeWhale Bot 3b45ce6052 fix(release): repair Homebrew recovery checkout
Run the recovery implementation from the protected default branch instead of restoring the old release commit that may contain the bug being repaired.

Keep release bytes pinned to the resolved tag and checksum manifest, and lock the split with workflow contract tests.

Signed-off-by: CodeWhale Bot <bot@codewhale.net>
2026-08-13 21:12:03 -07:00
CodeWhale Bot 15c46136f6 fix(release): preserve asset auth for npm publish 2026-08-13 02:03:52 -07:00
CodeWhale Bot 1ed798db56 fix(release): honor SOURCE_DATE_EPOCH in bundles (#5312)
Derive archive mtimes from the pinned source commit in release artifacts, retain reproducible archive bytes and executable modes, and cover metadata plus input validation.
2026-08-11 15:02:30 -07:00
CodeWhale Bot a77b12876f ci(release): publish npm through trusted OIDC
Bind npm publication to the exact release SHA after the public asset freshness gate, without a long-lived registry token. Document the npm-side publisher binding and interactive 2FA recovery path.\n\nCloses #5299
2026-08-11 12:52:11 -07:00
CodeWhale Bot 00aae33b44 fix(release): assemble container images from native artifacts 2026-08-10 18:12:14 -07:00
CodeWhale Bot 5798de8b39 build(release): native musl for Linux ARM64, and reconciled copy
Three v0.9.5 benchmark tasks could not launch Codewhale at all:
mteb-leaderboard, mteb-retrieve, and pytorch-model-recovery run older ARM64
images, and the aarch64-unknown-linux-gnu artifact built on ubuntu-24.04-arm
requires GLIBC_2.39.

Release and nightly now build aarch64-unknown-linux-musl on the native ARM
runner, alongside the x64 musl build that has shipped since v0.8.65. Both
gain a static check (no ELF INTERP) plus a launch smoke on the matching
native runner, so a dynamically linked or non-starting binary fails the
build rather than the user's install. docs/INSTALL.md drops the arm64 glibc
floor section and describes the v0.9.6 matrix.

Also reconciles the copy the earlier commits invalidated: setup ratification
text and all 15 locales stop attributing execution doctrine to "mode
prompts", docs/MODES.md states Auto-Review's actual deterministic
allow/deny behavior, and the source-structure, dead-code, and
runtime-contract budgets are re-measured — the last locking down 25
decreased ceilings and the new mode-agnostic prompt-stage digests.
2026-08-09 00:52:42 -07:00
CodeWhale Bot 5162341fd1 ci(cnb): match workspace test stack
Signed-off-by: CodeWhale Bot <bot@codewhale.net>
2026-08-08 19:59:20 -07:00
CodeWhale Bot b899c42be9 ci(cnb): bound Rust gate memory
Signed-off-by: CodeWhale Bot <bot@codewhale.net>
2026-08-08 19:18:47 -07:00
CodeWhale Bot cd4bf73215 fix(ci): target consolidated PTY acceptance
Run the isolated Skills Manager scenario through the pty integration-test binary and use its module-qualified name so --exact executes one test instead of zero. Lock the command into the workflow contract and update the durable TUI verification examples.

Verified with the exact ignored PTY command, the workflow contract test, actionlint YAML/expression checks, and git diff --check.
2026-08-08 05:03:43 -07:00
CodeWhale Bot ef6104957d fix(release): close consolidated runtime contract gaps
Keep provider-neutral auto selection in the provider-aware TUI and launch workflow lanes from the exact running executable. Repair CNB and installer alias contracts, refresh legacy website-installed TUI bytes during upgrades, and make account pull reject an unimplemented local import truthfully.\n\nVerified with focused CLI/config tests, strict Clippy, workflow contracts, shell syntax checks, and hermetic web installer tests.
2026-08-08 02:24:47 -07:00
CodeWhale Bot 471c6d8bb0 fix(ci): align nightlies with the single runtime
Build only the codewhale executable, then stage codewhale and codew from the same bytes for every retained nightly target. Native jobs smoke only the executable that Cargo actually produced, while tagged-release TUI bridge filenames remain out of the nightly command contract.\n\nExtend the workflow contract test to lock the six-target, twelve-artifact inventory, byte-identity check, native smoke selection, and 14-day retention.
2026-08-07 21:52:11 -07:00
CodeWhale Bot e291350b4c fix(release): bridge the 0.9.5 single runtime
Build codewhale once, expose the verified bytes as codew across release channels, and retain seven TUI-named release aliases solely so shipped v0.9.4 clients can discover and cross the transition. Current installers and containers expose only codewhale and codew.\n\nVerified with the npm asset suite, exact 34-asset assembly, workflow contract, Homebrew renderer, release-body, dogfood installer, and shell syntax tests.\n\nRefs #5259
2026-08-07 21:36:17 -07:00
Hunter B 9729924244 test(release): close review nits
Repair the command escaping helper so future metacharacters cannot weaken the workflow contract, and remove the redundant installer path branch.

Signed-off-by: Hunter B <hmbown@gmail.com>
2026-07-18 09:05:48 -07:00
Hunter B bdcc746890 security(release): pin every publication-path action
Resolve each remote Action used by candidate artifact construction or public publication to the current audited commit, retaining the release version as an update hint.\n\nAdd a contract test that rejects mutable remote refs in all three release workflows and clean up the affected shell blocks so configured actionlint remains green.

Signed-off-by: Hunter B <hmbown@gmail.com>
2026-07-18 09:01:26 -07:00
Hunter B ed43029fc9 ci(release): verify the exact candidate web surface
Checkout the resolved candidate SHA in a dedicated read-only web job and require public facts, docs, tests, lint, type checking, and the production build before constructing any release artifacts.\n\nKeep the candidate workflow non-publishing and bind artifact creation to the web gate result.

Signed-off-by: Hunter B <hmbown@gmail.com>
2026-07-18 08:52:03 -07:00
Hunter B 18d344fb18 fix(release): refuse published asset replacement
Fail before build work and again immediately before upload whenever a tag already owns GitHub Release assets. Disable the release action overwrite path and document that recovery requires a deliberate maintainer decision instead of silently replacing public bytes.

Signed-off-by: Hunter B <hmbown@gmail.com>
2026-07-18 08:22:48 -07:00
Hunter B 6edae36db0 ci(release): add exact-head candidate artifacts
Factor the seven-target release build and 34-file asset assembly into a read-only reusable workflow shared by public releases and a manual non-publishing candidate path. Manual CI now validates the requested SHA and runs the full Linux, macOS, Windows, npm, mobile, workflow, Actions, and docs gates instead of light placeholders.

Add checksum/inventory contracts, archive fixtures, packaged-wrapper smoke against assembled assets, and an explicit publication stop line in the release runbook.

Signed-off-by: Hunter B <hmbown@gmail.com>
2026-07-18 08:16:28 -07:00
Hunter B d45aa0ef66 fix(automation): make agent task intake release-neutral
Retire the v0.8.68 label-to-milestone synchronizer now that milestone 53 is historical. Keep area-hint labeling only for newly opened agent-ready tasks and require maintainers to assign roadmap milestones explicitly.\n\nMake the issue form version-neutral, document the historical boundary, and add a CI contract that rejects release-pinned defaults or milestone mutation APIs.
2026-07-15 17:20:14 -07:00
Hunter B 67074c84f9 fix(homebrew): install the complete Codewhale command set
Generate current provider-neutral formula copy, install and smoke codew alongside codewhale and codewhale-tui, and exercise the rendered formula contract in always-on CI.
2026-07-15 03:21:14 -07:00
Hunter B 9b500a7b91 Prepare v0.9.0 release build 2026-06-06 19:39:02 -07:00
PMX b4d1bce58b fix: Homebrew formula downloads legacy shim instead of codewhale dispatcher (#2105)
The formula downloaded deepseek-macos-arm64 (the deprecation shim) as the
main binary.  After the rebranding, deepseek is just a wrapper that spawns
codewhale, but codewhale was never installed — causing "codewhale not
found on PATH" for every Homebrew user.

Now the formula downloads codewhale-* as the primary binary and installs
all four artifacts: codewhale, codewhale-tui, deepseek (legacy shim), and
deepseek-tui (legacy TUI shim).

Closes #2104

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-26 10:30:25 -05:00
Hunter Bown 5fa24733e9 chore(rebrand): update repository links for CodeWhale
Sync to CNB / sync (push) Has been cancelled
Release / parity (push) Has been cancelled
Release / resolve (push) Has been cancelled
Release / build (codewhale-linux-arm64, codewhale, ubuntu-24.04-arm, aarch64-unknown-linux-gnu) (push) Has been cancelled
Release / build (codewhale-linux-x64, codewhale, ubuntu-latest, x86_64-unknown-linux-gnu) (push) Has been cancelled
Release / build (codewhale-macos-arm64, codewhale, macos-latest, aarch64-apple-darwin) (push) Has been cancelled
Release / build (codewhale-macos-x64, codewhale, macos-latest, x86_64-apple-darwin) (push) Has been cancelled
Release / build (codewhale-tui-linux-arm64, codewhale-tui, ubuntu-24.04-arm, aarch64-unknown-linux-gnu) (push) Has been cancelled
Release / build (codewhale-tui-linux-x64, codewhale-tui, ubuntu-latest, x86_64-unknown-linux-gnu) (push) Has been cancelled
Release / build (codewhale-tui-macos-arm64, codewhale-tui, macos-latest, aarch64-apple-darwin) (push) Has been cancelled
Release / build (codewhale-tui-macos-x64, codewhale-tui, macos-latest, x86_64-apple-darwin) (push) Has been cancelled
Release / build (codewhale-tui-windows-x64.exe, codewhale-tui.exe, windows-latest, x86_64-pc-windows-msvc) (push) Has been cancelled
Release / build (codewhale-windows-x64.exe, codewhale.exe, windows-latest, x86_64-pc-windows-msvc) (push) Has been cancelled
Release / build (deepseek-linux-arm64, deepseek, ubuntu-24.04-arm, aarch64-unknown-linux-gnu) (push) Has been cancelled
Release / build (deepseek-linux-x64, deepseek, ubuntu-latest, x86_64-unknown-linux-gnu) (push) Has been cancelled
Release / build (deepseek-macos-arm64, deepseek, macos-latest, aarch64-apple-darwin) (push) Has been cancelled
Release / build (deepseek-macos-x64, deepseek, macos-latest, x86_64-apple-darwin) (push) Has been cancelled
Release / build (deepseek-tui-linux-arm64, deepseek-tui, ubuntu-24.04-arm, aarch64-unknown-linux-gnu) (push) Has been cancelled
Release / build (deepseek-tui-linux-x64, deepseek-tui, ubuntu-latest, x86_64-unknown-linux-gnu) (push) Has been cancelled
Release / build (deepseek-tui-macos-arm64, deepseek-tui, macos-latest, aarch64-apple-darwin) (push) Has been cancelled
Release / build (deepseek-tui-macos-x64, deepseek-tui, macos-latest, x86_64-apple-darwin) (push) Has been cancelled
Release / build (deepseek-tui-windows-x64.exe, deepseek-tui.exe, windows-latest, x86_64-pc-windows-msvc) (push) Has been cancelled
Release / build (deepseek-windows-x64.exe, deepseek.exe, windows-latest, x86_64-pc-windows-msvc) (push) Has been cancelled
Release / docker (push) Has been cancelled
Release / release (push) Has been cancelled
Release / homebrew (push) Has been cancelled
2026-05-23 14:07:36 -05:00
ZzzPL 9f3a1ec951 feat(ci): auto-update Homebrew tap formula on release
Add a release follow-up job that updates the Homebrew tap from the checksum manifest when a tap token is configured.

The job now skips before checkout/download/update when neither HOMEBREW_TAP_PAT nor RELEASE_TAG_PAT is configured, so missing tap credentials do not fail an otherwise successful release.

Closes #1602.

Co-authored-by: Zhiping <2716057626@qq.com>
Co-authored-by: Oliver-ZPLiu <47081637+Oliver-ZPLiu@users.noreply.github.com>
2026-05-14 14:10:25 -05:00