promote: verified staging 9f4dbdb → prod - #17042
Merged
Merged
Conversation
…no keyboard A tap on the collapsed pill now forms the bare INPUT bar and nothing more: it no longer jumps to the HALF detent when a thread exists, and no longer focuses the composer (popping the keyboard). Revealing the thread is the grabber tap; raising the keyboard is the composer tap — each its own deliberate gesture, so the sheet never lurches taller or pops a keyboard the user didn't ask for. The touch path needed one structural fix: the compat mouse events the browser synthesizes after touchend landed on the composer textarea that had just formed under the tap point, focusing it and re-opening to HALF via focus-to-expand. The pill handle now preventDefault()s touchend (the gesture itself runs on pointer events and is unaffected). Matrix doc, unit/fuzz tests, and the real-browser e2e continuum + PILL-TAP suites updated to pin the new contract (tap → collapsed detent, composer unfocused, grabber steps INPUT → HALF → INPUT). Verified: 53 shell test files green, chat-sheet e2e PASSED on chromium desktop+mobile profiles. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Older bundled WebViews (LP3 ships Chrome WebView 113) parse Tailwind 4's composed custom-property touch-action declaration but resolve its empty var(--tw-pan-*) slots to the initial `auto` — the browser then claims vertical drags on .touch-pan-y regions and terminates them with pointercancel ~8px in. Pin the semantic utility to a literal `touch-action: pan-y` under body.native / .platform-ios / .platform-android / .pwa-standalone so nested notification and home scroll regions keep their gesture contract on installed shells. Extracted as the standalone, live-on-current-develop piece of #16822 (the pager-hook and e2e portions of that PR are held pending the #16805 topology ruling). Lockdown test pins the literal rule. Co-authored-by: NubsCarson <NubsCarson@users.noreply.github.com> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Route every cerebras-provider model call through operator-set env (CEREBRAS_BASE_URL > BENCHMARK_BASE_URL > OPENAI_BASE_URL > provider map) instead of unconditionally clobbering subprocess env with api.cerebras.ai: runner base-URL resolution, code-agent-matrix cell env, eliza-adapter _normalize_model_env, mt_bench judge client, tau-bench user-sim/judge (litellm api_base injected explicitly), woobench evaluator, swe_bench generated OpenCode config, and the acceptance gate. tau-bench's judge no longer silently degrades to substring matching on LLM failure — degrade is opt-in and recorded in the result. Add orchestrator/provider_forwarder.py: a per-cohort loopback OpenAI-compatible forwarder (ephemeral per-harness bearer tokens, SSE passthrough, fail-closed upstream errors) auto-started for non-subscription cohorts whose resolved endpoint is remote, so publishable hermes/openclaw native lanes (loopback-only by contract) reach proxied upstreams without weakening their provenance checks. extra_config endpoint pins fail closed. Make interrupted-campaign resume account-swap safe: stale-run recovery can no longer reopen finished run groups; cohort resume retires the killed attempt's rows (running/failed/succeeded) before workers start; cerebras cohorts auto-recover stale namespace-less groups at startup; new full_campaign --assume-quota-reset resumes past a stored retry_at after a subscription account swap (consumed on first still-paused resume). Green the subscription provenance/publishability cluster (7 tests red since #16764): gateway logs created 0600 regardless of umask (+fchmod for reuse), deterministic audit JSON depth guard replacing the interpreter-dependent RecursionError assumption, audit_records assertions aligned to durable-v2 counting, publishability fixtures sealed as sha256-chain-v2 records. Add orchestrator/hf_publish.py + publish-hf CLI: exports/VACUUM-snapshot/ relativization pipeline committing to the gitignored nested results repo and uploading to a HuggingFace dataset via upload_folder, behind the readiness/ publishability/comparability/artifact gates, a secret scrub, and a host-path scan for public publishes. Remove the satisfied MULTITASK_ELIZA_USAGE_FIX gate; reconcile docs/RESULTS_MATRIX.md with the 49-id registry. Suite: 187 passed. Orchestrator: 640 passed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Move the three loose topic docs (meeting-voice matrix, orchestrator subagent runbook, voicebench coverage) into docs/ and index them; delete verified-dead code (registry/_monolith.py, clawbench groq scripts, unreferenced trust TS mirror, openclaw-benchmark vendored upstream dirs incl. committed slide decks, vending-bench ad-hoc smoke, experience compat shim) — the three ralphy evidence files pinned by the authored-evidence retention contract (#16296) are retained; rewrite the upstream-flavored openclaw-benchmark and clawbench READMEs to suite convention; prune 190 stale .gitignore lines whose target dirs were deleted in #9475; fill doc gaps (entity-voice-bench had zero docs; agentbench_matrix/framework/lib/multitask-bench missing AGENTS/CLAUDE) and correct stale READMEs against code (configbench 682 scenarios, judge defaults gemma-4-31b, orchestrator README host paths); fix stale registry metadata paths/descriptions. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…n-reply synthesis, cross-persona privacy verify, scheduling jargon/fabrication in user copy Defect 1 — planner emits tool calls but no synthesized user reply (A2 rows): - planner-loop: tool-turn reply guarantee — a finished turn that executed a successful non-terminal tool but produced no usable final message (undefined, blank, or the handled-step placeholder) now runs ONE forced no-tools synthesis pass grounded in the tool results; STOP/IGNORE and suppressPlannerReply turns are flagged endedWithDeliberateSilence and left silent. - OWNER_* umbrella params accept natural aliases (target: query/item/task/…, intent: reschedule/when/time, minutes: snoozeMinutes) so a planner round is no longer burned on "Unexpected argument". - SCHEDULED_TASKS_HISTORY works without a taskId: id-less reads return recent history across all scheduled items instead of erroring MISSING_TASK_ID. - Completed-today day-state: repository.listCompletedOccurrenceViewsSince + LifeOpsService.listOwnerOccurrencesCompletedToday, surfaced as "Owner completed today" in the lifeops provider and as sections.completedToday in the evening BRIEF composer, whose narrative baseline now leads with wins and frames open items as neutral carryovers. - LifeOps provider guidance: follow-through repair (neutral ack + one smaller step + consent), wins-first recap, crisp dated asks save immediately with a sensible default. Defect 2 — F1 cross-persona privacy: verified live that the #15041 FACTS minimization gate holds (no code change needed); catalog rows flipped with independent judge scores. Defect 3 — SCHEDULED_TASKS schema jargon / fabricated confirmations: - core.simple_completed_side_effect_claim response-handler evaluator: a Stage-1 simple-path reply that claims an already-completed scheduling/save side effect (no tool ran) is rerouted to the planner so a real action does the work — fabricated "I've set two reminders / session-only" confirmations can no longer ship. - Plain-words confirmation guidance in the lifeops provider; deadline phrases ("by the 20th") are extracted as dated once-cadences instead of triggering an exact-time interrogation. Harness: CerebrasJudge honors CEREBRAS_BASE_URL / CEREBRAS_JUDGE_MODEL / EVAL_CEREBRAS_API_KEY so scenario judging can run independently (gemma-4-31b via the Eliza Cloud OpenAI-compat proxy) without flipping the under-test provider selection. All six blocked scenarios pass live (ELIZA_CHAT_VIA_CLI=claude text-planner lane, independent gemma-4-31b judge, scores 1.00); catalog rows flipped to verified with model + judge + runId notes. Closes #16935 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…scaffolding catalog row Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…egenerate action manifest The brief composer's narrow service interface lacked the new listOwnerOccurrencesCompletedToday member (caught by workspace typecheck), and the committed lifeops-bench action manifest carries the updated SCHEDULED_TASKS taskId description (optional for history). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…untime Satisfies the test-realness diff gate: no IAgentRuntime casts, no createMockRuntime — the evaluator and backstop registry run on the production runtime architecture. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…nto My Apps, Tasks→Projects, automations via cloud on mobile Four launch-screen fixes: - Pendant transcript is a preview surface: forced into LAUNCHER_PREVIEW_IDS (same gate as feed/stream), hidden from the default launcher; the /pendant/transcript route stays addressable. - One apps tile: the cloud-apps "Apps" tile is gone (LAUNCHER_HIDDEN_IDS); the Cloud Applications studio is reached from a cloud-gated row inside My Apps, and /cloud-apps deep links keep working. Label is now "Cloud Apps". - The coding-task orchestrator surface presents as "Projects" (tile, header, palette, widget, route catalog); tab id "tasks" and /apps/tasks stay stable. - The workflow surface (automations/workflow/trigger client methods) routes to the linked Eliza Cloud agent when the active base is the bundled mobile runtime, which never loads plugin-workflow — dedicated tiers serve real data, shared tiers surface the designed upgrade state, and no-cloud keeps the honest unavailable state (new workflow-surface-routing module). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Design doc for consolidating My Apps into Projects: Project as the one durable object, app = published project (Cloud-gated publish, per-project publish page with URL/monetization/analytics), agent publish/manage verbs, 5-phase implementation plan. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
#16893 moved the Vite dev child from 'bun --bun vite' to plain Node for correct WebSocket proxy upgrade semantics, but dropped the .js->.ts specifier mapping Bun provided implicitly. Dev Smoke lanes export NODE_OPTIONS=--conditions=eliza-source, which routes workspace packages to their TypeScript sources whose NodeNext relative imports keep .js extensions — so vite.config.ts loading died with ERR_MODULE_NOT_FOUND on @elizaos/cloud-routing src/features.js, killing 'Vite HMR dependency-level smoke' and 'bun run dev onboarding chat' on develop. Spawn the Vite child with '--import tsx' (the same treatment the API child already gets in dev-ui.mjs) in resolveViteCommand and the packages/app dev scripts. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Merge pull request #16962 from elizaOS/promote/verified-a71c622ac2
Wire the loopback provider forwarder into the acceptance gate (same
resolution helpers as cohort wiring, one forwarder for the gate lifetime,
per-harness lane env on smokes and sanity dispatches, teardown surfaced as a
gate step) so a gate pass certifies the exact cohort topology. Fix the
sanity-dispatch cwd (was the repo parent — benchmarks unimportable), clamp
sanity max_tasks to harness smoke limits, accept the designed incompatible
random-baseline outcome, and raise the benchmark-leg timeout to observed
runtime. The forwarder presents its own User-Agent upstream — Cloudflare
403s OpenAI/* UAs on the cloud proxy.
Fix the eliza smoke deflection ("Reply with the single word: PONG" →
canned fallback despite gemma returning a valid PONG envelope): the
say-literal recognizer now parses quantified units ("the single word",
"one word") without accepting bare determiners, and the bench server no
longer wraps identity-only benchmark contexts in the authoritative-context
scaffold that hid the ask from the anchored recognizers.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…aging - hermes_yc_bench was unsatisfiable from a clean clone: upstream deleted the calibrated fast_test/medium/hard presets in 38eaea7, an ancestor of PINNED_YC_BENCH_REVISION, while _verify_yc_presets still requires them. _verify_yc_presets now materializes the deleted TOMLs from the pin's own ancestry (PINNED_YC_PRESETS_SOURCE, worktree-only restore; HEAD stays at the pin) and still fails closed if restore leaves them missing. Verified against a preset-less pinned checkout: presets restore and load as ExperimentConfig under the pinned loader. _select_yc_preset also considers the checkout's preset dir, which leads PYTHONPATH at run time. - agent_install.install_hermes falls back to virtualenv when stdlib venv has no ensurepip (Debian/Ubuntu without python3-venv). - agent_install.install_openclaw installs under openclaw/v<version> to match openclaw_adapter.client's DEFAULT_BINARY_FALLBACK, so installs resolve even without the manifest. - openclaw-adapter README: default model is gemma-4-31b (matches client.py). - hermes-adapter AGENTS/CLAUDE: document the two-lane checkout reality (native client lane at ~/.eliza/agents/hermes-agent-src tracking main; env lane pinned at PINNED_HERMES_ENV_REVISION under benchmark-data/source-audit) and the upstream atroposlib submodule breakage workaround. Tests: benchmarks/tests/test_agent_install.py 14 passed; hermes-adapter suite 155 passed; openclaw-adapter suite 130 passed, 4 skipped. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
fix(benchmarks): campaign-proof routing, swap-safe resume, HF publishing, suite cleanup
fix(lifeops): repair the three live-proven persona defects — tool-then-reply synthesis, cross-persona privacy verify, scheduling jargon/fabrication in user copy
…structured logger (#16958) Server-side ttsDebug was a dead diagnostic: it required a sink that no production code ever installed, so ELIZA_TTS_DEBUG=1 produced zero [tts] lines while operators believed tracing was on (#16347). - @elizaos/shared ttsDebug now emits straight through the structured logger at info level when the flag is set — no per-host sink wiring exists to forget; the dead setTtsDebugSink API is removed. - /api/tts/local-inference now traces server:local-tts:request/success/ reject phases, mirroring the cloud proxy's server:cloud-tts:* tracing, so both server TTS paths are observable under the flag. - Emission is covered by listener-stream tests against the real logger (no logger mocks) in shared, plugin-elizacloud, and plugin-local-inference, including flag-off silence. Closes #16347 Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…iew mutation ratchet and add a baseline-completeness sweep (#16951) The #14369 ratchet only saw the 9 views listed in its baseline, so a local-only mutation added to any unlisted first-party shell page shipped without failing the ratchet. This maps every mutating page module under packages/ui/src/components/pages into BUILTIN_VIEW_MUTATION_BASELINE — mapped to registered semantic actions where a chat twin exists (documents, files, memories, automations, triggers, skills, browser, relationships) and exempt-with-reason where none can (chat itself, launcher, native OS surfaces, cloud billing, pendant BLE capture, release center) — and adds validateShellPageSweepCompleteness, which walks the real pages directory and fails when a mutating page is neither baseline-claimed nor exempt. Exemptions are themselves ratcheted: stale or baseline-conflicting entries fail the sweep. Closes #16944 Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…MENT delete (#16963) Author the two missing view-chat acceptance-bar scenarios from MVP workstream 6 (View-chat row): natural "turn on voice" phrasing must drive the SETTINGS voice section semantically and "delete that document" must route to the DOCUMENT action - in both cases without the model emitting a raw selector (no agent-fill/agent-click, no VIEWS synthetic-DOM fallback). - settings-voice-toggle (live-only, app-control shard): a real model selects SETTINGS and drives the voice section's own write path; final checks pin the exact PUT /api/config persisted-prefs ledger and the voice-settings:apply broadcast ledger, including the #14910 twin defaults (silenceMs 650, speechRmsThreshold 0.003). - live-document-delete (live-only): seeds a real global document through DocumentService; a whitelisted connector-admin (ADMIN) non-owner is refused by the owner-only mutation wall (document survives a real re-list), then the owner's natural delete removes it - asserted against store state, not reply phrasing. - deterministic-settings-voice-actions / deterministic-document-actions: keyless twins pinning both payload contracts on the pr-deterministic lane, including invalid/out-of-range/not-found/missing-id rejections. - core documents context now advertises delete: the live run exposed that a "save, search, recall"-only Stage-1 inventory makes models refuse "delete that document" as unsupported instead of classifying it. - app-control HTTP loopback additionally captures /api/config (the route the SETTINGS voice section writes through); handlers stay exact-path. - deterministic-action-coverage: SETTINGS leaves KNOWN_UNCOVERED; SETTINGS + DOCUMENT join COVERED_ACTIONS and the direct-only baseline; live-document-delete classified prose-only (no deterministic ACTION_PLANNER fixture - the twins gate the keyless lane). Closes #16942 Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
_load_huggingface hardcoded split="test" for every suite, but upstream hlt-lab/voicebench shards sd-qa by dialect region (aus/gbr/.../usa) with no "test" split, so the sd-qa suite always raised ValueError in HF mode. Upstream VoiceBench reports sd-qa on the USA subset, so map sd-qa -> "usa" via hf_split_for_suite and keep "test" for the other seven suites. Verified against the live dataset: sd-qa now loads real audio samples through _load_huggingface; package suite 33 passed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…; drop the dead Android post-delivery timeout env The benchmark import graph resolves @elizaos/core via plugin-openai's tsconfig to packages/core/dist/node, which does not exist on a fresh runner without a build step. ELIZA_POST_DELIVERY_SIDE_EFFECT_TIMEOUT_MS has no reader after the Promise.race removal in this branch. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Same failure class as sd-qa (6bfd3af): upstream hlt-lab/voicebench shards mmsu by academic subject with no "test" split, so HF-mode loading always raised ValueError. Upstream VoiceBench reports MMSU across every subject, so hf_split_for_suite now returns None for mmsu and the loader unions all splits in sorted-name order (one split at a time, so a small limit does not download the whole sharded suite). Verified against the live dataset: mmsu loads real audio samples through _load_huggingface; package suite 33 passed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…atency-final fix: expose exact Cerebras chat latency
The AppUITests view walkthrough locates launcher tiles by exact accessibility label; the tasks surface now presents as "Projects". Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Launch-screen cleanup: pendant transcript preview-gated (off by default), cloud-apps 'Apps' tile folded into My Apps, Tasks surface renamed to Projects (labels only), automations routed via linked Eliza Cloud agent on mobile instead of the false 'not available' state. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
# Conflicts: # .github/workflows/coverage-gate.yml # packages/core/src/__tests__/message-regression-lane.test.ts # packages/scripts/__tests__/coverage-gate-test-only-pr.test.ts # packages/scripts/__tests__/coverage-workflow-source-condition.test.ts # packages/scripts/__tests__/run-changed-vitest-coverage.test.ts # packages/scripts/run-changed-vitest-coverage.mjs # scripts/security/coverage-changed-files.self-test.mjs # scripts/security/coverage-changed-files.sh # scripts/security/coverage-gate.awk # scripts/security/coverage-gate.self-test.mjs
…rack pass (#17002) Carries forward the additive smoke test from #16928 after the core service-less early-return fix landed on develop via #16808 (8ee057a): a plugin without a services array must register and unload cleanly through snapshotPluginServiceClasses/trackPluginServiceClasses without disturbing another plugin's service ownership. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…16543) * fix(orchestrator): separate generated scaffolds from agent residuals Co-authored-by: wakesync <shadow@shad0w.xyz> * fix(orchestrator): persist scaffold ownership safely Co-authored-by: wakesync <shadow@shad0w.xyz> * test(orchestrator): spawn isolated in the broker SKILLS.md advertisement test writeSkillsManifest (096cb58) intentionally writes SKILLS.md only into orchestrator-owned isolated scratch. The broker-advertisement test still spawned non-isolated with a caller-owned workdir and read SKILLS.md from the caller dir, so the file was legitimately never written: ENOENT before coverage enforcement ever ran. Spawn with isolateWorkdir and assert against the session's own result.workdir instead. Co-authored-by: wakesync <shadow@shad0w.xyz> * fix(agent-orchestrator): clear lint + changed-file coverage gate for the residuals-ownership stack - reorder the orchestrator-artifact-ownership import members in orchestrator-task-service.ts and completion-residuals.test.ts for the biome 2.5.5 organizeImports sweep now on develop (#16814) - export residualsOrchestratorOwnedArtifacts with structural Pick parameters and pin its contract in the canonical task-service suite: live ACP ledger wins, session-metadata fingerprints are the restart-safe fallback, no session / malformed records yield no ownership claims (fail-closed). Running the canonical suite in the changed-file lane also brings orchestrator-task-service.ts into LCOV (65% locally, above the 50% floor) instead of MISSING. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * chore: retrigger pull request synchronization Empty commit: the previous push did not produce a pull_request synchronize event. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: wakesync <shadow@shad0w.xyz> Co-authored-by: wakesync <wakesync@users.noreply.github.com> Co-authored-by: Shaw <shawmakesmagic@gmail.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…fail-closed harness The ELIZA_SENSITIVE_LIVE leg of the sensitive-request hosted-page e2e was a placeholder that unconditionally threw, so supplying the documented credentials could never turn it green (#16940). Replace it with a real harness that drives the deployed cloud end to end when the gate is on: - create over the real /api/v1/sensitive-requests API (API-key actor, real Postgres row, sr_ single-use token mint) - the real hosted page shell at /sensitive-requests/:id serves HTML - token-gated public view (no audit exposure to token holders) - sessionless single-use-token submit of a random sentinel -> fulfilled, real org-secret row created (secret.set audit carries the secretId) - replay of the consumed token rejected 409; tampered token rejected 401 without burning the genuine one; canceled request refuses a late submit - full audit-trail sequence asserted via the org-credentialed private view (the observation contract an agent container holds) - every response body swept to prove the submitted value never appears in any transport payload Secret target keys are minted per run (org secret names are unique and the API has no delete endpoint), and 429s from the STRICT submit rate limit are waited out so the harness is repeatable back-to-back. The connector-DM leg sends the real Telegram Bot API tap-through DM (the production adapter wire shape) and then fail-closed polls for the human hosted-page submit; it is additionally gated on TELEGRAM_BOT_TOKEN + ELIZA_SENSITIVE_LIVE_TELEGRAM_CHAT_ID. CI behavior is unchanged: without the env the live tests skip with a reason and the nine deterministic cases still run. Part of #16940 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…17013) PR #16970 accidentally committed ~27 MB of locally built fused-inference shared libraries (.fused-lib/*.so + build stamp) at the repo root. Nothing consumes them: the voice-live-e2e workflow builds the fused lib in its own voice-fused-build job into $GITHUB_WORKSPACE/fused-lib and hands it to the self-hosted jobs as an artifact. Delete the directory and gitignore both staging-dir spellings so a local stage-desktop-fused-lib.mjs run can never be swept into a commit again. Flagged pre-merge on #16970 but the PR merged before the lane removed them. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
… side-effect-claim sentence anchor (#16987) * fix(benchmarks): exclude nested .git repos from HF uploads too PR #16954 review follow-up: HF_UPLOAD_IGNORE_PATTERNS had .git/** but not the **/.git/** twin the file's own comment mandates. The local walker matches directory patterns at any depth, but HfApi.upload_folder's filter_repo_objects fnmatches the full relative path only — so a nested git repo under benchmark_results/ would be uploaded to the Hub while absent from the printed upload set and the secret scrub (the unsafe direction of a set mismatch). Adds the twin plus an exclusion-parity test covering both the local walker and an fnmatch simulation of the HF-side filter. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(core): anchor bare 'done —' side-effect claim to sentence start PR #16966 review follow-up: the done\s*[—–-] branch of COMPLETED_SIDE_EFFECT_CLAIM_PATTERN false-positived on congratulations like "Well done — that's every task cleared.", wrongly rerouting a simple-path reply to the planner. The branch is now anchored to the start of the (trimmed) reply or of a sentence ((?:^|[.!?]\s+)done), so "Done — I've set two reminders." still trips the guard while mid-sentence "well done —" praise passes through. Adds regression cases for both directions plus the "All done — reminders are set" route through the reminders-are-set branch. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(test): point plugin-sql/signal/whatsapp vitest aliases at src/ — typescript/ no longer exists The stale path made the core vitest lane's @elizaos/plugin-sql alias resolve to a nonexistent file, surfacing as "Cannot find package '@elizaos/plugin-sql'" in the coverage lane for any test using the PGLite runtime helper (first exposed by the #16966 test file; that PR was admin-merged over the red). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Shaw <shawgotbags@gmail.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
test(cloud): real fail-closed live harness for the hosted-secret round-trip
fix(ci): isolate Local Inference benchmark backend
…16647) * fix(cloud): gate the snapshot lane fail-closed and bound hydration The production provisioning worker repeatedly exhausted its Node heap processing agent_snapshot work: hydration buffered the entire snapshot body unbounded (res.json()) then re-stringified it to measure size — doubling peak memory — with no independent switch for the lane and no way to keep a restart from resurrecting snapshot jobs. Fail-closed lane gate (#16639): - agent_snapshot claiming and startup recovery are disabled unless ELIZA_SNAPSHOT_JOBS_ENABLED is exactly 'true'; every other lifecycle lane stays independently operable. The stale sweep deliberately keeps the lane (a DB-only pending flip, no hydration) so stuck rows drain the moment operators enable it. - Belt at the dispatch: a snapshot job claimed through any other path while gated is re-scheduled without burning an attempt — observable, never a fabricated success. - When enabled, the lane is forced sequential (batch 1) so phases settle before another payload is allocated. Bounded hydration: - fetchSnapshotState streams the body against a raw byte budget — bytes past it are never retained; the parse is fail-closed on malformed JSON; expanded file-count and byte budgets (workspaceFiles + every manifest file set, counting max(declared, decoded) so a lying manifest cannot under-declare) are validated before persistence; the measured size comes from the counted stream instead of a re-stringify. - Budgets env-overridable for the staging soak (raw 256MiB, 5000 files, expanded 384MiB defaults). Tests: gate exact-match + claim/recovery exclusion + batch-1, the dispatch suite arms the gate per snapshot case, streaming budget rejection, expanded-budget fail-closed. Two composite coverage lanes join the workflow's process-isolated list (their suites interfere in a shared process — the exact reason that list exists). Fixes #16639 * test: arm the snapshot gate in the delete-lifecycle suites The Agent-not-found and idle-SKIP suites drive the gated snapshot execution path; per-case/per-suite arm with restore, mirroring the dispatch suite — never module-wide, since shared-process runs share the env. * test(cloud): lift eliza-sandbox changed-file coverage over the 50% gate Compose the shared-billing, bridge-failureKind, bridge-delta-SSE, and coding-container-quota suites as isolated 16639 coverage lanes (the gate runs each changed test file in its own process, so the interference that kept them out of lane 1 cannot occur there), and cover the remaining hydration budget edges: the reader-less readBodyWithinBudget fallback on both sides of the budget, and the manifest file-set counters -- every component file-set plus configFile, on both sides of the max(declared, decoded) accounting. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Sol <sol@shad0w.xyz> Co-authored-by: Shaw <shawmakesmagic@gmail.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
* test(dev): cover source-conditioned Vite imports * fix(app): align interaction coverage signals * test(app): refresh chat minimalism baseline * test(app): classify simple views interaction coverage --------- Co-authored-by: Shaw <shawgotbags@gmail.com>
… trunk (#17016) MyAppsView gained a Cloud Apps studio row (navigateBrowserPath onClick) in e0cb8de, which merged in parallel with the #16951 completeness sweep; both branches were green alone but the combined trunk fails the sweep with an unmapped-mutating-page finding for MyAppsView. Map it to BROWSER with the count pinned at the single observed site. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…16979) * fix(app-control): humanize settings route failures in chat replies A failed settings loopback route used to narrate raw internals to the user ('I couldn't change ... : route /api/views/settings/navigate returned 401'), the class behind the settings-open 'Authentication error' QA report. Map the failure classes to copy a person can act on: - 401/403 -> transient session hiccup with an explicit retry affordance - 404 -> surface not available in this app version - 408/429/5xx -> temporary error + retry, keeping a descriptive server detail and dropping boilerplate status-text bodies - other client errors -> prefer the server's descriptive error verbatim; the technical path/status fallback remains only when nothing better exists Frontend/narration only: no route, API, or auth behavior changes. * chore: refresh PR checks --------- Co-authored-by: 0xSolace <shadow@shad0w.xyz>
Refs #16431. Co-authored-by: Shaw <shawgotbags@gmail.com>
* fix(ui): staged human copy for provisioning + cold-boot waits
The 30s+ provisioning wait narrated raw backend job states to the user
('Status: pending...', 'Starting your agent (unknown) — 35s elapsed...')
and otherwise sat static, the 'no progress feedback during provision' class
from the 2026-07-22 QA reports. Replace both poll-tick narrations:
- provision job wait: staged copy driven by the real job status
(getting environment ready -> starting your agent), advancing to
reassurance copy past 20s and to elapsed-time copy past 60s
- dedicated cold-boot wake wait: expectation-setting copy for the first
minute, then minute-bucketed progress
Both are bucketed (30s / 1min steps) because consumers seed one chat turn
per unique status text, so per-tick counters would spam the transcript.
No control-flow, polling, or API changes — narration strings only.
* chore: refresh PR checks
---------
Co-authored-by: 0xSolace <shadow@shad0w.xyz>
Contributor
|
❌ PR title does not match the required pattern. Please use one of these formats:
|
Contributor
LifeOps Multi-Tier BenchmarkSuite:
|
7 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Promotion: staging-verified 9f4dbdb → prod
Authorization: Shadow chose Option C at 06:01 MDT 2026-07-23 in #cc-eliza: promote staging 9f4dbdb to prod NOW for stability; latency fixes ship as fast-follow. Also covered by standing promotion orders Jul 22 21:58 / 22:46 MDT.
Commit:
9f4dbdb78b8f219aea44a91cabf2614be6aa7a5b(exact staging commit, verified serving on https://api-staging.elizacloud.ai/api/health at promotion time).Content: superset of prior main candidate 8fa117c (verified ancestor). Carries #16925, #16913, #16919, #16887, #16907, #16976, #16969, #16973, #16977, #17019.
Evidence:
PROD-GO-2026-07-23.md(staging flip receipts, provisioning E2E green, latency decomposition). Latency fast-follows tracked separately (fast-lane single-LLM-call streaming, persistent bridge connections, #17014 re-land).Rollback anchor:
main@249403b5364d40a8e1db37e2a6b2bbb2e39fee14(no cloud-DB migrations ride along, schema-safe revert).Merge method: MERGE COMMIT per promotion pattern (not squash).
Guardrail: prod agent-container image pin (
sha-39d18c4) stays untouched; platform-only promotion.[sol-promote-c]