v0.7 Release Notes
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)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.6.85...v0.7.0
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)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.7.0...v0.7.1
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)
Full Changelog: https://github.com/ljchang/hyperstudy/compare/v0.7.1...v0.7.2