mirror of https://github.com/garrytan/gstack.git
* feat: add shared call-time isConductor() helper
Single source of truth for Conductor host detection in TS consumers
(CONDUCTOR_WORKSPACE_PATH / CONDUCTOR_PORT). Reads the passed env at
call time, not a module-load snapshot, so unit tests can pin the env
inline without Bun --preload (esm-hoist-breaks-env-pin-bootstrap).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* test: harden question-preference-hook harness against ambient Conductor env
runHook copied all of process.env into the hook subprocess, so running the
suite inside Conductor (CONDUCTOR_WORKSPACE_PATH/PORT set) would leak those
markers. Strip them so the existing cases deterministically characterize
NON-Conductor behavior before the Conductor branch lands. Baseline: 15 pass.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat: PreToolUse hook denies AskUserQuestion in Conductor, redirects to prose
Conductor disables native AskUserQuestion and routes through a flaky MCP
variant that returns '[Tool result missing due to internal error]'. The
hook now denies any AUQ call in a Conductor session and instructs the model
to render a prose decision brief instead (transport avoidance, not preference
enforcement) — firing for one-way doors too, with a typed-confirmation
requirement for destructive paths.
Precedence: never-ask auto-decide still wins (user already settled those);
Conductor prose is the fallback for everything else; non-Conductor behavior
is byte-for-byte unchanged. Restructured the per-question loop to compute
eligibility without early-returning so the Conductor branch can run as the
fallback while preserving memoryContext on every exit.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat: Conductor renders AskUserQuestion decisions as prose by default
In Conductor, native AskUserQuestion is disabled and the MCP variant is
flaky, so skills now render every decision as a plain-text prose brief the
user answers by typing a letter — proactively, not as a failure reaction.
- Preamble emits CONDUCTOR_SESSION, gated on != headless so eval/CI inside
Conductor still BLOCKs instead of rendering prose to nobody.
- AskUserQuestion Format gains a Conductor-default-prose rule (auto-decide
preferences still apply first; prose decisions log via gstack-question-log
since PostToolUse never fires), a one-way/destructive typed-confirmation
rule, and a typed-reply continuation protocol for split chains.
- Regenerated all SKILL.md + ship golden fixtures; bumped affected carve
skeleton caps to absorb the always-loaded additions.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat: deploy the Conductor AskUserQuestion hook (setup + upgrade migration)
The PreToolUse hook only delivers its Conductor-prose guarantee if it's
installed, but setup skips hook registration in non-interactive (conductor/CI)
setups. Two fixes so layer 3 actually deploys:
- setup: treat a Conductor workspace as an implicit opt-in for the PreToolUse
hook on the silent fall-through (never overriding an explicit opt-out).
- migration v1.58.0.0: re-register the hook for existing Conductor installs on
/gstack-upgrade, idempotent and respecting plan_tune_hooks=no.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* test: E2E for Conductor prose + fix auto-decide-preserved GSTACK_HOME bug
- New skill-e2e-conductor-prose (periodic): Conductor env + plan-eng-review
surfaces a prose decision brief, not a silent skip. Header documents this is
end-to-end behavior coverage; the deterministic Conductor guard is the
question-preference-hook unit test (the PTY harness can't register the MCP
variant — Codex #10).
- Fix the pre-existing bug in auto-decide-preserved: it seeded the never-ask
preference under GSTACK_HOME=tmpHome but never passed GSTACK_HOME into the
PTY run, so the spawned claude read the real ~/.gstack and the preference
was inert (Codex #9). Now passes GSTACK_HOME + CONDUCTOR_WORKSPACE_PATH to
prove auto-decide still wins over the Conductor prose redirect.
- Register both in touchfiles (periodic tier).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* v1.58.0.0 feat: Conductor renders AskUserQuestion decisions as prose
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* test: strip ambient Conductor env in memory-cache-injection hook harness
Same dev-in-Conductor leak fixed for question-preference-hook: this suite's
runHook copies process.env, so running it inside Conductor flipped the
defer-path memoryContext assertions into the [conductor] prose deny. Strip
CONDUCTOR_* so the cases characterize non-Conductor behavior. (CI is headless,
so this only bit local Conductor runs.)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat: gstack-detach — run agent eval/bench jobs in their own session
Long agent-run jobs (30-60 min evals, benchmarks) die when the harness sends
SIGTERM to a background task's process group on turn boundaries / monitor
stops / interruptions (observed: 'script test:gate terminated by signal
SIGTERM'). gstack-detach runs the command in a fresh session (python3
os.setsid, or setsid on Linux, nohup fallback) so a group SIGTERM can't reach
it, and wraps it in caffeinate -i on macOS so idle-sleep can't kill it either.
Returns immediately; caller polls the logfile. Secrets stay in env, never argv.
The guard test pins the contract: the command runs in a different process
group than the caller and outlives the launching shell.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat: eval:bg* scripts — detached eval runs for agents
Agent-facing convenience scripts that launch the eval suites through
gstack-detach so a harness SIGTERM can't kill a long run. eval:bg (diff-based),
eval:bg:all, eval:bg:gate, eval:bg:periodic — each returns immediately and
streams to /tmp/gstack-evals.log for polling. The plain test:evals / test:e2e
scripts stay foreground for humans.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* docs: CLAUDE.md — agents must run long evals via gstack-detach
Codifies the detached-execution default: agent-launched eval/benchmark runs go
through bin/gstack-detach (or the eval:bg* scripts) so a harness SIGTERM or
macOS idle-sleep can't kill a 30-60 min run, then poll the log with a
death-aware watcher. Humans keep foreground scripts.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat: harden gstack-detach against all four eval-infra killers
The basic bash detach fixed SIGTERM but a real run on a shared dev box hit
three more killers: cross-worktree API saturation (15-way concurrency x a
sibling worktree mass-timed-out the suite), a silent hang (periodic bun died
with no exit marker), and shared-/tmp log contamination (a concurrent
worktree's agent output bled into the log). Rewrite as a portable python3 tool
that bakes in all four fixes:
- fork + setsid: SIGTERM-proof (own session, survives harness polite-quit)
- caffeinate -i on macOS: no idle-sleep death
- --lock NAME (fcntl, machine-wide): concurrent worktrees SERIALIZE instead of
saturating the shared model API
- run-scoped default log (~/.gstack-dev/eval-runs/<label>-<slug>-<branch>-<ts>-<pid>):
no cross-worktree collision/contamination
- --timeout watchdog + a guaranteed '### gstack-detach EXIT=<code> ###' sentinel
on every terminal path: no silent hang, finished-vs-died always detectable
Guard test pins all four: detached pgid differs + outlives launcher, run-scoped
log path, watchdog EXIT=timeout, and lock serialization (second run WAITS).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat: eval:bg* use run-scoped logs + machine lock + watchdog
Drop the shared /tmp/gstack-evals.log path (the cross-worktree collision that
contaminated a live run) for gstack-detach's run-scoped default, and add the
machine-wide gstack-evals lock (concurrent worktrees serialize, no API
saturation) plus per-tier watchdog timeouts (60/90/120 min). Each eval:bg*
prints its run-scoped log path to poll.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* docs: wire detached-eval guidance into /ship + correct CLAUDE.md flags
- /ship eval step (sections/tests.md): long eval suites launch via gstack-detach
(own session, machine lock, EXIT sentinel) so a turn boundary can't kill a
30+ min run mid-ship — the exact failure observed during this branch's ship.
- CLAUDE.md: correct the now-stale /tmp reference; document the --lock (serialize
worktrees, no API saturation), --timeout watchdog, run-scoped log, and the
guaranteed EXIT sentinel the poller breaks on.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* refactor: extract pure promotedEnv() from conductor-env-shim
Single source of truth for GSTACK_* key promotion semantics. The ambient
promoteConductorEnv() becomes a wrapper; behavior-preserving. Needed by the
hermetic env builder which must not mutate process.env.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat: hermetic child-env builder for E2E runners
Allowlist scrub (basics/network/named-auth kept; CONDUCTOR_*, CLAUDE_*,
GSTACK_*, MCP_*, GBRAIN_*, operator credentials dropped), per-runner
extraAllow, overrides merge last, EVALS_HERMETIC=0 byte-identical escape
hatch read at call time (ESM-hoist safe). Sync memoized singleton temp dirs
(<runRoot>/.claude keeps the extractPlanFilePath contract), seeded
.claude.json for non-interactive first run, pid-aware GC of crashed runs.
19 free unit tests.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat: session-runner spawns hermetic children + isolation canaries
claude -p children now get the allowlist-scrubbed env and a gated
--strict-mcp-config (EVALS_HERMETIC=0 restores operator env AND args).
Two gate-tier canaries make the clean room falsifiable: hermetic-canary
asserts env redirect + scrub + zero MCP servers + nonzero API-key cost
from the Bash tool_result (never model prose); hermetic-sentinel plants a
poisoned operator config (user CLAUDE.md + MCP server) and proves the
child cannot see it. Empirically verified on claude 2.1.175: print mode
needs no seed config (the seed serves the PTY path); the child CLI sets
CLAUDECODE for its own tools, so that scrub is pinned in unit tests, not
E2E. hermetic-env.ts joins GLOBAL_TOUCHFILES.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat: PTY runner spawns hermetic claude sessions
launchClaudePty children get the allowlist-scrubbed env, a gated
--strict-mcp-config, and the session exposes hermeticConfigDir for
forensics (hermetic plan files live under <dir>/plans/ and still match
extractPlanFilePath via the /.claude dir-name contract). Seeded trust
state covers repo-cwd sessions; the 15s trust-watcher stays as fallback.
Verified foreground via the plan-mode-no-op gate test.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat: codex/gemini runners spawn hermetic children
Same allowlist scrub as the claude runners, with each provider's auth
surface re-admitted via extraAllow (codex: OPENAI_API_KEY/CODEX_* plus
its tempHome .codex copy; gemini: GEMINI_*/GOOGLE_* with real HOME for
~/.gemini auth). The gemini spawn previously inherited the full operator
env with no env property at all.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat: agent-sdk-runner spawns hermetic children via complete Options.env
The historical 'env: breaks SDK auth' failure was partial-env replacement:
Options.env replaces the child's entire environment, so objects lacking
ANTHROPIC_API_KEY killed auth. Passing the complete hermetic env (key +
PATH + redirected CLAUDE_CONFIG_DIR/GSTACK_HOME) works — validated live
via query() with a Bash tool call (success, real cost, Conductor vars
scrubbed). Per-test opts.env merges last; ambient key mutation still
works because the builder reads process.env at call time.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* test: static tripwire pins hermetic wiring in all five runners
Free-tier invariants: every runner builds child env via hermeticChildEnv,
no raw ...process.env spread at any spawn site, --strict-mcp-config gated
on isHermeticEnabled in both claude runners, and no test callsite passes
the operator env into a runner's override parameter (scoped to runner
calls — unit tests spawning gstack bin scripts directly are exempt).
Mirrors the terminal-agent-pid-identity / server-embedder-terminal-port
tripwire idiom.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* test: refresh codex/factory ship goldens with detached-eval block
|
||
|---|---|---|
| .. | ||
| fixtures | ||
| helpers | ||
| agent-sdk-runner.test.ts | ||
| analytics.test.ts | ||
| artifacts-init-migration.test.ts | ||
| audit-compliance.test.ts | ||
| auq-error-fallback-hook.test.ts | ||
| auq-format-always-loaded.test.ts | ||
| benchmark-cli.test.ts | ||
| benchmark-runner.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-mode-full.test.ts | ||
| catalog-trim.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-save-hardening.test.ts | ||
| cso-preserved.test.ts | ||
| cso-spec-taxonomy-alignment.test.ts | ||
| declared-annotation.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 | ||
| explain-level-config.test.ts | ||
| extension-pty-inject-invariant.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-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-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-schema-pack.test.ts | ||
| gstack-session-kind.test.ts | ||
| gstack-settings-hook-schema-aware.test.ts | ||
| gstack-slug-sanitize.test.ts | ||
| gstack-state-root-override.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-wiring.test.ts | ||
| hook-scripts.test.ts | ||
| host-config.test.ts | ||
| investigate-freeze-path.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-no-put_page.test.ts | ||
| memory-ingest-timeout.test.ts | ||
| migration-checkpoint-ownership.test.ts | ||
| migrations-v1.27.0.0.test.ts | ||
| model-overlay-opus-4-7.test.ts | ||
| no-stale-gstack-brain-refs.test.ts | ||
| one-way-doors.test.ts | ||
| openclaw-native-skills.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 | ||
| 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-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 | ||
| resolver-entry.test.ts | ||
| resolvers-gbrain-put-rewrite.test.ts | ||
| resolvers-gbrain-save-results.test.ts | ||
| review-log.test.ts | ||
| salience-allowlist.test.ts | ||
| schema-version-migration.test.ts | ||
| secret-sink-harness.test.ts | ||
| section-manifest-consistency.test.ts | ||
| setup-codesign.test.ts | ||
| setup-conductor-worktree.test.ts | ||
| setup-emoji-font.test.ts | ||
| setup-gbrain-path4-structure.test.ts | ||
| setup-plan-tune-hooks-noninteractive.test.ts | ||
| setup-sections-linking.test.ts | ||
| setup-windows-fallback.test.ts | ||
| ship-plan-completion-invariants.test.ts | ||
| ship-template-redaction.test.ts | ||
| ship-version-sync.test.ts | ||
| skill-budget-regression.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-cso.test.ts | ||
| skill-e2e-deploy.test.ts | ||
| skill-e2e-design.test.ts | ||
| skill-e2e-diagram.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-review-army.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-sidebar.test.ts | ||
| skill-e2e-skillify.test.ts | ||
| skill-e2e-spec-execute.test.ts | ||
| skill-e2e-workflow.test.ts | ||
| skill-e2e.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 | ||
| takes-fence-fallback.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.test.ts | ||
| transcript-section-logger.test.ts | ||
| uninstall.test.ts | ||
| upgrade-migration-v1.test.ts | ||
| user-slug-fallback.test.ts | ||
| v0-dormancy.test.ts | ||
| worktree.test.ts | ||
| writing-style-resolver.test.ts | ||