mirror of https://github.com/garrytan/gstack.git
* ci: bump CI image Bun 1.3.10 -> 1.3.13
Matches the local toolchain and brings native `bun test --shard=M/N` /
--parallel to CI (needed by the free-test lane and shard runner work).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* ci: stop version bumps rebuilding the eval Docker image (cache key trio)
Three coupled fixes, atomic because any subset is worse than none:
1. Image tag keys on hashFiles(Dockerfile.ci, bun.lock) — package.json is
out: its version field changed on 60/60 recent commits, forcing a ~2min
image rebuild per PR for a dependency set only bun.lock determines.
2. ci-image.yml now pushes that same content-hash tag (previously only
:latest/:sha, so the weekly prebuild never warmed the tag the eval
matrix actually looks up) and both eval workflows get registry layer
cache (cache-to export gated to same-repo runs; fork tokens cannot
write GHCR).
3. Dockerfile bakes /opt/node_modules_cache/.bun.lock and the runtime
Restore-deps guard diffs bun.lock instead of package.json — otherwise
every version-only bump made all 14 matrix jobs fall back to a live
bun install, which is slower than today's behavior.
Worst-case failure mode is self-healing: a missing tag or cache falls
back to exactly the previous rebuild-and-install path.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* ci: stop double-running lint + skill-docs on every PR commit
Both fired on unrestricted push AND pull_request, so each PR push ran
them twice (12 duplicate (headSha, workflow) pairs in the last 200 runs).
push is now main-only; pull_request covers PR branches.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* ci: run actionlint from the prebuilt image (16s -> ~2s)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* ci: right-size five single-core jobs to ubicloud-standard-2
actionlint, skill-docs, version-gate, pr-title-sync, and the evals report
job never exceed one core; standard-8 was ~4x the cost for zero wall-clock.
build-image and the eval matrix keep standard-8.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* ci: fix workflow_dispatch concurrency collisions (head_ref || run_id)
head_ref is empty on workflow_dispatch, so every manual dispatch of these
four workflows shared one empty-suffix group and cancelled each other.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* ci(windows): cache bun installs; run the curated suite, not a hand list
- actions/cache on ~/.bun/install/cache keyed on bun.lock (install was
35-45s of both 55-64s jobs, all network) and Bun pinned to 1.3.13 to
match the other lanes.
- windows-free-tests now runs `bun run test:windows` (the runner's
--windows-only curation) instead of a hand-listed 13-file subset that
had drifted from the registry it sampled. POSIX-bound tests get
excluded in ONE place (the curation patterns), not two.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* evals: retry 1, not 2, on every paid path
Measured on the llm-judge shard: --retry 2 amplified 25 tests into 46
executions (+84%), with retried runs at 138s vs a 10-12s baseline (429
backoff), and a permanently-failing test paying 3x. One retry still
absorbs one-off flakes; chronic flakes become visible fix-work instead
of silent wall-clock.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* evals: split skill-e2e-review into three per-file CI shards
Bun runs describe blocks as concurrency barriers, so the e2e-review CI
job executed its tests serially: 741s of an 860s PR critical path for
tests whose slowest member is 224s. The per-file matrix is the repo's
parallelism unit, so the split moves:
- Retro E2E + retro-base-branch -> test/skill-e2e-retro.test.ts
- review/ship base-branch + Review Dashboard Via Attribution
-> test/skill-e2e-review-attribution.test.ts
- sql-injection / enum-completeness / design-lite stay in
test/skill-e2e-review.test.ts
One 741s job becomes three ~180-250s jobs. Locally the worst paid shard
drops from 1705s (94.7% of the 1800s kill) to under 700s. Test names,
bodies, suite strings, and eval-store collectors are unchanged, so
baselines carry over. Matrix rows added to both eval workflows
(attribution is gate-only, so no periodic row); the report job's
hardcoded runner count is gone (drift-proof).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* test: gate security-bench on SECURITY_BENCH=1, not model-cache existence
The existsSync gate ran ~12s of ONNX inference (plus a HuggingFace
dataset fetch) on every free-suite run on any dev box that had ever
warmed the classifier, while CI (no cache) silently skipped it. Now
explicit opt-in: SECURITY_BENCH=1 bun test browse/test/security-bench.test.ts.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* test: watchdog E2E in 1.5s instead of 22.7s (tunable poll interval)
server.ts gains BROWSE_WATCHDOG_INTERVAL_MS (floor 50ms, default 15s
unchanged). The #994 stay-alive test runs a 250ms tick and waits for the
stay-alive log line instead of blind-sleeping 2s + 20s past the
production interval.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* test: dedupe coverage gates; route both walks through skill-census
skill-coverage-floor duplicated two matrix assertions (registry
completeness, gate-tier floor) with a DIFFERENT hand-rolled directory
walk — matrix's skipped nothing, floor's skipped node_modules/docs/test.
Two 'same' gates disagreeing on the census is the bug class
test/helpers/skill-census.ts was written to kill. Registry assertions
now live in matrix only (with floor's better error message), both files
walk via skillCensus().authoredSkills, and floor keeps the per-skill
structural checks it owns.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* evals: EVALS_JOBS for shard processes; explicit within-shard concurrency
EVALS_CONCURRENCY was overloaded: the legacy bun-test path used it as
--max-concurrency (default 15) while the sharded runner read it as the
process count — exporting the legacy value gave 15 concurrent Bun
processes each spawning claude (the 429 storm). Now: EVALS_JOBS = shard
processes (default 4); EVALS_CONCURRENCY = bun --max-concurrency inside
a shard (default 4, explicit in shard args — omitting it made
within-shard parallelism silently differ from the legacy path). Stale
49/59 header math replaced with the live-count rule.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* evals: enforce detach-timeout floor from the live shard census
New free tripwire: eval:bg:gate / eval:bg:periodic --timeout must cover
ceil(shards/jobs) x shard-timeout x 1.05, recomputed from the actual paid
test census every run. Hand-derived numbers go stale every time a paid
file lands — the review split just proved it: periodic's 28800s dropped
BELOW its new 32130s worst case (raised to 32400s here). An undersized
watchdog kills healthy runs and the tail reports never-started.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* evals: preflight ping once in the sharded parent, not per shard
The Anthropic fail-fast ping ran at module load in every paid test file
importing e2e-helpers — ~30 paid claude -p calls (30s timeout each) per
full sharded run for one bit of information. The parent now pings once
before spawning shards and sets EVALS_PREFLIGHT_OK=1; the module-load
path honors the flag. Extracted to test/helpers/anthropic-preflight.ts
(injectable spawn seam) with regression pins in both directions: the
flag must skip, its absence must ping exactly once, dead API must throw.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* evals: split touchfiles into pure data + selection logic + facade
touchfiles.ts listed ITSELF in GLOBAL_TOUCHFILES, so adding one test's
dep entry forced the full ~$38 / 30-45min suite — measured on 21.9% of
recent commits (42/192). The self-reference existed because data and
logic shared a file: any edit COULD be a selection-logic change.
Now: touchfiles-data.ts (the four maps, literals only, zero imports —
the future map-diff target), test-selection.ts (matchGlob/detectBase
Branch/getChangedFiles/selectTests), and touchfiles.ts as a re-export
facade so all ~12 import sites are untouched. GLOBAL_TOUCHFILES drops
the self-ref, adds test-selection.ts (logic stays maximally
conservative), and TEMPORARILY adds touchfiles-data.ts until the
map-diff change lands. New free test pins the literal-only property
(comment-aware state-machine scan with a self-test) and facade export
parity (===), so neither can silently rot.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* test: free runner — strict output, parallel execution, stable shard indices
Three coupled changes to scripts/test-free-shards.ts:
1. STRICT OUTPUT: runFreeShard streams through the paid runner's
BunTestOutputClassifier — exit 0 without bun's 'Ran N tests across M
files' summary, with (fail) lines, or with a wrong file count is a
FAILURE (anti-truncation backstop at the runner layer), plus an
external wall-clock timeout that SIGKILLs the process group
(timed-out distinct from failed; exit 124 vs 1). Also fixes a latent
shard-bleed: file selectors now use exactTestFileSelectors (relative
paths were substring filters that matched sibling roots).
2. PARALLEL: full-suite mode is one 'bun test --parallel' invocation
(Bun 1.3.13). Measured semantics recorded in the header: per-file
worker isolation, standard summary, and mid-suite process.exit
surfaces as a crashed-worker FAIL with exit 1 — strictly safer than
serial, where the same exit truncates silently. No static weight
lists; --shards M --shard i keeps deterministic hash partitioning for
CI matrices (native --shard rejected: round-robin renumbers when
files land). Spawned shards get throwaway GSTACK_HOME/TMPDIR so
parallel shards can't contend on real state. Per-shard epilogue
prints files/seconds/status every run.
3. Stable indices: assignFilesToShards no longer drops empty shards, so
a shard's index depends only on the file hash and requested count —
an empty CI matrix slot is a fast no-op success, not a renumbering.
package.json 'test' now delegates to the runner (TEST_ROOTS becomes the
single source of truth for roots; slop:diff tail preserved; the runner
inherits the 30s per-test timeout the old glob passed inline).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* ci: Linux free-test lane — ~400 files get CI coverage for the first time
New required, secretless free-tests job: the canonical runner's single
'bun test --parallel' invocation with strict-output classification on
ubicloud-standard-8. The free suite previously ran on NO Linux CI — only
a curated Windows subset ran anywhere — so every 'tests pass' claim
about main rested on contributors running them locally.
Secretless by design (no API keys; fork PRs finally get real test
signal) and pinned by test/free-tests-workflow-wiring.test.ts: canonical
runner invoked, zero secrets.* references, pull_request never
pull_request_target, and matrix-count/--shards agreement if anyone
switches to the sharded fallback.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* evals: map-diff selection — a touchfiles-data edit runs only what changed
Editing the eval dep-list data no longer forces the full ~$38 /
30-45min suite (measured on 21.9% of recent commits). When
touchfiles-data.ts is in the diff, selection now evaluates the BASE
version (git show -> mkdtemp -> spawnSync bun child printing the four
maps as JSON — sync because e2e-helpers selects at module scope) and
JSON-diffs per key: added entries, edited dep lists, and tier flips are
selected; keys removed from all maps are reported, never silently
dropped; a GLOBAL_TOUCHFILES edit still runs everything.
FAIL-CLOSED with named causes: missing-base-ref, git-show-failed,
import-failed, shape-mismatch each degrade to run-all and print
'selection: global — touchfiles-data changed (<cause>)' (D9 — silently
expensive beats silently wrong, but never silently). eval:select prints
'selected N of M, reason: ...' + removed tests; --base scopes the
map-diff too.
The temporary conservative GLOBAL entry for touchfiles-data.ts is gone —
its changes route through the map-diff. 23 new free tests: pure-core
fixtures, selectTests wiring incl. a poison-injection guard, and a temp
git repo exercising every fail-closed cause end-to-end.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* evals: selection sees uncommitted work; git errors fail closed
getChangedFiles is now the deduped union of committed (base...HEAD),
staged+unstaged (git diff HEAD), and untracked (git status --porcelain
--untracked-files=all) — an agent that edits files and runs evals
BEFORE committing no longer gets the full $38 suite every time because
the committed diff looked empty. Clean tree still returns [] (run-all
by design for main-branch/periodic runs).
Git failures now THROW with the failing command, stderr, and 'set
EVALS_ALL=1 to deliberately run the full suite' — the old return []
silently became run-all, which is silently expensive. 11 new free tests
cover every source, dedupe, quoted paths, and both failure shapes via
an injectable spawn seam.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* test: revert GSTACK_HOME injection in the free runner — shared mutable state
The first full run under the strict runner surfaced 12 failures with one
root cause: injecting a single throwaway GSTACK_HOME per invocation made
6,900 tests share a MUTABLE scratch home. gstack-config tests wrote keys
into it; relink and update-check tests then read them (e.g. relink saw
skill_prefix left behind by a config test and produced prefixed names).
All 12 pass when run directly.
TMPDIR isolation stays (mkdtemp inside it is still per-call unique).
Tests needing GSTACK_HOME isolation mkdtemp their own per test — the
repo convention — and hermetic-env covers E2E children. The env-dump pin
now asserts GSTACK_HOME passes through UNTOUCHED so the injection can't
come back.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* test: rebase parity baseline to v1.64.0.0; fix capture-vs-check drift
The parity ratchet had quietly failed for 7 skills — v1.58-v1.64 growth
landed past the v1.57.7.0 anchors and nothing caught it because this
test had no CI lane (verified pre-existing: SKILL.md content is
byte-identical to origin/main). Same rebase protocol as
v1.53->v1.57.7.0; old baseline retained for the audit trail.
Root-caused a second latent bug while rebasing: captureBaseline recorded
SKELETON-ONLY bytes while the checker compares UNION bytes (skeleton +
carved sections/*.md), so a fresh capture read carved skills at ~2x
ratio (ship: 82KB captured vs 183KB checked). captureBaseline now takes
sectionedSkills and records unions for carved skills — capture and check
measure the same thing, so the NEXT rebase can't hit this. Four
CARVE_GUARDS skeleton caps re-ratcheted to current +headroom
(plan-ceo 92K, plan-eng 70K, office-hours 100K, design-consultation
70K), annotated inline.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix: package.json version matches VERSION (1.64.0.0)
v1.64.0.0 shipped with VERSION bumped but package.json left at 1.63.0.0
— the 'package.json version matches VERSION file' test fails on
origin/main today. Nothing caught it because that test had no CI lane
until this branch's free-tests job.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* test: fix variants-retry-after HTTP-date flake (TODOS P2)
toUTCString() truncates to whole seconds, so a +3000ms Retry-After date
could mean an effective wait of ~2001ms — flaking against the 2500ms
assertion floor ~1-2 in 9 runs under suite load. +4000ms puts the
truncation floor at 3001ms with the assertion floor safely below it.
Pulled forward from U4 because the free-tests lane is now a required
check and this flake would randomly block PRs.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* test: skill-fixture helper — extract SKILL.md sections, don't copy files
extractSkillSections (fence-aware H2 scanner, loud-throw on missing
sections with available-heading list), extractSkillBody (drops the
shared generated preamble), extractSkillHead (frontmatter + first 30
lines, for routing fixtures). Pinned section lists per consumer, and
free-tier real-skill pins so a gen-skill-docs heading rename fails the
FREE suite instead of a paid run. skill-fixture.ts joins
GLOBAL_TOUCHFILES (fail-safe polarity: over-select).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* test(evals): review E2E fixtures extract sections — 1871 -> 207 lines
CLAUDE.md's extract-don't-copy rule, applied: the three review fixtures
carry only the sections the sql-injection/enum/design-lite prompts and
judges exercise (89% cut). Full-file copies made claude -p read 1871
lines per test — the direct cause of the 1705s worst shard (94.7% of
the 1800s kill).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* test(evals): retro E2E fixtures extract sections — 1821 -> 757 lines
Keeps every section the retro flow exercises incl. base-branch detect;
drops preamble, Global Retrospective Mode, Compare Mode (58% cut).
retro-base-branch was the single slowest CI test at 224s.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* test(evals): review-army fixture extracts sections — 1871 -> 650 lines
CS1's set plus Step 1.5 (PLAN COMPLETION AUDIT machinery) and Step 4.5
(army dispatch, quality_score, findings schema) that the 7 army tests
assert on. Pin test guards the three load-bearing strings.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* test(evals): skillify fixtures via extractSkillBody — 63-83% smaller
Tests follow all 11 skillify steps, so the whole body stays; only the
shared generated preamble drops (skillify 1239->453, scrape 958->167).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* test(evals): context-skills fixtures via extractSkillBody — 74-82% smaller
context-save 1037->267 lines, context-restore 952->168; the 8 tests
exercise full save/restore/list flows so the body stays, preamble drops.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* test(evals): opus-47 discovery fixtures via extractSkillHead — ~95% smaller
Routing/fanout tests only read frontmatter + opening lines of the 14
installed skills (review 1871->54, office-hours 1706->80).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* test(evals): codex runner gains sections option — review variant 88% smaller
runCodexSkill/installSkillToTempHome accept sections?: string[] routed
through extractSkillSections; codex-review-findings wired (1465->181
lines). codex-discover-skill deliberately keeps the FULL copy — its
stderr assertions validate that the real generated artifact loads.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* test(evals): routing fixture installs skill HEADS, not ~18 full SKILL.md
Routing reads frontmatter only; extractSkillHead per skill (root
611->48, ship 1435->54 lines). This was the single worst fixture bloat
site: one fixture dir holding ~18 full skills.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* evals: parent-side shard skipping — a one-test diff runs 3 of 44 shards
The sharded runner spawned every shard regardless of diff; only the
child self-skipped, so a typical single-skill change still paid 44 Bun
boots + container-equivalent setup for shards with zero selected tests.
The parent now computes selection once (mirroring e2e-helpers exactly:
EVALS_ALL -> run-all, empty union -> run-all, git errors propagate the
fail-closed throw) and drops shards where no selected test name maps in.
Mapping = quoted E2E map keys in the file's source UNION keys whose dep
list registers the file (constructed-name families need the second
direction). FAIL-OPEN everywhere it matters: run-all, non-skill-e2e
files, unreadable source, zero mapped names all keep the shard — the
child filter stays authoritative, so a parent bug can only run extra.
New taxonomy status skipped-by-diff (never conflated with
never-started); selection banner prints once; --list is selection-aware.
C6 lands in the same commit: a HARD tier-alignment test — every paid
skill-e2e file must be parent-mappable or provably fail-open-safe.
Note: this change-set's 14 dep-list registrations in touchfiles-data.ts
rode along in
|
||
|---|---|---|
| .. | ||
| fixtures | ||
| helpers | ||
| agent-sdk-runner.test.ts | ||
| analytics.test.ts | ||
| anthropic-preflight.test.ts | ||
| artifacts-init-migration.test.ts | ||
| audit-compliance.test.ts | ||
| auq-error-fallback-hook.test.ts | ||
| auq-format-always-loaded.test.ts | ||
| basic-ftp-security-pin.test.ts | ||
| benchmark-cli.test.ts | ||
| benchmark-runner.test.ts | ||
| bin-windows-bun-import-paths.test.ts | ||
| brain-cache-roundtrip.test.ts | ||
| brain-cache-spec.test.ts | ||
| brain-preflight.test.ts | ||
| brain-sync-windows-paths.test.ts | ||
| brain-sync.test.ts | ||
| build-gbrain-env.test.ts | ||
| build-script-shell-compat.test.ts | ||
| builder-profile.test.ts | ||
| cache-concurrent-refresh.test.ts | ||
| carve-guard-completeness.test.ts | ||
| carve-guards-negative.test.ts | ||
| carve-section-loading.test.ts | ||
| carve-section-ordering.test.ts | ||
| catalog-budget.test.ts | ||
| catalog-mode-full.test.ts | ||
| catalog-trim.test.ts | ||
| changed-files-union.test.ts | ||
| claude-provider-keychain.test.ts | ||
| code-intelligence.test.ts | ||
| codex-e2e-plan-format.test.ts | ||
| codex-e2e-recommendation-substance.test.ts | ||
| codex-e2e.test.ts | ||
| codex-hardening.test.ts | ||
| codex-resume-flag-semantics.test.ts | ||
| conductor-env-shim.test.ts | ||
| context-bill.test.ts | ||
| context-save-hardening.test.ts | ||
| cso-preserved.test.ts | ||
| cso-spec-taxonomy-alignment.test.ts | ||
| declared-annotation.test.ts | ||
| design-flag-utils.test.ts | ||
| dev-setup-render-isolation.test.ts | ||
| diagram-render-drift.test.ts | ||
| diff-scope.test.ts | ||
| discover-section-templates.test.ts | ||
| distill-apply.test.ts | ||
| distill-free-text.test.ts | ||
| docs-config-keys.test.ts | ||
| document-skills-redaction.test.ts | ||
| e2e-harness-audit.test.ts | ||
| e2e-tier-alignment.test.ts | ||
| egress-lib.test.ts | ||
| egress-receipt-wiring.test.ts | ||
| egress-receipt.test.ts | ||
| eval-detach-timeout-floor.test.ts | ||
| eval-list-cli.test.ts | ||
| eval-model.test.ts | ||
| exit-propagation.test.ts | ||
| explain-level-config.test.ts | ||
| extension-pty-inject-invariant.test.ts | ||
| founder-resources-optout.test.ts | ||
| free-tests-workflow-wiring.test.ts | ||
| fs-atomic.test.ts | ||
| gate-secret-scan.test.ts | ||
| gbrain-cycle-completed.test.ts | ||
| gbrain-detect-install.test.ts | ||
| gbrain-detect-shape.test.ts | ||
| gbrain-detection-override.test.ts | ||
| gbrain-dream-stage.test.ts | ||
| gbrain-exec-invariant.test.ts | ||
| gbrain-guards.test.ts | ||
| gbrain-init-rollback.test.ts | ||
| gbrain-init-voyage-code-3.test.ts | ||
| gbrain-lib-validate-varname.test.ts | ||
| gbrain-lib-verify.test.ts | ||
| gbrain-local-status.test.ts | ||
| gbrain-refresh-install-render.test.ts | ||
| gbrain-repo-policy.test.ts | ||
| gbrain-source-gitignore.test.ts | ||
| gbrain-sources-parse.test.ts | ||
| gbrain-sources.test.ts | ||
| gbrain-spawn-windows-shell.test.ts | ||
| gbrain-supabase-provision.test.ts | ||
| gbrain-sync-skip.test.ts | ||
| gbrain-sync-voyage-code-3-integration.test.ts | ||
| gemini-e2e.test.ts | ||
| gen-skill-docs-idempotency.test.ts | ||
| gen-skill-docs-out-dir.test.ts | ||
| gen-skill-docs.test.ts | ||
| global-discover.test.ts | ||
| gstack-artifacts-init.test.ts | ||
| gstack-artifacts-url.test.ts | ||
| gstack-brain-context-load.test.ts | ||
| gstack-codex-session-import.test.ts | ||
| gstack-config-key-locale.test.ts | ||
| gstack-config-redact-keys.test.ts | ||
| gstack-decision-bins.test.ts | ||
| gstack-decision-semantic.test.ts | ||
| gstack-decision.test.ts | ||
| gstack-detach.test.ts | ||
| gstack-developer-profile.test.ts | ||
| gstack-egress-cli.test.ts | ||
| gstack-gbrain-detect-mcp-mode.test.ts | ||
| gstack-gbrain-mcp-verify.test.ts | ||
| gstack-gbrain-source-wireup.test.ts | ||
| gstack-gbrain-sync.test.ts | ||
| gstack-learnings-search.test.ts | ||
| gstack-memory-helpers.test.ts | ||
| gstack-memory-ingest.test.ts | ||
| gstack-next-version.test.ts | ||
| gstack-paths.test.ts | ||
| gstack-question-log.test.ts | ||
| gstack-question-preference.test.ts | ||
| gstack-redact-cli.test.ts | ||
| gstack-repo-mode.test.ts | ||
| gstack-schema-pack.test.ts | ||
| gstack-session-kind.test.ts | ||
| gstack-settings-hook-schema-aware.test.ts | ||
| gstack-slug-cwd-walk-up.test.ts | ||
| gstack-slug-sanitize.test.ts | ||
| gstack-state-root-override.test.ts | ||
| gstack-team-init-hook-schema.test.ts | ||
| gstack-upgrade-migration-v1_17_0_0.test.ts | ||
| gstack-upgrade-migration-v1_37_0_0.test.ts | ||
| gstack-upgrade-migration-v1_40_0_0.test.ts | ||
| gstack-version-bump.test.ts | ||
| helpers-unit.test.ts | ||
| hermetic-skills-seeding.test.ts | ||
| hermetic-wiring.test.ts | ||
| hook-scripts.test.ts | ||
| hooks-windows-paths.test.ts | ||
| host-config.test.ts | ||
| investigate-freeze-path.test.ts | ||
| ios-qa-regen.test.ts | ||
| ios-qa-stateserver-hardening.test.ts | ||
| ios-qa-swiftui-tap-regression.test.ts | ||
| is-conductor.test.ts | ||
| jargon-list.test.ts | ||
| jsonl-merge.test.ts | ||
| jsonl-store.test.ts | ||
| land-and-deploy-postfail.test.ts | ||
| learnings-injection.test.ts | ||
| learnings.test.ts | ||
| llm-judge-recommendation.test.ts | ||
| llms-txt-shape.test.ts | ||
| memory-cache-injection.test.ts | ||
| memory-ingest-include-gitignored.test.ts | ||
| memory-ingest-no-put_page.test.ts | ||
| memory-ingest-timeout.test.ts | ||
| migration-checkpoint-ownership.test.ts | ||
| migrations-v1.27.0.0.test.ts | ||
| migrations-v1.65.0.0.test.ts | ||
| mktemp-portability.test.ts | ||
| model-overlay-fable-5.test.ts | ||
| model-overlay-opus-4-7.test.ts | ||
| model-overlay-opus-4-8.test.ts | ||
| model-overlay-sonnet-5.test.ts | ||
| no-quoted-tilde-assignments.test.ts | ||
| no-stale-gstack-brain-refs.test.ts | ||
| no-suicide-exit.test.ts | ||
| one-way-doors.test.ts | ||
| openclaw-native-skills.test.ts | ||
| paid-shards.test.ts | ||
| pair-agent-token-hygiene.test.ts | ||
| parity-baseline-integrity.test.ts | ||
| parity-sectioned.test.ts | ||
| parity-suite.test.ts | ||
| plan-tune-gates.test.ts | ||
| plan-tune.test.ts | ||
| post-rename-doc-regen.test.ts | ||
| pr-title-rewrite.test.ts | ||
| pr-title-sync-workflow-safety.test.ts | ||
| preamble-compose.test.ts | ||
| preamble-first-task-scaffold.test.ts | ||
| pty-askuserquestion-single-line.test.ts | ||
| pty-skill-seeding-wiring.test.ts | ||
| question-log-hook.test.ts | ||
| question-preference-hook.test.ts | ||
| readme-throughput.test.ts | ||
| redact-audit-log.test.ts | ||
| redact-doc-resolver.test.ts | ||
| redact-engine-autoredact.test.ts | ||
| redact-engine.test.ts | ||
| redact-pattern-lint.test.ts | ||
| redact-prepush-hook.test.ts | ||
| redact-semantic-pass.eval.ts | ||
| regression-1539-review-self-verify.test.ts | ||
| regression-1611-gbrain-sync-resume.test.ts | ||
| regression-1624-retro-stale-base.test.ts | ||
| regression-issue2091-bsd-mktemp.test.ts | ||
| regression-pr1169-build-app-sed.test.ts | ||
| regression-pr1169-mktemp-fallbacks.test.ts | ||
| relink.test.ts | ||
| required-reads.test.ts | ||
| resolver-ask-user-format.test.ts | ||
| resolvers-gbrain-put-rewrite.test.ts | ||
| resolvers-gbrain-save-results.test.ts | ||
| review-log.test.ts | ||
| run-in-background-guidance.test.ts | ||
| salience-allowlist.test.ts | ||
| schema-version-migration.test.ts | ||
| secret-sink-harness.test.ts | ||
| section-manifest-consistency.test.ts | ||
| security-dashboard-fallback.test.ts | ||
| session-runner-timeout.test.ts | ||
| session-update-autostash.test.ts | ||
| setup-bun-cmd-and-pipe-bugs.test.ts | ||
| setup-codesign.test.ts | ||
| setup-conductor-worktree.test.ts | ||
| setup-emoji-font.test.ts | ||
| setup-gbrain-path4-structure.test.ts | ||
| setup-help.test.ts | ||
| setup-plan-tune-hooks-noninteractive.test.ts | ||
| setup-runtime-lib-command.test.ts | ||
| setup-sections-linking.test.ts | ||
| setup-windows-fallback.test.ts | ||
| ship-apple-gate.test.ts | ||
| ship-plan-completion-invariants.test.ts | ||
| ship-template-redaction.test.ts | ||
| ship-test-detection-markers.test.ts | ||
| ship-version-sync.test.ts | ||
| skill-budget-regression.test.ts | ||
| skill-census.test.ts | ||
| skill-ceo-section-ordering.test.ts | ||
| skill-collision-sentinel.test.ts | ||
| skill-coverage-floor.test.ts | ||
| skill-coverage-matrix.test.ts | ||
| skill-coverage-matrix.ts | ||
| skill-cross-model-recommendation-emit.test.ts | ||
| skill-e2e-ask-user-question-format-compliance.test.ts | ||
| skill-e2e-auq-consistency.test.ts | ||
| skill-e2e-auq-matrix.test.ts | ||
| skill-e2e-auq-verbose-vs-carved-ab.test.ts | ||
| skill-e2e-auto-decide-preserved.test.ts | ||
| skill-e2e-autoplan-chain.test.ts | ||
| skill-e2e-autoplan-dual-voice.test.ts | ||
| skill-e2e-benchmark-providers.test.ts | ||
| skill-e2e-brain-privacy-gate.test.ts | ||
| skill-e2e-bws.test.ts | ||
| skill-e2e-conductor-prose.test.ts | ||
| skill-e2e-context-skills.test.ts | ||
| skill-e2e-coverage-audit.test.ts | ||
| skill-e2e-cso.test.ts | ||
| skill-e2e-deploy.test.ts | ||
| skill-e2e-design.test.ts | ||
| skill-e2e-diagram.test.ts | ||
| skill-e2e-first-task-scaffold.test.ts | ||
| skill-e2e-gbrain-roundtrip-local.test.ts | ||
| skill-e2e-hermetic-canary.test.ts | ||
| skill-e2e-ios-device.test.ts | ||
| skill-e2e-ios-swift-build.test.ts | ||
| skill-e2e-ios.test.ts | ||
| skill-e2e-learnings.test.ts | ||
| skill-e2e-memory-pipeline.test.ts | ||
| skill-e2e-office-hours-auto-mode.test.ts | ||
| skill-e2e-office-hours-brain-writeback.test.ts | ||
| skill-e2e-office-hours-phase4.test.ts | ||
| skill-e2e-office-hours.test.ts | ||
| skill-e2e-opus-47.test.ts | ||
| skill-e2e-overlay-harness.test.ts | ||
| skill-e2e-plan-ceo-finding-count.test.ts | ||
| skill-e2e-plan-ceo-finding-floor.test.ts | ||
| skill-e2e-plan-ceo-mode-routing.test.ts | ||
| skill-e2e-plan-ceo-plan-mode.test.ts | ||
| skill-e2e-plan-ceo-review-section-loading.test.ts | ||
| skill-e2e-plan-ceo-split-overflow.test.ts | ||
| skill-e2e-plan-design-finding-count.test.ts | ||
| skill-e2e-plan-design-finding-floor.test.ts | ||
| skill-e2e-plan-design-plan-mode.test.ts | ||
| skill-e2e-plan-design-with-ui.test.ts | ||
| skill-e2e-plan-devex-finding-count.test.ts | ||
| skill-e2e-plan-devex-finding-floor.test.ts | ||
| skill-e2e-plan-devex-plan-mode.test.ts | ||
| skill-e2e-plan-eng-finding-count.test.ts | ||
| skill-e2e-plan-eng-finding-floor.test.ts | ||
| skill-e2e-plan-eng-multi-finding-batching.test.ts | ||
| skill-e2e-plan-eng-plan-mode.test.ts | ||
| skill-e2e-plan-format.test.ts | ||
| skill-e2e-plan-mode-no-op.test.ts | ||
| skill-e2e-plan-prosons.test.ts | ||
| skill-e2e-plan-tune-cathedral.test.ts | ||
| skill-e2e-plan-tune.test.ts | ||
| skill-e2e-plan.test.ts | ||
| skill-e2e-qa-bugs.test.ts | ||
| skill-e2e-qa-workflow.test.ts | ||
| skill-e2e-retro.test.ts | ||
| skill-e2e-review-army.test.ts | ||
| skill-e2e-review-attribution.test.ts | ||
| skill-e2e-review.test.ts | ||
| skill-e2e-session-intelligence.test.ts | ||
| skill-e2e-setup-gbrain-bad-token.test.ts | ||
| skill-e2e-setup-gbrain-path4-local-pglite.test.ts | ||
| skill-e2e-setup-gbrain-remote.test.ts | ||
| skill-e2e-ship-idempotency.test.ts | ||
| skill-e2e-ship-section-loading.test.ts | ||
| skill-e2e-skillify.test.ts | ||
| skill-e2e-spec-execute.test.ts | ||
| skill-e2e-triage.test.ts | ||
| skill-e2e-workflow.test.ts | ||
| skill-fixture.test.ts | ||
| skill-llm-eval-spec.test.ts | ||
| skill-llm-eval.test.ts | ||
| skill-parser.test.ts | ||
| skill-preflight-budget.test.ts | ||
| skill-routing-e2e.test.ts | ||
| skill-size-budget.test.ts | ||
| skill-validation.test.ts | ||
| spec-template-invariants.test.ts | ||
| spec-template-sync.test.ts | ||
| static-no-legacy-writes.test.ts | ||
| strict-output.test.ts | ||
| takes-fence-fallback.test.ts | ||
| tasks-section-jq.test.ts | ||
| taste-engine.test.ts | ||
| team-mode.test.ts | ||
| telemetry-repo-strip.test.ts | ||
| telemetry.test.ts | ||
| template-context-parity.test.ts | ||
| terse-build.test.ts | ||
| test-free-shards.test.ts | ||
| timeline.test.ts | ||
| touchfiles-facade.test.ts | ||
| touchfiles-map-diff.test.ts | ||
| touchfiles.test.ts | ||
| transcript-section-logger.test.ts | ||
| uninstall.test.ts | ||
| update-check-crash-sentinel.test.ts | ||
| upgrade-migration-v1.test.ts | ||
| user-slug-fallback.test.ts | ||
| v0-dormancy.test.ts | ||
| verify-gate.test.ts | ||
| workflow-concurrency.test.ts | ||
| worktree.test.ts | ||
| writing-style-resolver.test.ts | ||