⚠️ OpenSpec-managed issue — this content is automatically synced
from the openspec/ directory. Manual edits will be overwritten on next sync.
Artifacts
Specs
Tasks
1.1 Turn-id derivation (roomToken + Talk message id + agent uuid) computed in
1.2 Claim store: insert-only atomic claim with TTL (TTL > turn timeout budget;
1.3 TalkTurnJob::run() claims before executing; an existing live claim ⇒
2.1 TalkTurnDispatcher::dispatch(): keep the durable enqueue first; then
2.2 Post-flush execution: run the claimed turn after the sender's response is
2.3 Define the triggerable-runner contract (pull oldest unclaimed turn, claim,
3.1 TalkBridge: add editMessage(roomToken, messageId, newText, ?agentId)
3.2 TalkTurnService: delivery sink — first chunk posts via
3.3 Resolve the ⏳ acknowledgement when the answer or failure notice lands.
4.1 TalkBotInstaller: register one bot per Talk-enabled agent (name = agent
4.2 TalkAgentBinding: resolve the set of enabled agents for a room from
4.3 TalkMentionMatcher: per-agent matching — @agent-name mention or
4.4 Sessions become per (room, agent): extend TalkSessionRoom mapping;
5.1 Chain descriptor on agent-triggered turns: originating human speaker uid,
5.2 Enforcement in the hand-off path: mention-only, no self-trigger, hop
5.3 Identity: agent-triggered turns execute as the rooting human speaker
6.1 Rewrite docs/talk-chat-bridge.md: "Why the answer is not instant"
7.1 Unit tests (php:8.3-cli, the CI way): claim atomicity + double-delivery
7.2 Fresh containerized PHPUnit run vs. the current baseline — report both
7.3 Live-verify on the dev instance (Talk installed): send an addressed
7.4 openspec validate instant-talk --strict; phpcs/psalm/phpstan clean;
Design
See design.md for technical design details.
Synced from openspec/changes/instant-talk by OpenSpec workflow
App: hermiq
Artifacts
Specs
Tasks
roomToken+ Talk message id + agent uuid) computed inTalkTurnJob::run()claims before executing; an existing live claim ⇒TalkTurnDispatcher::dispatch(): keep the durable enqueue first; thenTalkBridge: addeditMessage(roomToken, messageId, newText, ?agentId)TalkTurnService: delivery sink — first chunk posts viaTalkBotInstaller: register one bot per Talk-enabled agent (name = agentTalkAgentBinding: resolve the set of enabled agents for a room fromTalkMentionMatcher: per-agent matching —@agent-namemention orTalkSessionRoommapping;docs/talk-chat-bridge.md: "Why the answer is not instant"openspec validate instant-talk --strict; phpcs/psalm/phpstan clean;Design
See design.md for technical design details.
Synced from
openspec/changes/instant-talkby OpenSpec workflowApp:
hermiq