Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ Use Plain Language in introductory, expository, friendly, and other sensible com
- After each `agent.act`, assert exactly with `expect`. Do not add mocks, request interception, or test-only endpoints.
- Pass `--changed-since <ref>` to `nub exec e2e list` and `nub exec e2e run` directly. Do not write `nub run test -- --changed-since`. e2e treats a flag after `--` as a test file.
- `nub run test` boots SolStatus with `alchemy dev` on ports 3000, 8787, and 8788. The state for a run lives only in `.e2e/runs/<uuid>/.alchemy`, and the launcher removes it on exit. The suite does not deploy or destroy remote Cloudflare resources, and it does not use `CLOUDFLARE_API_TOKEN`.
- `@e2e-dev/decision` drives semantic steps through the Cloudflare AI Gateway. `scripts/e2e/models.ts` selects the decision model (`E2E_DECISION_MODEL`, default Cloudflare Clef) and the language model (`E2E_LANGUAGE_MODEL`, default `anthropic/claude-haiku-5.5`) through official AI SDK providers. CI reads both from SolZeroAI organization Actions variables. Keep `scripts/e2e/models.ts` and `scripts/e2e/filters.ts` identical across SolZero repositories, and do not add a custom executor.
- `@e2e-dev/decision` drives semantic steps through the Cloudflare AI Gateway. `scripts/e2e/models.ts` selects the decision model (`E2E_DECISION_MODEL`, default Cloudflare Clef) and the language model (`E2E_LANGUAGE_MODEL`, default `meta/muse-ember-1.0`) through official AI SDK providers. CI reads both from SolZeroAI organization Actions variables. Keep `scripts/e2e/models.ts` and `scripts/e2e/filters.ts` identical across SolZero repositories, and do not add a custom executor.
- Action replay recordings in `.e2e/cache` are committed, and CI replays them with `--strict-cache`. Before you mark a pull request ready for review, re-record if you changed an `agent.act` step or the UI one drives: run `gh workflow run validate.yml --ref <branch> -f e2e_record=true`, wait for it to pass, and pull the recordings commit it pushes to your branch. Without CI access, run `nub run test` locally and commit the changed recordings.
- Declare credentials and secrets in `e2e.config.ts`, never in test code. Never deploy, pay, or send external alerts from tests.
- All tests run locally against `alchemy dev`. Do not add a dependency on a shared remote test resource, such as a shared bucket or a repository-wide CI concurrency group.
Expand Down
3 changes: 3 additions & 0 deletions e2e.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,9 @@ export default {
agents: {
default: {
executor: decisionExecutor({ model: decisionModel, textModel: languageModel }),
// Muse Ember spends most output tokens on reasoning unless effort is low.
// The runner forwards this into language-model generateText calls only.
providerOptions: { openai: { reasoningEffort: "low" } },
maxSteps: 20,
maxModelCalls: 20,
context:
Expand Down
2 changes: 1 addition & 1 deletion scripts/e2e/models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import * as P from "effect/Predicate"
// variables, so CI changes models for the fleet in one place. The defaults
// below serve local runs and must match the DNA page.
const DEFAULT_DECISION_MODEL = "@cf/cloudflare/clef"
const DEFAULT_LANGUAGE_MODEL = "anthropic/claude-haiku-5.5"
const DEFAULT_LANGUAGE_MODEL = "meta/muse-ember-1.0"

/**
* Official AI SDK providers pointed at the Cloudflare AI Gateway REST API.
Expand Down
Loading