add spec system: sdd/bdd/tdd loops, trace enforcement, envelope+config specs
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
Feature: Response envelope handling
|
||||
The responder parses the model's JSON envelope and decides what the
|
||||
bot says, where, and whether staff is alerted. (SPEC-001)
|
||||
|
||||
Background:
|
||||
Given a responder with history limit 10
|
||||
|
||||
@ENV-01
|
||||
Scenario: Model answer reaches the user
|
||||
Given the model answers with answer "Hei! Velkommen." and answer_needed "true"
|
||||
When user "alice" sends "Hei bot" in channel "chat"
|
||||
Then the response answer contains "Hei! Velkommen."
|
||||
And the response is marked as needed
|
||||
|
||||
@ENV-02
|
||||
Scenario: Suppressed answer stays silent
|
||||
Given the model answers with answer "irrelevant musing" and answer_needed "false"
|
||||
When user "alice" sends "talking to bob" in channel "chat"
|
||||
Then the response is not marked as needed
|
||||
|
||||
@ENV-03
|
||||
Scenario: Staff note forces delivery
|
||||
Given the model answers with answer "Et oyeblikk!" and staff note "Guest at table 4 needs a waiter"
|
||||
When user "guest" sends "Can somebody help us?" in channel "chat"
|
||||
Then the response staff note is "Guest at table 4 needs a waiter"
|
||||
And the response is marked as needed
|
||||
|
||||
@ENV-04
|
||||
Scenario: Direct messages are always answered
|
||||
Given the model answers with answer "Svar." and answer_needed "false"
|
||||
When user "alice" sends "hei" directly to the bot
|
||||
Then the response is marked as needed
|
||||
|
||||
@ENV-05
|
||||
Scenario: Short-path rules skip the model
|
||||
Given a short-path rule for channels "spam.*" and users "bob.*"
|
||||
When user "bobby" sends "noise noise" in channel "spam-corner"
|
||||
Then the model was not called
|
||||
And the response is empty
|
||||
And the history contains the message from "bobby"
|
||||
|
||||
@ENV-07
|
||||
Scenario: History is trimmed to the limit
|
||||
Given a responder with history limit 4
|
||||
And 6 prior history entries in channel "chat"
|
||||
And the model answers with answer "ok" and answer_needed "true"
|
||||
When user "alice" sends "hei" in channel "chat"
|
||||
Then the history length is at most 4
|
||||
|
||||
@ENV-08
|
||||
Scenario: Markdown links are unwrapped
|
||||
Given the model answers with answer "Se [menyen](https://fjerkroa.example/meny) her" and answer_needed "true"
|
||||
When user "alice" sends "meny?" in channel "chat"
|
||||
Then the response answer contains "https://fjerkroa.example/meny"
|
||||
And the response answer does not contain "[menyen]"
|
||||
|
||||
@ENV-09
|
||||
Scenario: Missing channel falls back to the message channel
|
||||
Given the model answers with answer "ok" and no channel
|
||||
When user "alice" sends "hei" in channel "kitchen-talk"
|
||||
Then the response channel is "kitchen-talk"
|
||||
Reference in New Issue
Block a user