ID
Scenario
Input
Expected Output
Pass Criteria
T01
Happy path: high-relevance signal scored and categorised
Raw signal: competitor pricing page change detected; source URL and raw text supplied
Relevance score 4 or 5; category tag 'Pricing'; structured summary written to Notion sandbox record
Score in range 4-5; category field = 'Pricing'; Notion sandbox write confirmed with all required fields populated
T02
Happy path: product update signal scored and categorised
Raw signal: competitor changelog entry for new feature; source URL and raw text supplied
Relevance score 3 or above; category tag 'Product'; summary written to Notion sandbox record
Score >= 3; category = 'Product'; all Notion fields present: competitor name, category, date, source URL, summary
T03
Happy path: market expansion signal detected
Raw signal: job posting for sales roles in a new region
Relevance score 3 or above; category tag 'Market Expansion'; Notion sandbox write confirmed
Score >= 3; category = 'Market Expansion'; record written without error
T04
Low-relevance signal discarded below threshold
Raw signal: generic blog post with no pricing, product, or market content; relevance expected <= 2
Signal discarded; no Notion record written; discard event logged
No new Notion record created; discard event appears in run log with signal ID and score
T05
Empty raw signal body received
Source URL resolves but body text is empty string
Agent skips signal; logs warning with source URL and timestamp; no crash
No unhandled exception; warning entry present in run log; Notion record not written
T06
Notion write fails mid-run
Valid scored signal; Notion sandbox API returns 503 on write attempt
Agent retries up to 3 times; after final failure logs error with signal ID and moves to next signal; does not halt entire batch
Retry count = 3 in log; error record written to error log table; subsequent signals in batch processed normally
T07
Google Sheets competitor list read — happy path
Google Sheets sandbox tab contains 5 competitor rows with name, URL, and keyword columns
All 5 rows read; list passed correctly to scan loop
Competitor count in run context = 5; no parse errors logged
T08
Google Sheets tab empty
Competitor list tab exists but contains header row only, no data rows
Run halts gracefully; alert sent to error log; no signals fetched
Run status = 'halted_no_competitors'; error log entry present; no downstream steps triggered
ID
Scenario
Input
Expected Output
Pass Criteria
T09
Happy path: weekly digest compiled from Notion entries
Notion sandbox database contains 12 signal records across 3 competitors added in the past 7 days
Digest groups signals by competitor and category; plain-English summary produced; Slack sandbox message formatted correctly
Digest contains all 3 competitors; grouping correct; Slack message posts to sandbox channel without error; links to Notion entries present
T10
Digest compiled with single competitor, single signal
Notion sandbox contains 1 signal record for 1 competitor
Digest produced with single competitor section; no empty sections rendered; Slack post successful
Digest body non-empty; competitor name present; Slack post confirmed; no formatting errors
T11
No signals logged in the past 7 days
Notion sandbox database contains records but all dated more than 7 days ago
Digest Agent sends a 'no new signals this week' placeholder message to Slack sandbox; does not crash or skip silently
Slack sandbox message received; message body contains 'no new signals' or equivalent; run log status = 'digest_empty_week'
T12
Slack post fails
Valid digest compiled; Slack sandbox webhook returns 500 on post attempt
Agent retries up to 3 times; after failure logs error and triggers Gmail fallback send to configured manager address in sandbox
Retry count = 3 in log; Gmail sandbox send triggered; error log entry present with Slack error code
T13
Gmail digest email send — happy path
Valid digest text; Gmail sandbox credentials configured; recipient address set to test inbox
Email delivered to sandbox test inbox with correct subject line and body
Email received in test inbox; subject contains 'Weekly Competitive Digest'; body matches Slack digest content
T14
HubSpot deal note append — happy path
Scored signal with competitor name matching a sandbox HubSpot deal record; deal ID resolved via competitor field lookup
Timestamped note appended to the matching HubSpot sandbox deal record; note contains competitor name, category, and summary
Note visible on sandbox deal record; timestamp within 60 seconds of run time; no duplicate notes created