Release Notes
Stay up to date with the latest features, improvements, and bug fixes in HyperStudy.
Latest Releases
v0.7.2
Released: 2026-07-29
What's Changed
Changes since last production release
- fix(data): unify state-flatten semantics across V1 runtime and V3 EventProcessor (04869a4dd)
- fix(v2): execute states in designer-authored order, not creation order (72184fa9b)
v0.7.1
Released: 2026-07-28
What's Changed
Changes since last production release
- test(emulator): update invitation tests for kept-token resend and idempotent re-accept (66f71fa52)
- fix(devices): Kernel marker integrity — completion-navigation race and reconnect duplicates (4481c8e59)
- fix(auth): invitation token stability, delivery/accept error surfacing, ToS gate and accept flow (46c4a99c8)
- test(frontend): complete dataServiceV4 mocks in runner-mounting suites (427fff808)
- fix(data): component instance pairing, completion lifecycle dedup, experiment.end anchors, participant-export anchor merge (6da5e902f)
- fix(timing): review findings — timestamp authority, clock validation, anchor spoof/restart guards (57c6facae)
- fix(timing): server-timeline event clocks on both runners, onset-anchor hardening, type-unified timestamps (47a6b74f6)
v0.7.0
Released: 2026-07-18
What's Changed
Changes since last production release
- feat(agent-designer): single-row cognition sub-nav with underline and segmented TabGroup variants (735aa58e1)
- fix(v2-showvideo): remove viewer role-label badge colliding with header overlay (fc75e28bc)
- feat(api): v3 spec accuracy pass, cognition catalog endpoint, agent-role authorization (a9e2873a3)
- docs(cognition): ToM perspective-frame leak observations log from dev validation (75465c686)
- fix(cognition): code-review findings on goals revision and offline healing (5872ec4f9)
- fix(cognition): per-goal revision, goals panel redesign, offline write-binding healing, v2 rebuild notice (9c78cbda7)
- fix(cognition): Plan C review findings — real per-context importance binding, filter-safe inspector, surfaced gaps (65f439591)
- feat(cognition): per-context offline loop execution (Plan C) (20f8cb33b)
- docs(cognition): implementation plan for context offline loop execution (Plan C) (daeab97ed)
- fix(cognition): Plan B review findings — unstranded personas, shared memory clock, surfaced gaps (ea9e2ab18)
- feat(cognition): context tabs and canonical canvas emissions (Plan B frontend) (78df74420)
- feat(cognition): canonical contexts shape and context-keyed engine (Plan B backend) (7cd802ac8)
- docs(cognition): implementation plan for contexts shape and online loops (Plan B) (8051a34bd)
- docs(cognition): spec v3 — symmetric context shape, clean break, whole-mind as reserved 'mind' context (a9bd38aa9)
- docs(cognition): context bundles — per-context offline loops with a whole-mind level (spec 3.4 v2) (41e971585)
- fix(cognition): gate review findings — stale-slot pruning, string coercion, tolerant validation, authoring polish (d2d90a644)
- feat(cognition): surface gateFired in decision details and the AI Agents tab (dadfe5c4d)
- feat(cognition): gate authoring on the canvas — normGate parity, updateNode backstop, inspector Gate section (b70674223)
- feat(cognition): skip-to-decide gate execution in the chain engine (0d165089c)
- feat(cognition): gate normalization and validation (skip-to-decide valve, spec 4.1) (550cfaecb)
- docs(cognition): implementation plan for skip-to-decide gates (Plan A) (128109a04)
- docs(cognition): context-aware offline (spec 3.4) — provenance stamps, offline node context filter, shared importance accrual (03e0d2d5c)
- docs(cognition): spec for per-context cognition graphs and skip-to-decide gates (7f1b9a4b3)
- fix(cognition): system-wide bug and performance pass across engine, stores, offline, and canvas (fb5143238)
- fix(cognition): edge arrowheads at target, visible implicit skeleton, discoverable edge tools (747989088)
- Merge remote-tracking branch 'origin/dev' into feat/cognition-memory-stores (dde0ae2be)
- fix(agents): warn (not error) on decide.inputs slots no node produces (d8daaaaf2)
- fix(cognition): restore offline edge deletion, decide.inputs/layout bookkeeping, goal drafts, and anchor draggability (892293e81)
- feat(cognition): offline canvas layout parity and node fidelity (172688666)
- fix(cognition): rewire recipe inputs through offline id-rename map (68a52bb4b)
- feat(agents): offline cognition recipes and starter gallery (c8c2fb0ed)
- feat(cognition): recipe starter gallery with descriptions (8856c76a4)
- fix(api-v3): address code-review findings on the agent write surface (74a7f7991)
- feat(agents): fold Offline into the Cognition tab as sub-tabs (c3a48060d)
- fix(cognition): goals editor a11y + blur-commit coverage, drop dead context panel (8648d483c)
- feat(cognition): stores-only rail and structured goals editor (8810d9a54)
- test(cognition): drive edge reverse through the rendered button (b8a4fa060)
- feat(api-v3): agent deployment write surface under write:deployments (0ec7f0822)
- feat(cognition): draggable orientable canvas, live wiring validation, drill-in removed (9c5be8434)
- feat(api-v3): persona CRUD routes with read:personas/write:personas scopes (d5f7fbd04)
- feat(api-v3): accept agent authoring fields on experiments; document agent-data endpoints (98b485e12)
- feat(cognition): restore spec §4 node and edge rendering (4184f7942)
- feat(cognition): synthetic Goals and ambient Identity stores on the canvas (bd0a9c98c)
- fix(cognition): layout setters normalize a missing layout key (a57d4211d)
- feat(cognition): persisted layout state and orientable dagre (3123c5b11)
- feat(cognition): reverseEdge helper for authored edges (f285cf2e4)
- feat(cognition): wireable Perceive/Decide anchors via perception slot and decide.inputs (d60b66ac9)
- fix(agents): reserve the perception slot name on node outputs (cf7409927)
- feat(agents): reserved perception input slot and decide.inputs integrator filter (b8fd52993)
- feat(cognition): frontend structured-goals normalizer parity (80ed0f305)
- feat(agents): thread structured goals through seeding, prompts, and goal-valence (96538a465)
- fix(agents): validate goal entries strictly and refresh stale goals comments (16a016022)
- feat(agents): structured goals store — backend normalizer and helpers (32cceb051)
- Add cognition canvas UX overhaul implementation plan (d5436b2ec)
- Add cognition canvas UX overhaul design spec (791b79de5)
- fix(agents): clean node bindings on both node sets when a shared store is removed (812fa5e18)
- Fix offline cognition node removal dangling edge cleanup (ca92537f4)
- fix(agents): reject a node that is both deliberate and a store-write (31e87f6fd)
- fix(agents): reject stores that resolve to a duplicate id (2c86ec9b9)
- fix(agents): normalize offline config before passing it to the participant (d5ca9c897)
- fix(agents): serialize timer-fired offline runs through the observation queue (dc2ad2bb6)
- Surface offline runs as filterable rows with a structured detail panel (346420024)
- Wire the offline bundle from agentRunner into the participant harness (9679d94ab)
- Add importance-threshold offline trigger to agentParticipant (640477ea5)
- Add leak-free re-arming timer offline trigger to agentParticipant (9c564065d)
- Fire endOfExperiment offline trigger from agentParticipant and record the run (2697cd09a)
- Attach offline run handle onto the llmDecide callable (aa679543e)
- Add strategy.runOffline against the persistent chain store registry (8732679c1)
- Add episodic importance accumulator and consumeImportance to chain strategy (89a7c3bcc)
- Cover sanitizePersona offlineCognition passthrough with tests (709d02646)
- Persist and resolve persona offlineCognition through the agent config pipeline (f11ca09bb)
- Add offline canvas cross-stack seam cases against the real backend validator (4573a6f5b)
- Wire Offline tab into AgentDesigner with shared-stores channel (954ab1261)
- Add offline cognition editor assembling rail, canvas, inspector, shared stores (605c6d572)
- Guard offline node inspector resync against same-node edit clobbering (8ffe82eb2)
- Add offline node inspector with Ruminate validation knobs (3f85af667)
- Add offline config rail for triggers, budget, and drives (593102758)
- Flag offline store edges as memory edges for correct SkillEdge styling (861da6a6d)
- Add offline cognition canvas and node card (794b7a4c1)
- Cover applyOfflineConnect invalid/duplicate-edge branches with tests (ecbefccf2)
- Add offline graph flow derivation and edge wiring (413b5b72b)
- Add offline config-rail mutations (triggers, budget, drives) (c737d01a2)
- Add offline node palette templates and node mutations (e075473dd)
- Add offline cognition graph normalizer with byte-for-byte backend parity (92b090f33)
- docs(cognition): Plan 3 (offline canvas) implementation plan — 19 TDD tasks (23fb338e4)
- docs(cognition): resolve Plan 3 scope (offline canvas + self-contained runtime wiring); split idle/section to Plan 4 (834fc374d)
- docs(cognition): Plan 3 (offline canvas) handoff — context, scope, open questions, process (dfb59c1d2)
- Add cross-boundary seam coverage for the deliberate node (39625367a)
- Add deliberate knob controls to the cognition SkillInspector (8ec93796f)
- Mirror the backend deliberate config normalization on the frontend canvas (e4568e84d)
- Surface the deliberate chosen score in the decision mapper (8b4692734)
- Add a deliberate ability and experience-guided-decision recipe to the catalog (5408faa19)
- Wire the Deliberate branch into chainStrategy.runNode (28bd6aea6)
- Add runDeliberate: generate candidates, score against past episodes, pick the best (bc5a0ad66)
- Validate the online deliberate knobs in checkChainConfig (3fc70bc83)
- Normalize the online deliberate config object in chainConfig.normNode (818608acf)
- Hoist offlineGenerate/createBudget/parseJsonLoose into a neutral llmGenerate module (6a8268f4d)
- docs(cognition): Plan 2c (online Deliberate node) implementation plan (07bfcfc63)
- docs(cognition): resolve Plan 2c online Deliberate design (feeds decide, conservative defaults) (f690910ae)
- Add validated-rumination round-trip integration test (8e4683c72)
- Thread goals into runOfflineCognition and record validated-promotion accounting (f2326f2fa)
- Implement Ruminate validate:true: replay-against-memory, promote net-positive tagged insights (e9cbe4008)
- Add additive provenance passthrough to the stream store write path (3b16cd4a5)
- Validate validated-rumination knobs; remove the validate:true not-implemented warning (27d95b9ab)
- Normalize validated-rumination knobs (outcomeSignal, testSetSize, triggerWeight, promotionThreshold) (86413ddef)
- Add memoryTestSetValidator: sample episodes + weighted net-positive promotion (9b9e87743)
- Add outcomeScorer: LLM-judged bounded improvement per candidate/episode (0dc69d822)
- docs(cognition): Plan 2b (validated rumination) implementation plan (a2791f11a)
- docs(cognition): resolve validated-rumination outcome signal + sampling; defer rollback; add online-deliberation dual (ab53cfd3c)
- Reject offline nodes that write a belief/opponent store (must be a stream store) (c6d10457d)
- Add offline subsystem round-trip integration test (a9564de34)
- Surface the offline run record on the decision detail mapper + hasDetail (bdf473e86)
- Add offline drives: scale node knobs, replay bias, importance threshold (0d7515c61)
- Add runOfflineCognition: budget-bounded offline runner over topoLevels (a74cb49a1)
- Add Ruminate executor: prioritized replay + ungated counterfactual insights (18d09e81c)
- Add Consolidate executor: abstract accumulated insights into deduped rules (bec48d080)
- Fix runReflect: propagate offlineGenerate skip reason (budget/error/no-parse) to result.skipped (b3f54dc0b)
- Add Reflect executor: episodic memories to distilled semantic insights (331c8368f)
- Add offline node infra: budget, fail-safe generate, JSON parse, memory-source selectors (40d0cc8fd)
- Add pure offline trigger predicates and shouldRunOffline aggregator (183e93fbd)
- Validate the offline cognition config (node kinds, write bindings, knobs, drives) (1059b0209)
- Add normalizeOfflineConfig for the offline cognition graph (2dbecb414)
- docs(cognition): Plan 2 (offline engine) implementation plan (09ef03cb4)
- Address whole-branch review follow-ups: type-aware recipe store-id seed + belief write() copy-on-return (8296a9e80)
- Render + inspect all four store types on the canvas; add cross-boundary seam case for new stores (0d142b649)
- Add new-store catalog abilities + social-tom recipe; export storeSnapshots on decision detail (8af1c42c4)
- Generalize frontend normStores/addStore/updateStore/DEFAULT_STORE to four store types (51040fce5)
- Validate semantic/belief/opponent store types; enforce peer-scope on belief/opponent writes (a08e98f61)
- Replace single episodic var with a multi-store registry in chainStrategy (24656cff8)
- Generalize backend normStores to episodic/semantic/belief/opponent (9c8d10b56)
- Add createStore type dispatcher with uniform read/write adapter (ffdb6141e)
- Add createOpponentStore per-peer partner model store (af272762b)
- Add createBeliefStore structured who-knew-what-when store (1980a822a)
- Add createSemanticStore insight stream store (ffd3c7817)
- Extract createStreamStore shared machinery; episodic delegates to it (1be03e5e5)
- docs(cognition): Plan 1 (memory stores) implementation plan (1e2faf7f0)
- docs(cognition): belief-tracker written explicitly by mentalize nodes (29d604ee9)
- docs(cognition): experimenter-defined offline triggers (idle/section/timer) (040298ce5)
- docs(cognition): make rumination validation optional (pure-text default) (2c2e8dd53)
- docs(cognition): Memory & Offline Cognition design spec (15affcdb7)
- fix: update stale v2 cognition fixture to valid v3 config (4f488ad9e)
- fix(cognition): correct feedback prior scope, dedup, and degraded-turn bookkeeping (c60f4b86c)
- fix(cognition): bound episodic retrieve LLM relevance to a candidate pool (b0c9e1c53)
- fix(cognition-validation): block v2-shape configs, empty-prompt nodes, and dead feedbackSource references (50d55e627)
- fix(cognition): unify episodic STORE on backend node.store model (eb3edbec4)
- fix(cognition-ui): axis control aria-labels contain their visible text (4fe67de9e)
- fix(cognition-ui): episodic stores are removable from the canvas (21c7e890c)
- fix(cognition-ui): drill-in subflow anchors render their label, not "level" (0ea334bfa)
- feat(cognition-ui): wire v3 canvas, drill-in subflow, retire lane/frame/scorer UI (a2ac4a69a)
- feat(cognition-ui): v3 resolve path, recipe picker, store-aware memory rail (e778471ab)
- feat(cognition-ui): abilities + recipes catalog menu, serve ABILITY_CATALOG/RECIPES (ba64b212d)
- feat(cognition-ui): inspector node axis controls + episodic store panel (ed148657c)
- feat(cognition-ui): typed/timed/store edge styling with z-inverse glyph (a53715c90)
- feat(cognition-ui): StoreNode cylinder + reserved GateNode, retire lane/frame/scorer nodes (8ab78ddb1)
- feat(cognition-ui): AbilityNodeCard with fanning/depth/drill-in visual language (857504560)
- feat(cognition-ui): free-DAG dagre layout, retire lane bands (d2f77be2c)
- fix(cognition-ui): resolve feedback-edge slotType from producer node id, not slot (8a3ab6634)
- feat(cognition-ui): configToFlow v3 with axis/typed/store edge encodings (e1ce29edb)
- fix(cognition-ui): two-pass rename in instantiateRecipe + slot-namespace store uniquify (7d75b139c)
- feat(cognition-ui): recipe instantiation with id/slot uniquify (bf3b9e9f8)
- test(cognition): add 5 regression-guard tests for wiring module (796cae81e)
- feat(cognition-ui): whole-DAG visibility, cycle guard, connect/disconnect (89390ea0f)
- fix(cognition): normalize frontend to backend — retrieval weights, name default, goalsSeed (eb12a3184)
- feat(cognition-ui): episodic store CRUD + store/memory normalization (bcc1f250a)
- feat(cognition-ui): v3 config core, node CRUD and axis mutations (a91f552ca)
- fix(cognition): short-circuit relevance scoring when weight is 0 (9206a9ee8)
- feat(cognition): surface episodic export at decision detail level (4c75e2f39)
- feat(cognition): retrieve node injects scored top-k, retire blind memory tail (f6e434e5e)
- feat(cognition): Encode node writes an authored episodic record (store binding) (45814c628)
- feat(cognition): auto-encode perception/action/outcome into episodic store per turn (3c9da508a)
- feat(cognition): seed episodic store in strategy closure, export on decide trace (5c194b788)
- feat(cognition): scored episodic retrieval (recency×importance×relevance, top-k) (dd25af8cd)
- feat(cognition): LLM importance scoring at episodic write time (0f2c2d61f)
- feat(cognition): episodic memory-stream store factory (records/seed/export) (6e7ac5f2e)
- fix(cognition): surface v3 comparator signal in decision mapper (9bcc1df24)
- fix(cognition): drop r.skills legacy alias from chain normalizer (753293f11)
- chore(cognition): remove dead v2 scorer prompt functions (25506f599)
- chore(cognition): remove dead lane/frame/scorer code, update tests to v3 (b5dea40aa)
- feat(cognition): validate v3 node axes + store shape (4edd55ce8)
- feat(cognition): v3 ability catalog + recipes, retire frame/scorer catalogs (129e6f22c)
- fix(cognition): interleave self+peer chain nodes by topological wave (6d5b43f84)
- feat(cognition): scope-based execution + authorable temporal comparator (fe1cc3a5a)
- feat(cognition): scope-keyed slot producers (016e58e8b)
- feat(cognition): single-DAG topo order, retire lanes (1dbdf1467)
- feat(cognition): v3 config normalizer (nodes/stores/memory), drop lanes/frames/scorers (ba95de18f)
- fix(cognition): retire stale v2-shape assertions in chainConfig.test.js, trim dead frame comment (f3edf1697)
- feat(cognition): v3 node normalizer with scope/depth/time axes (f9239ad92)
- docs(cognition): Plans 2 (episodic store) & 3 (frontend canvas) + Plan 1 catalog reconciliation (6f53b76a6)
- docs(cognition): Plan 1 of 3 — backend engine (node model + 3 axes + temporal comparator) (7f1342f3d)
- docs(cognition): drop migration (clean break) + build stores on existing memory rail (0cdb18275)
- docs(cognition): foundation redesign spec — the honest graph (2a5dc2c6f)
- fix(agents): suppress chat icebreaker when a human speaks during the opener window (a776a6b50)
- fix(v2-rejoin): review findings — gate union, sparse-rating deferral, dedupe, stale guards (5f917ea4a)
- fix(v2-rejoin): host reload no longer desyncs the dyad — every rejoin gates on a fresh playback-ready (d4983fd9e)
- Merge remote-tracking branch 'origin/dev' into feat/prolific-gateway-e2e (f4c98a9cb)
- fix(media,e2e): review findings — deferred wedge recovery, resume after reset, real concurrency lock, gateway preflight (68deb0fbc)
- Merge remote-tracking branch 'origin/dev' into feat/custom-agent-provider (1275f9d44)
- feat(agents): Test Connection surfaces endpoint sampling defaults from /props (custom only) (0a0443163)
- feat(agents): curated llama.cpp sampler sliders for custom provider (author extraParams) (73a86274f)
- fix(e2e): self-contained webServer env — fake Firebase config + VITE_BACKEND_URL (e192b371f)
- fix(media): recover the wedged HLS pipeline after a pre-buffer claim (Chrome 150) (74d926a83)
- fix(cognition): review findings — self-as-peer, frame input leaks, roster authority, scorer staleness, depth validation (b125cdc93)
- feat(e2e): Prolific gateway journey test — real entry URL to completion-code redirect (2614569a7)
- Merge remote-tracking branch 'origin/dev' into feat/agent-only-deployment-ux (356e913c6)
- Merge remote-tracking branch 'origin/dev' into feat/custom-agent-provider (744be73aa)
- fix(agents): persist extraParams + disableThinking through persona sanitizer (else custom params silently dropped) (586d48194)
- feat(agents): surface endpoint capabilities from custom Test Connection (3e812984c)
- feat(agents): custom provider extraParams + disableThinking controls in agent designer (9d2f1e454)
- feat(agents): probe discovers endpoint capabilities via /props (tools, vision, thinking toggle) (572e65452)
- feat(agents): custom provider extraParams passthrough + disableThinking convenience (2364b1247)
- ci(test): cut Test Suite wall-clock ~26min -> ~12min (3ac2d9ce4)
- fix(agents): custom model input emits on input not blur (fixes 'model required' when saving/autosaving mid-type) (8367693b3)
- Merge remote-tracking branch 'origin/dev' into feat/custom-agent-provider (65431b36e)
- fix(agents): actionable SSRF errors — point users to a public tunnel for locally-served models (6c929ed3a)
- Merge remote-tracking branch 'origin/dev' into fix/account-switch-role-gate (e23147982)
- feat(auth): strict role sequestration — platform admins see /platform-admin only (05366fe88)
- Merge remote-tracking branch 'origin/dev' into feat/custom-agent-provider (c1ac797c5)
- fix(agents): preflight validates the API key via completion probe (deduped per endpoint); comment accuracy (b537da08c)
- fix(agents): pin all validated DNS addresses (dual-stack Happy Eyeballs) not just addrs[0] (cc74b6189)
- Merge remote-tracking branch 'origin/dev' into fix/account-switch-role-gate (a536093d0)
- fix(auth): dev startup seeding wiped platformRole claims; persisted SWR cache leaked across account switches (d65950602)
- perf(agents): dedupe preflight endpoint probes; share one guarded-fetch Agent (9e0896426)
- feat(agents): chat initiation trigger — persona-gated opener on idle states (76b0b3f2a)
- fix(agents): custom-provider models are never priced (no phantom USD cost) (961144e9e)
- fix(agents): custom credential timeout is opt-in and clearable; failed test-connection returns error status (d89463ef4)
- fix(agents): urlGuard SSRF blocklist adds special-use ranges; reject non-string/number credential fields (46fc0498e)
- fix(agents): urlGuard pinned lookup returns address array (Node 20+ autoSelectFamily); real dial-through test (de1017c29)
- fix(auth): reload the tab when its Firebase session is replaced by a different account (02a7adc4f)
- Merge remote-tracking branch 'origin/dev' into fix/account-switch-role-gate (75ed692b2)
- fix(auth): verify-role wiped platformRole claims on every call; prefill must beat autofill (c5a31708d)
- Merge remote-tracking branch 'origin/dev' into feat/custom-agent-provider (dd2597f6e)
- test(agents): redirect-refusal + preflight mixed-role coverage; timeoutMs string coercion; JSDoc (aee220846)
- fix(agents): custom endpoints use a real model id — probe discovers from /models, config requires explicit model (d1a319233)
- feat(agents): single-call chat turns with screen context and image perception (9021a3f56)
- fix(agents): undici v7 for Node 20 CI compatibility; drop EOL Node 18 from test matrix (6d11373f1)
- test(settings): make sharing-failure test robust to new custom service entry (1ee0b465c)
- test(agents): add resolveCustomEndpoint to aiProviderKeyService mocks broken by preflight import (65d1b2ad1)
- test(agents): custom provider end-to-end fixture (run locally; CI excludes integration tests) (eb2b3e1b7)
- feat(agents): custom endpoint provider option in agent designer (72952645e)
- feat(agents): custom agent endpoint entry in Settings API keys (a293fba04)
- feat(agents): preflight live-probes custom endpoints before deployment (20637869c)
- Merge remote-tracking branch 'origin/dev' into fix/account-switch-role-gate (19871ee3d)
- fix(auth): close review round-2 gaps in slot handshake and redirect guard (b0371c11c)
- feat(agents): spawn agents against custom endpoints (baseUrl + per-credential timeout) (3bff81257)
- feat(agents): OpenAI-shaped generation params for custom provider (ec0e3b0d4)
- fix(auth): harden slot switching and role gate against stale state (review findings) (b61cee911)
- feat(agents): createCustomProvider adapter over guarded fetch (31d0bb6ad)
- feat(agents): custom endpoint probe service + credential save/test routes (a07334d95)
- feat(agents): resolveCustomEndpoint credential resolution for custom provider (54dff197a)
- fix(agents): urlGuard connect-time lookup fails closed on empty DNS answers (425418433)
- fix(agents): urlGuard classifies IPv6 numerically — closes URL-serialized mapped-address SSRF bypass, validates allowedCidrs (0ed09f754)
- refactor(devices): unify speaker gating on requiresMediaSetup; drop dead shouldShowDeviceSetup (1c77b3bcb)
- feat(auth): multi-session account switching — switch without re-entering a password (0e701be97)
- fix(auth): stop transient token failures routing admins/experimenters to /participant (5ade6d986)
- fix(agents): urlGuard blocks IPv4-compatible, NAT64, and site-local IPv6 ranges (d2f4522df)
- fix(runner): skip media-device setup for livekit-only experiments (text chat) (915ec2419)
- feat(agents): SSRF guard for custom agent endpoints (urlGuard) (27446d7b8)
- docs(agents): implementation plans — custom agent provider (platform) + Go demo client (e0175d4a2)
- feat(agents): accept 'custom' provider in agent config validation (00de31770)
- docs(agents): demo client design spec — Go CLI (serve/verify/tunnel) over llama-server (e0677220c)
- docs(agents): probe semantics amendment — /models is unauthenticated on llama-server; test-connection adds 1-token completion (1cf82acd6)
- docs(agents): custom agent provider design spec — external agents as 4th LLM provider (80e87c562)
- feat(cognition): roster-driven peers — mentalize a peer who has not acted yet (a984817b5)
- fix(cognition): scorer cost scoping + pin the implicit-inputs badge (affc74efd)
- feat(cognition): surface materialized edges and per-peer cost in the designer (dcb42b29b)
- feat(cognition): node-level depth control in the designer (bd16ac257)
- fix(cognition): per-peer scorer rows keep scalar columns; skip mentalize with no peers (d774ce68a)
- feat(cognition): fan the mentalize lane over every present peer (17850dbb9)
- test(cognition): lock in same-wave sibling trace preservation on mid-wave throw (1e1ac402c)
- feat(cognition): run cognition DAG waves concurrently (latency) (e54075e61)
- feat(cognition): execute node-level depth for mentalize skills (4d479754e)
- feat(cognition): retire recursive-attribution, migrate to goal-inference @ depth 2 (09509bb5f)
- feat(cognition): topoLevels wave scheduling for the chain DAG (3173c8ec7)
- fix(cognition): materialize inputs:null cross-lane via execution order (3a46c850c)
- docs(cognition): correct inputs:null materialization to cross-lane (execution order) (009e194db)
- feat(cognition): materialize inputs:null into explicit in-lane edges (df1929975)
- feat(cognition): node-level depth field (0-3) on chain skills (113085c7b)
- fix(cognition): clamp add-node menu height to viewport so it can't clip (c0b9b4ebc)
- docs(cognition): composable mentalizing implementation plan (10 tasks) (df77629c5)
- docs(cognition): composable mentalizing design spec (235b47547)
- fix(agents): snapshot deployment id in monitor refetch (stop GET /deployments/undefined) (16066bf5a)
- fix(agents): agent session writes completedAt on terminal marks (fix stuck-Active UI) (3c7b32689)
- fix(agents): clamp impossibly-small budgetTokens instead of aborting the room (bce7a5807)
- fix(agents): run-more 500 — export addAgentRoomsCapacity/getDeploymentRoomIds on default (93e46e164)
- fix(agents): dashboard reflects agent-only auto-completion (9d8e2093c)
- fix(deployments): idempotent status transition — no-op when already in target state (d58ac2870)
- fix(agents): dedicated deployment:room-progress event (stop flooding recruitment handler) (16a15c777)
- test(agents): update spawn-error assertion to the batch errors path (0bdd5e1c6)
- feat(agents): redesigned agent-only deployment monitor (982f0b540)
- feat(agents): client methods for run-more/stop/retry/spend + batch reader (fe792e499)
- feat(agents): bucketAgentRooms distinguishes failed from not-started (e9609f24a)
- feat(agents): per-room stop + retry routes for agent deployments (74d0c5c6a)
- feat(agents): run-more route — additive batch with cumulative capacity (90ac99fe7)
- feat(agents): route spawn errors to the room's batch (launches.<batchId>.errors) (d1691c498)
- refactor(agents): orchestrator launches an explicit batch with cumulative budget (b6be87400)
- feat(agents): batchId on agent rooms + recordAgentBatch (launches map) (592611296)
- feat(agents): deployment agent-spend endpoint (total + per-room) (9dcbc4b66)
- feat(agents): emit deployment room progress on v2 lifecycle transitions (9213e32a6)
- feat(agents): deployment-scoped room-progress emit helper (1d9f325c0)
- docs(agents): implementation plan — agent-only deployment UX (live monitoring + additive batches) (c5f7e591f)
- docs(agents): agent-only deployment UX design — live monitoring + additive batches (245ff0ff9)
- fix(auth): bound platform-admin token force-refresh to one shot per uid (c9ed466eb)
- fix(reconnection): recover participant role from session on overlay rejoin (5b3d6c768)
- Merge remote-tracking branch 'origin/dev' into worktree-v2-deprecation-fixes (1a0e87669)
- fix(agents): guard reserved-key remap collisions + ownerOrgId fallback in agent session (02091577a)
- fix(data): neutral empty-state copy for the Events tab (fed1931a9)
- test(agents): ComponentProcessor groups agent-emitted lifecycle events (read parity) (2073f04e8)
- test(agents): mock event-recording in spawner tests (pristine output) + assert recordEvent wiring (15d1cf495)
- feat(agents): emit component lifecycle + response events via V4 recordSessionEvents (a7a0be1e0)
- fix(agents): agentEventRecorder never throws on sync recordEvent failure (eb35fd2e5)
- feat(agents): per-agent component-lifecycle event emitter (d0ed7c762)
- test(agents): direct buildComponentEndEvent coverage + stricter response assertion (2f0fd8f8d)
- feat(agents): backend component-lifecycle event builders (human parity shapes) (538419edc)
- feat(agents): stamp organizationId + sessionStartedAt on agent session for V4 event enrichment (51b35c38a)
- refactor(v4): extract recordSessionEvents shared event-write service (543dcc011)
- docs(agents): design + implementation plan for agent event/component data parity (3dc534b8f)
- fix(v2-agents): persist agent decisions, ground ToM in observed state, guard unbound agent roles (f035a8770)
- fix(test): polyfill global WebSocket from ws in frontend parity tests — Node 18/20 (CI) has no global WebSocket, causing a deterministic ReferenceError (7a95f51eb)
- fix(test): add sparseRatingPauseActive to experimentStore mock (unhandled teardown error); run parity suite serially with retry to fix CI-only timer flake (1e650799d)
- fix(agents): gate send_chat on chatEnabled — prevents the disabled-chat deadlock where an agent loops on a rejected lk-chat and hangs the SYNCHRONIZED barrier (401a41ec7)
- Merge remote-tracking branch 'origin/dev' into feat/deployment-hardening (f5366bfb7)
- fix(agents): review round 2 — remove leaky preview experiment-edit bypass; count spawn-failed rooms as terminal for auto-complete (08bf15b11)
- fix(agents): review wave — gate deployment auto-complete to agent-only, close preview persona IDOR, readable spawn-failure room label (73d1c8807)
- chore(agents): deployment hardening polish batch — honest abort outcome, drop vestigial strategy column, cognition:null default, precedence help text (e1676e635)
- feat(agents): preview fails exactly as spawn — unbound 400s, validation blocks, experiment-edit governs bound-persona preview (dbb474173)
- feat(agents): scorers require an enabled producer; legacy inline agent config marked inert (8e081247a)
- refactor(agents): persona is the sole config source; legacy inline agentConfig is inert (0d307d90b)
- fix(agents): imports resolve agent bindings — dangling personaId nulled with an actionable warning (99e8052cf)
- fix(agents): role renames carry agent intent (roleOverrides + per-state guidance); migrateRoleIds extracted and unit-tested (135843001)
- Merge remote-tracking branch 'origin/dev' into worktree-v2-deprecation-fixes (b0055d4e3)
- fix(v2): round-2 review findings — reconnect stale-teardown target + resume-gate deadlock (7ec2eac6e)
- feat(agents): per-state agent guidance folds into the component configMode (allRoles shared, roleSpecific per-role) (917afe471)
- feat(agents): experiment prompt overrides append onto the persona, never replace (61f960af8)
- feat(v2-runner): minor cleanups (M1-M4) + reconnect timeout + stateId command wiring (d706a25a8)
- fix(v2-data): correct 4xx retry classification, keepalive/beacon size limits, in-flight race, unload double-send (review F-A..F-D) (d4e5954aa)
- feat(agents): terminal room and deployment states; silence dead legacy end for agent rooms (038846eba)
- fix(v2-engine): defer SYNCHRONIZED advance during a disconnect pause (audit [3]) (7478d2289)
- docs: Prolific gateway deep-dive findings (no exploit; 6 low/def-in-depth recs for a follow-up PR) (14667bc48)
- fix(v2): address code-review findings on the audit fixes (backend) (d63604c70)
- fix(v2-engine): gate rejoin resume on the rejoiner's playback-ready; make golden capture opt-in (6ea2ce67d)
- docs: implementation status appendix on the V2 deprecation audit (78ef19c7b)
- fix(v2-video): progressive fallback, auto-advance, buffering latch, Kernel bridge event (audit I7/I10/I15) (63b04fedc)
- feat(agents): spawn failures surface on the deployment monitor (6ce66d30e)
- fix(v2-runner): real-participant auto-reconnect + stale-connection detection (audit B1, client half of I6) (029589bab)
- fix(v2-ws): connection registry, setup-phase disconnect timeout, ws heartbeat (audit I5/I4/I6) (58b2ebd17)
- feat(agents): deploy-time preflight for agent roles (c0c5862dc)
- fix(v2-data): chunked flush, bounded retries, unload beaconing, Prolific outcome mapping (audit B5/I13/I14/B4) (624794216)
- ci: run V1/V2 parity and wire-protocol tests in the Test Suite (audit B8) (826ff6540)
- fix(v2-backend): session lifecycle, variable authz, onset fallback, inbound rate limit (audit B6/I1/I2/I12) (16acd9e2b)
- docs(agents): deployment hardening plan (02e90f6d2)
- fix(v2-runtime): TIMED state timers pause with the experiment (audit B2) (28e14bc34)
- fix(v2-engine): playback state guards from the deprecation audit (37b45dbdf)
- docs(agents): deployment system audit — designer/runtime contract and lifecycle findings (db500e113)
- refactor(agents): one execution model — retire the strategy enum, actionable retired-config errors (68d67719e)
- fix(agents): surface and clear legacy inline agent config that overrides bound agents (f4c53e170)
- fix(agents): close-button class collision, row-click edit, scorer use descriptions (d4d68bc1c)
- feat(agents): scorer auto-adds its producer; sonnet-5 in curated models; slim definition tab (e543b99f4)
- chore(agents): remove dead code stranded by the cognition and designer refactors (d63885551)
- chore(agents): bindings sweep — create guard and dead helper removal (03624c961)
- feat(agents): edit and create agents in place from the experiment designer (0812450cd)
- feat(agents): experiment agents tab is a binding surface — per-role agent cards (f845b3ddd)
- feat(agents): spawn requires an agent binding for agent roles (5d2b096ea)
- docs(agents): agents-as-bindings spec + plan (f7a392afc)
- style(agents): designer polish — memory property panels, events UI in episodic, larger canvas type (eb79b2f91)
- feat(agents): persona fields live in the cognitive canvas — memory rail editors, clickable anchors, conduit removed (708c2c5ec)
- style(agents): agent designer shell matches the experiment designer chrome (8ef8b7e78)
- test(agents): persona emulator suite pins the merge-patch PUT contract (7473e809d)
- fix(agents): designer keeps unsaved edits on failed close; skip no-op commits (f11208c2f)
- fix(agents): persona PUT is a merge-patch (a57b5655d)
- chore(agents): agent designer sweep (1f7ac1af9)
- feat(agents): remove redundant AI Agents room tab (bc350ee97)
- feat(agents): agent designer tabs and full-window persona editing (c054f89e9)
- fix(agents): parked flush bails after persona switch (88dee9a5b)
- fix(agents): agent designer autosave races — persona switch and flush reentrancy (73a1d86fd)
- feat(agents): agent designer shell with debounced autosave and definition tab (4d58c1614)
- feat(agents): shared model and guardrails editor (d59af1a0a)
- docs(agents): agent designer plan (422a97bb2)
- fix(agents): trim output slot on rename (959bf39eb)
- fix(agents): cascade frame membership and gate inspector mutations (1767657dd)
- chore(agents): guided canvas consumer sweep (19435e0b1)
- feat(agents): cognition editor v2 — always-chain, validator-clean emits (d9e7c65a0)
- feat(agents): guided cognition canvas — scaffold lanes, frames, scorers, memory rail (1974c0570)
- fix(agents): frame node keyboard isolation; catalog menu self-close (2930c5baa)
- feat(agents): guided canvas node components and lane-grouped catalog menu (e67c0ebe5)
- feat(agents): guided canvas view — scaffold flow nodes and lane layout (1f511c8e8)
- feat(agents): cognition graph v2 core - lanes, frames, scorers, memory mutations (0537b2e29)
- docs(agents): guided canvas plan (58d06dec3)
- fix(agents): apply reflect-lane goals_update; drop unused scorer param (74f0f70da)
- fix(agents): validator mirrors engine frame boundary (5ef3a5be4)
- fix(agents): empty-skill v2 configs render lane-aware signatures (fbaf9d490)
- feat(agents): valence analytics and lane-aware signatures with historical rendering (9a6962aaa)
- feat(agents): catalog v2 — lane-organized skills, frame preset, scorer descriptors (27b38efbe)
- feat(agents): chain engine v2 — lane execution, perspective frames, goal-error, revisable goals (952413323)
- fix(agents): guard goal-error prompt against missing goals or outcome (d3d89c198)
- feat(agents): memory prompt section, goal-error judge, goals-update contract (d1c66e139)
- feat(agents): validate cognition schema v2 - lanes, frames, scorers, memory (862b722ac)
- fix(agents): scorer sources configurable with defaults (91e40aea3)
- feat(agents): chain config v2 — process lanes, frames, scorers, goals memory (07ff43c3a)
- docs(agents): cognitive canvas sprint spec + backend plan (056a46775)
- fix(agents): canvas editor emits only validator-clean configs; blur-commit inspector fields (b4df7d95e)
- feat(agents): regret and perspective columns in the reasoning tab (4a90864ce)
- feat(agents): persona duplicate, import, and export (19be01b07)
- feat(agents): graph-canvas cognition editor with catalog and tom migration notice (d9b642977)
- fix(agents): inspector patches route through rename-safe updateSkill (844c30ebb)
- feat(agents): cognition canvas and skill inspector (flowmail DAG pattern port) (855e1273c)
- feat(agents): cognition canvas primitives — dagre layout, skill node card, edge, catalog menu (245a28849)
- fix(agents): cycle rejection accounts for implicit all-prior dependencies (9aff321e6)
- feat(agents): pure cognition config-to-graph transformations with cycle rejection (bd967f137)
- chore(frontend): add svelte-flow and dagre for the cognition canvas (28edcc9b5)
- docs(agents): cognition-skills frontend plan (034a8e18c)
- test(agents): harness-level coverage for the cognition-skills chain engine (da1351ad1)
- refactor(agents): chain-engine cleanups and defensive guards (833c156f4)
- fix(agents): include the agent's own submitted responses in perspective frames (a555e192c)
- fix(agents): cognition catalog served at the documented /catalog path (2e75c0abc)
- feat(agents): serve cognition skill catalog to the designer (132da9571)
- feat(agents): remove tom strategy; chain signatures and regret analytics continuity (9c6ad6987)
- feat(agents): validate chain cognition configs; retire tom strategy enum (0729eff0b)
- feat(agents): chain strategy — executor, peer mapping, perspective frames, temporal scoring (c32c37494)
- feat(agents): generic chain stage runners with perspective-stamped traces (cc905f4af)
- feat(agents): chain prompt scaffolding, perspective frames, judge prompts, skill catalog (6e722e626)
- feat(agents): per-scope slot store for chain runs (6ad1e80da)
- feat(agents): chain config normalization and deterministic topological order (524269e0c)
- docs(agents): cognition-skills spec, research report, backend plan (819ce7550)
- fix(agents): surface persona validation errors in UI; integer-coerce guardrail inputs (259a5cafb)
- feat(agents): honest guardrail placeholders; persona-aware preview with warnings (5532c84fa)
- fix(agents): preview 404 only for broken persona refs, not transient lookup errors (5be8b72d9)
- feat(agents): persona-aware prompt preview with access check and validation warnings (89186e159)
- feat(agents): strict persona-write validation; spawn fails closed on invalid config (28892ead4)
- feat(agents): pure validateAgentConfig with field-level errors (4ae6c9c03)
- refactor(agents): retire reasoningStrategy scalar; cognition.strategy is the only carrier (30b3afa16)
- fix(agents): preserve in-layer guidance newlines; meta.guidance non-empty invariant (f01006da3)
- refactor(agents): single mergePromptLayer primitive shared by resolve and assemble (d3944e524)
- refactor(agents): single agentDefaults module for guardrail defaults (7f0b0dffc)
- docs(agents): agent config pipeline spec + plan (2229bd69b)
- fix(agent-runs): drill-down lands on Reasoning tab, sort/loading fixes (c5dd99770)
- fix(agents): guard decision detail drawer against stale in-flight fetches (052bf98cf)
- feat(agents): ToM signal columns + lazy decision detail; canonical export columns (d65fef2dd)
- feat(agents): experiment-wide Agent Runs view with persona grouping and drill-down (7219f28c6)
- feat(agents): grouping/summary/filter utils for experiment agent-runs view (3e573d014)
- feat(agents): dataServiceV3 agent-runs + decision-detail methods; zip exports detail mode (cf29bbf98)
- feat(agents): per-decision detail endpoint serving stored blobs (476d6bfdf)
- test(agents): cover zero-runs, join-miss, non-terminal and ordering on agent-runs route (5bd8fc47c)
- feat(agents): experiment-wide agent-runs route via agentRuns collection-group query (c9c60bbef)
- test(agents): cover experiment-route per-room truncation OR semantics (4c732385e)
- fix(agents): query-level limit on agent-decisions reads; detail=true export mode (dfabc911f)
- feat(agents): surface ToM signals on decision rows, move blobs to detail mapping (4db360326)
- feat(agents): shared widened mapRunDoc with cognition signature and orphan flag (c1b2a421a)
- feat(agents): persist personaId, personaName, cognition on run manifests (aec724845)
- docs(agents): agent-runs-analyzable spec + plan + system review (d7ba7c5e2)
- fix(agents): clearable max-turns, experiment-wide cognition note, finish Personas->Agents rename (f78881c18)
- feat(agents): cognition designer in the experiment Agents tab (7dff0d15d)
- feat(agents): cognition designer + max-turns in the persona editor (a21026237)
- feat(agents): AgentCognitionEditor shared component (strategy + ToM ablation) (0c909f3ba)
- docs(agents): cognition designer UI implementation plan (479686eba)
- docs(agents): persona agent-config UI + cognition designer design (d324ec04c)
- fix(agents): rename Personas UI to Agents; fix editor modal width/box-sizing clipping (6c0c777af)
- fix(tom): peer-id migration, stale-action guard, partial-chain trace emission (b0c966bb3)
- fix(personas): broken persona reference fails spawn (ends room cleanly) via logger.warn (dd1b1e9c2)
- docs(agents): hardening plan (M1 persona-ref + C1 minors) (0a7ff91ad)
- feat(tom): data-type-agnostic LLM-judged prediction-error (replace hardcoded Brier) (05add0307)
- docs(tom): add Task 6 (general data-type-agnostic prediction-error) (b7fa1d278)
- fix(tom): forward phaseGuidance into ToM reasoning and decide stages (600bd2339)
- feat(tom): orchestrate ablatable ToM chain and register the strategy (cbb3124e5)
- feat(tom): staged reasoning + decide runners with fail-soft JSON parsing (cc5b2fe0f)
- feat(tom): per-peer belief store and prediction scoring (d15b7fbdc)
- feat(tom): normalize ablation config from cognition.config (b930f091d)
- docs(tom): Spec C1 implementation plan (ToM cognition engine) (ac6f574a6)
- feat(personas): unified permission constants + Share UI in persona library (e192e1442)
- fix(personas): pass _resourceType to permission-management gate so delegated canShare holders are authorized (82d001822)
- feat(personas): granular permission + visibility + owner-transfer endpoints (2aa93ff77)
- docs(personas): add unified-permission parity tasks (11-12) to Spec B plan (697331b83)
- feat(personas): per-role persona picker in the agent designer (persona + inline additions) (b49e81bc2)
- fix(personas): preserve SortableTable clickable class in persona picker rows (44dd31375)
- feat(personas): PersonaTableSelector picker emitting persona id (a9c255b18)
- feat(personas): persona library manager + editor + dashboard section (32ee92eab)
- feat(personas): frontend personaService for /api/personas CRUD (89151e177)
- feat(personas): include per-role personaId references in experiment export (e9d119760)
- fix(personas): validate name on PUT (400) and inject org context on update/delete (aa45a03bd)
- feat(personas): CRUD routes at /api/personas with org sharing (8e0243a46)
- feat(personas): resolve per-role persona at agent spawn (3ac482dea)
- docs(personas): record Spec A implementation plan (17c33dee4)
- fix(personas): keep reasoningStrategy and cognition.strategy consistent; defensive-copy seedMemories (867a094dc)
- feat(personas): resolveAgentConfig composition seam (persona base + experiment append) (cd50ee061)
- feat(personas): register persona resource type for sharing/permissions (1340ae2b8)
- docs(personas): Spec B implementation plan (personas as org-owned resources) (d77628c1e)
- fix(agents): make agent participant-row write best-effort so a Firestore blip cannot abort spawn (308db82c9)
- feat(agents): add participant-scoped Reasoning tab for agent rows (dd7c3945d)
- feat(agents): badge agent rows in the participants table (f166a4409)
- feat(agents): make AgentDecisionsTab filterable by participantId (c24d0dcff)
- feat(agents): expose isAgent on API participant rows for dashboard and SDK (38cd10eaa)
- feat(agents): register agent as a room participant row at session creation (be9e9dc37)
- feat(agents): stamp isAgent on persisted room participant docs (33b68d4eb)
- docs(agents): add agents-as-participants design and ToM reasoning chain spec (7d0328f5d)
- test(agent-deploy): stub recordAgentLaunch in pre-existing orchestrator tests (hermetic; real default hung CI Firestore) (224320b65)
- fix(agent-deploy): restore live monitors, live launch summary, distinct completed badge (e1f125ccc)
- fix(agent-deploy): stamp deploymentId on agent sessions, guarantee terminal launch status (5a815f122)
- feat(deploy): render AgentDeploymentMonitor for agent-only deployments (98d4fd9e5)
- feat(deploy): AgentDeploymentMonitor - config, launch summary, live room table (b478c4759)
- feat(deploy): bucketAgentRooms groups sessions by room into status counts (de2ddd1d2)
- feat(deploy): persist agent-only launch summary (launching/complete/failed + errors) (43f9fa8a5)
- feat(deploy): recordAgentLaunch persists agent launch summary (dot-path) (3af9d40d8)
- docs(deploy): implementation plan for agent-only deployment feedback (cdfa2662f)
- docs(deploy): design spec for agent-only deployment feedback panel (59f12647d)
- fix(agents): rewrite stale ExperimentAgents test + seed structured prompt default (780a29806)
- fix(agents): blank role overrides inherit base, chat prompts drop decision mechanics (9ff2f6e94)
- test(agents): settle extra async hop in agent e2e (strategy dispatch adds a microtask) (b27ceb1b9)
- feat(agents): structured base + per-role prompt editors with live preview (2d3bfe8a7)
- feat(agents): add stateless agent-prompt-preview endpoint (a4d2851b7)
- feat(agents): record structured prompt + reasoningStrategy in run manifest (6cb2741cc)
- feat(agents): dispatch response turn via reasoningStrategy (direct default, unknown fails loud) (517475c2e)
- feat(agents): reasoningStrategies registry with direct strategy (c7bfb21be)
- test(agents): migrate llmDecide test fixtures to structured prompt.persona (408c790ce)
- feat(agents): build persona from structured fields via assemblePrompt (d348c2386)
- feat(agents): pure assemblePrompt with per-field role composition (514d78cbb)
- refactor(agents): extract generateWithRetry into its own module (efa62826f)
- docs(agents): implementation plan for role-specific structured agent prompting (41ae44ae0)
- docs(agents): design spec for role-specific structured agent prompting (289cc3ff9)
- fix(agent-only): surface deployment validation errors to the client (400, not opaque 500) (86e7c705e)
- refactor(agent-only): remove designer deploy panel (moved to Recruitment tab) (9e46131c8)
- feat(agent-only): add AI Agents recruitment method to deployment creation (73c12da24)
- test(agent-only): cover ensureSession-failure launch tracking; tidy error string (a5527df4f)
- fix(agent-only): cap room count, tighten launch tracking, clarify budget + comments (fdafe3d84)
- fix(agent-only): deploy panel uses authenticated deployment path (6bafe2afc)
- feat(agent-only): designer affordance to deploy an agents-only run (985f33009)
- feat(agent-only): wire route trigger + integration registry for launches (c10fa9bb4)
- feat(agent-only): orchestrate throttled budget-capped agent room launches (08ef0a206)
- feat(agent-only): aggregate agent LLM spend across deployment rooms (89de4eb42)
- feat(agent-only): create zero-human rooms pinned to the activating pod (57bf07797)
- feat(agent-only): expose ensureSession on the v2 integration object (c70db8494)
- feat(agent-only): persist and validate agent-only deployment type (fe6038704)
- docs(agent-only): implementation plan for pure-agent deployments (25936320b)
- docs(agent-only): design spec for pure-agent deployments (73ea6578d)
- fix(monitor): honor name||label, render cohort name, empty-string fallback (1099462a4)
- feat(monitor): show state name instead of raw state id in V2 live monitor (6c80d60e1)
- fix(dashboard): reload experiments list on designer close; address review findings (aeaed392a)
- fix(dashboard): refresh experiments table after mutations without manual reload (9c949ad30)
- fix(monitor): guard watch-agent listener on socket-close + restore mapper doc comments (2420de078)
- feat(monitor): per-agent Thinking toggle + live reasoning feed panel (1acd926dc)
- feat(monitor): store watchAgent + per-agent agent.decision feed (709feda0d)
- fix(monitor): allow watch-agent/unwatch-agent in the action schema (34e0d9d17)
- feat(monitor): watch-agent action streams agentDecisions over the observer socket (50e13cdf9)
- refactor(agents): extract shared agentDecision mapper (849455752)
- docs: live agent-thinking panel spec + implementation plan (d775ecbd3)
- fix(data): expose per-turn agent costUsd in the decisions API (8965d0495)
- fix(test): guard VideoManager preview-focus timer against firing after teardown (c677258ba)
- fix(agents): respond at most once per state — stop the re-submit loop (adaccc5f3)
- fix(data): carry variable.update stateId+role in data (survives enrichEvent), not context (f5889fa41)
- feat(data): label agent decisions with state name + component + prompt (3c037b5ec)
- fix(data): match dataCollectionService.enrichEvent storage contract + tighten drop detection (d0b492386)
- docs(spec): revise Variables tab spec to persist-and-read-authoritatively design (4eb2e637a)
- feat(data): persist V2 variable store + read it authoritatively (works for all experiments) (7e98059be)
- docs(spec): revise Variables tab spec to as-built design (21064aedf)
- fix(data): consistent total-order + matrix exclusions in storeCheck reconstruction (379fe10e6)
- fix(data): replace unreliable persisted verdict with honest storeCheck observation (8b0599916)
- fix(data): address code-review findings on Variables tab (1a17b8174)
- feat(data): Variables tab — reconstruct shared variable store over the experiment (2fe7315b4)
- docs(data): spec for a room-scoped Variables tab in Data Management (7f247ab13)
- fix(data): add composite index for the agentDecisions per-room query (a1d10fcd2)
- fix(agents): address code review of Plan C (image perception + designer knobs) (329973b17)
- feat(agents): image perception (Tier 3) — agents see image stimuli (29f195f65)
- fix(agents): only warn about unanswerable components on response-gating states (55c978a69)
- feat(agents): expose shipped agent knobs in the designer UI (9f625b522)
- fix(data): harden AI Agents tab per code review (754fceaae)
- fix(agents): address code-review of the kill-switch/observability work (92eddd2fe)
- feat(data): AI Agents tab in Data Management — browse agent runs and per-turn decision logs (037446904)
- feat(monitor): per-agent Stop button in the live deployment monitor (19ff1461b)
- feat(agents): pod-local agent registry with per-agent stop-agent observer control action (abf971e8c)
- fix(agents): address code-review findings on the hardening branch (cac186022)
- feat(agents): warn at spawn when an agent role faces components it cannot answer (24be2066c)
- feat(agents): per-decision and per-run cost accounting with optional budgetUsd guardrail (59c6c52b0)
- fix(agents): delimit human-authored text in prompts to blunt participant prompt injection (2af08d0f4)
- fix(agents): track own chat turns so turn-taking bias and transcripts reflect what the agent already said (9db9388a3)
- fix(agents): honor the owner's personal-vs-organization API key preference when resolving provider keys (9d78fdc62)
- fix(agents): back off between retries on provider 429s (e746a9037)
- fix(agents): cache provider SDK clients, handle openai reasoning-model params, preserve gemini roles, add seed support (b4d60e780)
- refactor(agents): deduplicate response-component type set into componentDescriptor (6acd6bc13)
- fix(agents): cancel paced chat timers on completion; make LiveKit sendChat a no-op after close (0ec8064b1)
- fix(api): normalize agent-run manifest epoch timestamps to ISO in export (62bd29794)
- fix(agents): cap perception history to stop unbounded growth in snapshots and decision docs (7e0f2d9a1)
- fix(agents): record resolved generation params on every decision trace (2be1b2d41)
- fix(agents): bound provider calls with a timeout so a hung request cannot deadlock the agent (20124c347)
- fix(v2): persist AI-agent output variables server-authoritatively on submit (5747ab9a0)
- test(v2): update stale parseTemplate expectation for fail-closed behavior (0ecdf8d57)
- fix(v2): address review of participant focusComponent resolution (272fbf3a5)
- fix(v2): resolve participant focusComponent server-side (single source of truth) (2913f1e54)
- feat(agents): decide-loop resilience — bounded retry, fail-loud, kill switch (ffede36bb)
- fix(v2-spectate): ignore spectate.update frames for a non-current role (a869868fa)
- fix(v2-engine): advance SYNCHRONIZED state when non-waiting roles complete (f85ff4627)
- feat(v2-ws): D6 observer-emit backpressure guard — drop playback.tick for backed-up sockets (e4d6f8d85)
- test(v2): update integration test for originator-exclusion (host no longer receives own playback.command echo) (0e668ce65)
- Merge remote-tracking branch 'origin/dev' into fix/v2-playback-echo-free (9283051d2)
- refactor(showVideoStall): extract stall-watchdog lifecycle into createStallWatchdog + 18 unit tests (f83511c43)
- fix(v2-video): host-side HLS stall recovery — waiting watchdog + startLoad kick (7bc7e452d)
- Merge remote-tracking branch 'origin/dev' into worktree-v2-variable-system (5a21282ed)
- fix(v2): resolve roleConfigs + variables server-side for agents and spectate (b8b3b28c3)
- fix(v2/playback): strip internal originator fields from wire before delivery (23a54abf2)
- fix(v2-playback): key originator-exclusion on emitting socket, not participantId (64698be51)
- refactor(ShowVideoComponentV2): remove dead shouldBroadcastSeek + stale docstring (beb8f8a4b)
- refactor(v2-showvideo): centralize pending mutations — fix play latch + seek no-op latch (7497ddb78)
- fix(v2-echo): independent pending-target clears in handleSeeked; remove dead _lastServerCommandTs test assertion (7170b0abe)
- refactor(v2-showvideo): delete 200ms echo window; position-match applied seeks (c125900ff)
- refactor(v2-video): extract seekShouldApply helper, replace source-text tests with numeric assertions (fe1404074)
- fix(v2-showvideo): idempotent seek apply (no spurious seeked) (e5e853a3d)
- feat(v2-ws): exclude originator from playback.command fan-out (breaks seek-echo loop) (34784a278)
- feat(v2-engine): tag playback.command with originatorParticipantId (8ef63e7bd)
- docs(v2-playback): echo-free topology design spec + core seek-storm fix plan (b1033d405)
- fix(v2): seed legacy admin constants (isTemplateVariable absent), accurate comments, hoist dest ref (d789ac067)
- fix(experiments): copy variables subcollection on duplicate so manual constants survive (ba4989a7f)
- test(v2): assert falsy-but-real constant values (0/false/empty) survive seeding filter (ba0b725e3)
- feat(v2): seed manual constants from experiments variables subcollection (f1ebf5587)
- feat(v2-frontend): wire stimulusMappings into experimentState so roleValue/lookup resolve (f02828727)
- fix(v2-engine): fail-closed computed eval (unknown id throws; ?? defaults; falsy values stay valid) (49bf6254c)
- fix(v2-engine): unify unset/invalid as undefined (chained invalidation, ?? defaults, no seed log flood) (c9efa883a)
- refactor(v2-engine): lazy computed-var eval, ?? support, consistent non-finite clear, cycle isolation, dedup logging (7e0e55c66)
- fix(v2-engine): deterministic computed vars (drop random/now), resilient graph build, log eval failures, skip non-finite (733329cdd)
- test(v2): declare output binding in computed-propagation golden for durability (c1f641e0a)
- test(v2): golden for two-participant computed-variable propagation (1f4804f1d)
- feat(v2): seed constant-derived computed variables at session start (4e72656c6)
- feat(v2-engine): recompute computed variables on variable-set and broadcast them (8ca1aa849)
- feat(v2-engine): computed-variable dependency graph and resolver (f4cca79f3)
- feat(v2-engine): extract expression dependencies for computed-variable ordering (1094ee350)
- test(v2-engine): prove && / || short-circuit and ?? rejection (66a5b7a51)
- feat(v2-engine): safe jsep-based expression evaluator for computed variables (899b7ca8f)
- docs(v2): Phase 2 implementation plan — computed/expression variables (a43d29e43)
- test(v2-engine): silence and assert monitor warning in derived-suffix test (cf3a44f71)
- refactor(v2-engine): monitor-mode variable binding/stateId validation, dedup wire-shape (bd8e9c99a)
- Harden V2 variable-set write-back: reconnect ordering, binding validation, derived outputs (27d4f3d87)
- refactor(v2-frontend): use sharedData reference identity for store change-detection (4406585b4)
- fix(v2): unconditional variable-name validation, no startup store churn, accurate Phase 1 validation note (c23f8644f)
- test(v2): golden for two-participant variable propagation and wire-path variable binding (2cc6344e6)
- fix(v2-frontend): only update sharedDataStore when shared-data content changes (e8b846593)
- feat(v2-frontend): mirror shared-data-updated into sharedDataStore (cdf5acef4)
- feat(v2-protocol): dispatch variable-set on submit-response output binding (928d82843)
- feat(v2): seed predefined constants into shared-data store on session start (ec1035f4d)
- feat(v2-runtime): thread sharedDataStore through createSession into the engine (c3c797396)
- feat(v2-engine): replay current shared-data on reconnect resume (eef558bff)
- feat(v2-engine): handle variable-set event with shared-data-updated delta (972d2c630)
- feat(v2-engine): emit seeded constants as room-wide shared-data-updated at transition (b8c3d7e4f)
- docs(v2): Phase 1 implementation plan — core variable propagation (70ce200d6)
- docs(v2): design for V2 variable & stimulus system (bb3974003)
- Merge commit 'a3717745' into dev-integration (1a92ddc27)
- Merge branch 'worktree-fix-agent-livekit-token' into worktree-agent-reproducibility-spine (a37177454)
- chore(agents): follow-up cleanups — test fixes, export pagination cap, gemini stopReason + adapter tests (c14e4c4e7)
- feat(agents): populate per-run manifest totals (turns/tokens) from the harness (4716116b9)
- fix(data): map agent decision export to the real recorder schema (was nulling reasoning/usage) (4802bfc74)
- fix(spectate): render role-specific focus config via shared mergeRoleConfig (d95f15cfb)
- fix(data): register AGENT_DECISIONS at experiment scope; deterministic agentRuns order; pagination limit (1f83cf2dc)
- feat(data): export agent decision logs as the AGENT_DECISIONS data type (f1a62a66c)
- feat(agents): guardrails (max turns + token budget) controls in the Agents tab (bdfcc7dbf)
- feat(agents): default agentConfig.guardrails on new experiments (e3b2e86d7)
- test(v2): exercise onAbortRoom closure routes to end-experiment with reason (904d158fe)
- feat(v2): wire onAbortRoom into createAgentSpawner composition root (dd97eafc7)
- feat(agents): spawner wires decision recorder, manifest, guardrails, and fail-closed room abort (5b3d16969)
- feat(agents): action validation + max-turns/budget guardrails with fail-closed onAbort (f8371fe05)
- feat(agents): pure action validator for the decision seam (d27b95612)
- test(agents): cover finalizeAgentManifest; drop unused test imports (ef3eeb82b)
- feat(agents): Firestore decision recorder + per-run manifest writer (57914f3aa)
- feat(agents): llmDecide emits per-call traces; skips LLM on passive screens (2d0ffa1ca)
- feat(agents): agentParticipant stamps traces and persists via injected recordDecision sink (29fdceec5)
- feat(agents): provider adapters return normalized thinking + usage + model (d49c27def)
- docs(agents): implementation plan for reproducibility spine + guardrails + minor fixes (6452ad361)
- docs(agents): design spec for reproducibility spine + guardrails + minor fixes (e46a59f8f)
- fix(agents): await async LiveKit token before connect (fixes agent_spawn_failed 401) (1b7983c36)
- fix(styles): resolve stale conflict markers committed in forms.css (c7b162375)
- fix(reconnection): derive client retry window from configured disconnect timeout (91798c63f)
Previous Versions
Stay Informed
New release notifications are automatically displayed in the experimenter dashboard when you log in. You can dismiss them at any time, and they'll remain in your dashboard history for future reference.