Back to New Initiative Scoping & Approval

Test and QA Plan

How the build is validated before go-live: three sequential test phases, edge cases, and production verification.

4 pagesPDF · Quality
FS-DOC-06Quality

Test and QA Plan

New Initiative Scoping and Approval

[YourCompany.com] · Management Department · Prepared by FullSpec · [Today's Date]

This document defines the complete quality assurance programme for the New Initiative Scoping and Approval automation. It is written for the FullSpec build team and covers every test case that must pass before any component is promoted to production. Testing is divided into three sequential phases: unit testing of each individual agent, integration and edge-case testing of agent handoffs and failure scenarios, and a final end-to-end production run. Your team joins the process in Phase 3 to review and formally approve the live flow. No phase begins until the previous phase has fully passed.

01Testing approach

All testing follows three phases in strict sequence. No phase begins until every test case in the previous phase carries a pass status and has been logged in the FullSpec QA tracker. Phase 1 isolates each agent in a sandbox environment. Phase 2 tests the handoffs between agents and exercises known edge cases. Phase 3 runs a complete end-to-end flow in the production environment with the process owner observing and signing off.

1
Phase 1 — Unit Testing
Each agent tested in isolation before any integration work begins
Scope
Individual agent logic: Intake Validation Agent, Scoping and Routing Agent, Approval Digest Agent — each tested independently with mocked inputs and outputs.
Environment
Sandbox only. No production credentials, no live Notion workspaces, no real Slack channels, no live Gmail addresses.
Credential rule
Sandbox API keys and test OAuth tokens only. Production credentials must not be present in any environment variable or config file during Phase 1.
Pass condition
All cases T01 through T13 return the expected output with no unhandled exceptions. Each failure mode routes to the correct error path.
Who runs it
FullSpec team only. Process owner not required.
2
Phase 2 — Integration and Edge Case Testing
Agent handoffs and exception scenarios tested end-to-end in sandbox
Scope
Agent-to-agent handoffs across the full automated flow, plus all identified edge cases: duplicate submissions, missing data fields, tool unavailability, and reviewer timeout scenarios.
Environment
Sandbox with realistic mock data volumes. Sandbox Notion workspace, test Google Sheets, sandboxed Slack app, and Gmail test alias in use throughout.
Credential rule
Sandbox credentials only. Integration credentials must reflect the exact OAuth scopes that will be used in production so that scope-related failures surface here, not in Phase 3.
Pass condition
All cases T14 through T21 pass, and all edge cases E01 through E07 either resolve correctly or route to the defined fallback path with an appropriate error log entry.
Who runs it
FullSpec team only. Process owner not required.
3
Phase 3 — End-to-End Production Test
Full production run with live credentials, observed and approved by the process owner
Scope
One complete initiative lifecycle from Google Forms submission through Notion record creation, Google Sheets logging, Slack reviewer notification, reviewer assessment submission, Approval Digest Agent delivery, and final decision logging.
Environment
Production environment with live credentials. All actions are performed using an internal test initiative that will be voided after the test is complete.
Credential rule
Live production OAuth tokens and API keys in use. All tokens must have been rotated and confirmed valid within 24 hours before Phase 3 begins.
Pass condition
All cases T22 through T25 pass including the final process owner review case. No data inconsistencies between Notion, Google Sheets, Slack, and Gmail outputs.
Who runs it
FullSpec team executes. Process owner (Operations Manager) joins to observe and formally approve T25.
Test and QA PlanPage 1 of 4
FS-DOC-06Quality

02Phase 1 — unit test cases

All Phase 1 tests must be executed using sandbox credentials only. Do not connect production Google Workspace accounts, live Notion workspaces, or real Slack workspaces at this stage. Use dedicated test API tokens stored in the sandbox secrets manager, isolated from the production credential store.

Intake Validation Agent — tests T01 to T05

ID
Scenario
Input
Expected Output
Pass Criteria
T01
Happy path: fully complete submission
Google Forms payload with all required fields populated, each field meeting minimum word count (summary 20+ words, strategic rationale 15+ words, budget field numeric, effort field selected)
Agent returns validated status; passes payload to Scoping and Routing Agent trigger; no Slack or Gmail message sent to proposer
Downstream trigger fires within 5 seconds; no error log entries; proposer receives no gap notification
T02
Missing strategic rationale field
Google Forms payload with strategic rationale field empty
Agent returns incomplete status; sends targeted Slack message to proposer listing 'Strategic Rationale' as the missing field; downstream trigger does not fire
Slack message delivered to sandbox test proposer channel; message body contains the exact field name; no Notion record created
T03
Budget field contains non-numeric value
Google Forms payload with budget field containing the string 'TBD'
Agent returns incomplete status; sends Slack message to proposer specifying that the estimated budget must be a numeric value; downstream trigger does not fire
Slack message delivered; message specifies budget field by name; no Notion record or Sheets row created
T04
Summary field below minimum word count
Google Forms payload with initiative summary containing 6 words only
Agent returns incomplete status; sends Slack message to proposer listing summary as insufficient and stating the minimum requirement
Slack message delivered with field-level detail; word count check logged; no downstream action taken
T05
Google Forms webhook payload malformed or missing fields
Malformed JSON payload simulating a corrupted form submission event
Agent catches parse error; logs error with payload snapshot to error log; sends no external messages; execution halts gracefully
Error log entry created with ISO 8601 timestamp and payload excerpt; no partial records written to Notion or Sheets

Scoping and Routing Agent — tests T06 to T10

ID
Scenario
Input
Expected Output
Pass Criteria
T06
Happy path: valid payload, known initiative category
Validated form payload with initiative category set to 'Operations', proposer name, budget, and all scoping fields populated
Notion scoping page created from locked template with unique reference ID; Google Sheets row written with status 'Pending Review'; Slack message sent to sandbox Operations reviewer channel with Notion link and deadline 3 business days from submission date
Notion page exists with correct reference ID; Sheets row contains matching reference ID, proposer name, and budget; Slack message contains Notion URL and deadline date
T07
Initiative category set to 'Product'
Validated form payload with initiative category 'Product'
Slack notification routed to sandbox Product reviewer channel; all other outputs identical to T06
Slack message delivered to the Product channel, not Operations; routing table lookup logged correctly
T08
Initiative category not found in routing table
Validated form payload with initiative category value 'Other' which has no routing rule configured
Agent logs a routing error; Notion record and Sheets row are still created; Slack notification sent to a configured fallback reviewer channel
Fallback channel receives Slack notification; error log entry records 'unrecognised category: Other'; Notion and Sheets records confirmed present
T09
Notion API returns 429 rate limit error on page creation
Valid payload; Notion API mock returns HTTP 429 on first call
Agent retries after 10-second backoff; succeeds on retry; all outputs created normally
Retry attempt logged; final Notion page created successfully; no duplicate records; total execution time under 60 seconds
T10
Google Sheets API unavailable during row write
Valid payload; Sheets API mock returns HTTP 503
Agent logs Sheets write failure; Notion page and Slack notification still complete; error flagged for manual Sheets entry
Error log entry references the failed Sheets write; Notion page exists; Slack message includes note that Sheets logging failed and requires manual resolution

Approval Digest Agent — tests T11 to T13

ID
Scenario
Input
Expected Output
Pass Criteria
T11
Happy path: one initiative awaiting leadership decision at 8:00 AM Monday
Google Sheets tracker sandbox row with status 'Awaiting Leadership Decision', reviewer recommendation 'Approve', budget $12,000, Notion page URL populated
Gmail digest sent to sandbox CEO test address with initiative name, reviewer recommendation, budget, and direct Notion link; Sheets row not modified by this run
Gmail delivered within 90 seconds of 8:00 AM trigger; subject line contains 'Initiative Decisions Pending'; body contains correct budget figure and Notion URL
T12
No initiatives awaiting decision at 8:00 AM
Google Sheets tracker sandbox with no rows in 'Awaiting Leadership Decision' status
Agent evaluates tracker, finds no qualifying rows, and does not send a Gmail digest; execution completes silently with a log entry confirming zero items found
No Gmail sent; log entry reads 'Digest suppressed: 0 qualifying initiatives'; no errors
T13
Gmail API authentication failure at send time
Three qualifying Sheets rows; Gmail API mock returns HTTP 401 Unauthorized on send attempt
Agent logs authentication error with timestamp; retries once after 30 seconds using token refresh; if second attempt fails, logs critical error and halts without sending partial digest
Error log contains HTTP 401 detail and retry attempt record; no partial email sent; alert entry created in execution log for FullSpec team review
Test and QA PlanPage 2 of 4
FS-DOC-06Quality

03Phase 2 — integration and edge case tests

Phase 2 integration tests verify that agents hand off correctly to one another and that the full automated flow from Google Forms submission to Slack proposer notification operates as a connected chain. All tests continue the sequential ID numbering from Phase 1.

ID
Scenario
Input
Expected Output
Pass Criteria
T14
Full handoff: Intake Validation Agent passes valid payload to Scoping and Routing Agent
Complete Google Forms sandbox submission with all fields valid
Intake Validation Agent marks submission as complete; Scoping and Routing Agent receives the validated payload automatically and creates Notion page, Sheets row, and Slack notification without manual intervention
Scoping and Routing Agent execution log shows trigger source as 'Intake Validation Agent — validated'; all three outputs verified; end-to-end latency under 15 seconds
T15
Reviewer submits assessment form; Notion record updates automatically
Sandbox reviewer submits Google Form assessment with recommendation 'Approve' and completeness score 4/5
Notion page status field updated to 'Awaiting Leadership Decision'; reviewer name, recommendation, and score written to Notion properties; Google Sheets row status updated to match
Notion property values match form submission values exactly; Sheets status column reads 'Awaiting Leadership Decision'; update completes within 20 seconds of form submission
T16
Approval Digest Agent correctly reads Sheets rows created by Scoping and Routing Agent
Two sandbox Sheets rows written by T14 flow, both in 'Awaiting Leadership Decision' status
Digest Agent reads both rows, compiles a single Gmail digest listing both initiatives with their budgets and reviewer recommendations
Gmail body contains exactly two initiative entries; budget totals are arithmetically correct; both Notion links are valid sandbox URLs
T17
Final decision recorded in Notion triggers Sheets update and proposer Slack notification
Sandbox founder records 'Approved' decision in Notion status field
Google Sheets tracker row status updated to 'Approved'; Slack message sent to sandbox proposer channel with decision outcome and any conditions noted
Sheets status column reads 'Approved'; Slack message delivered to correct sandbox channel; message body includes decision outcome and reference ID
T18
Reviewer 'Decline' recommendation flows correctly through to digest and proposer notification
Sandbox reviewer submits assessment with recommendation 'Decline'
Notion status updates to 'Awaiting Leadership Decision'; digest includes the initiative flagged as 'Reviewer Recommendation: Decline'; after leadership confirms decline, proposer receives Slack message with decline outcome
All status values propagate correctly; digest label matches recommendation; proposer Slack message uses decline-specific message template
T19
Two simultaneous form submissions processed without collision
Two Google Forms sandbox submissions fired within 2 seconds of each other, different proposers, different categories
Both submissions processed independently; two separate Notion pages with unique reference IDs; two separate Sheets rows; two separate Slack notifications to appropriate reviewer channels
Reference IDs are distinct; Notion pages are distinct documents; Sheets contains exactly two new rows; no field data from one submission appears in the other's record
T20
Reviewer deadline calculation correct across a weekend boundary
Submission received at 4:30 PM on a Thursday sandbox test date
Review deadline calculated as 3 business days later: Tuesday of the following week; deadline date appears correctly in Slack notification and Notion page
Deadline date in Slack message and Notion property matches the expected Tuesday date; Saturday and Sunday not counted in the calculation
T21
Approval Digest Agent correctly skips initiatives with 'Decline' recommendation already actioned
Sheets row with status 'Declined' already recorded
Digest Agent excludes the declined row from the digest; only rows in 'Awaiting Leadership Decision' status included
Digest email does not reference the declined initiative; log confirms the row was evaluated and excluded by status filter

Edge case tests — the following cases use the E01 numbering series and cover failure modes, data anomalies, and human timeout scenarios that fall outside the standard flow.

ID
Scenario
Input
Expected Output
Pass Criteria
E01
Duplicate submission: same proposer submits identical initiative within 10 minutes
Two Google Forms payloads with identical proposer email, initiative title, and summary text submitted within 10 minutes
Agent detects duplicate based on proposer email plus initiative title hash; second submission is held; proposer receives a Slack message noting a submission with the same title is already in the queue
Only one Notion page and one Sheets row created; duplicate detection log entry recorded; proposer Slack message delivered referencing the existing reference ID
E02
Submission with all fields populated but effort field set to zero
Google Forms payload with estimated effort hours field containing value 0
Agent treats zero effort as an incomplete response; sends Slack follow-up to proposer requesting a realistic effort estimate greater than zero
Slack message delivered specifying the effort field; no Notion record created; log records the zero-value rejection reason
E03
Notion API completely unavailable for more than 90 seconds
Valid validated payload; Notion API mock returns HTTP 503 for all calls over a 90-second window
Agent exhausts retry budget (3 attempts with exponential backoff); logs a critical error; sends a Slack alert to the FullSpec internal monitoring channel; Sheets row is still written with Notion URL marked as 'pending — creation failed'
Critical error log entry present; Slack monitoring alert delivered to designated channel; Sheets row exists with status 'Pending — Notion Unavailable'; no silent failure
E04
Reviewer does not submit assessment within the 3-business-day deadline
Sheets row with reviewer deadline date now in the past; no reviewer assessment received
Agent sends an automated reminder Slack message to the assigned reviewer; if a further 24 hours pass with no response, a second Slack message is sent to the fallback reviewer and the Sheets row status is updated to 'Review Overdue'
First reminder delivered at deadline; second escalation delivered 24 hours later to fallback reviewer; Sheets status reads 'Review Overdue'; log records both reminder events with timestamps
E05
Slack API unavailable when reviewer notification is attempted
Valid Scoping and Routing Agent run; Slack API mock returns HTTP 503 on notification send
Agent retries Slack send twice with 15-second backoff; if all retries fail, logs the failure and sends an email to the reviewer via Gmail as a fallback notification channel
Gmail fallback sent to reviewer's email address extracted from the routing table; Slack failure logged with retry count; Notion and Sheets records still complete
E06
Google Sheets tracker contains a row with a corrupted status value not matching any known status enum
Sheets row with status field containing 'UNKNOWN_STATUS' picked up by Approval Digest Agent
Agent skips the corrupted row; logs a data integrity warning with the row reference ID; digest sent for all other valid rows; no crash or silent exclusion
Digest delivered without the corrupted row; data integrity log entry includes row reference ID and the unexpected status value found; agent execution completes normally
E07
Leadership records a decision in Notion but Google Sheets API is unavailable at the moment the status update is attempted
Notion decision webhook fires; Sheets API mock returns HTTP 503
Agent logs the Sheets write failure; queues a retry for 5 minutes; sends a Slack message to the Operations Manager noting that the Sheets tracker update failed and will be retried
Retry log entry present; Slack notification delivered to Operations Manager sandbox channel; Sheets row updated correctly on retry within 5 minutes; no duplicate row created
Test and QA PlanPage 3 of 4
FS-DOC-06Quality

04Phase 3 — end-to-end production test

Important before running Phase 3: Use an internal test email address (for example qa-test@[YourCompany.com]) as the proposer identity for all production test submissions. Use a clearly labelled initiative title such as 'QA TEST — DO NOT ACTION' to prevent the submission from entering the live review queue. The Notion scoping page, the Google Sheets row, and all Slack notifications generated during Phase 3 must be manually voided and deleted by the FullSpec team immediately after the test is complete and T25 has been signed off. Do not leave test records in the production tracker.

Phase 3 runs a single complete initiative lifecycle in the live production environment. Every tool connection uses a real credential, every Notion page is created in the live workspace, and every Slack message is delivered to the real channel. The FullSpec team executes all steps. The process owner observes the run and records their approval in the FullSpec confirmation system as the final test case.

ID
Scenario
Steps Covered
Expected Output
Pass Criteria
T22
Full production intake submission and validation
Proposer submits the production Google Form using the internal QA test identity with all required fields correctly completed; Intake Validation Agent processes the live webhook
Intake Validation Agent confirms submission as complete; no Slack gap notification sent to proposer; validated payload forwarded to Scoping and Routing Agent in under 10 seconds
Live execution log shows 'validated' status; no gap message in the real Slack workspace; Scoping and Routing Agent execution begins automatically
T23
Production Notion page creation, Sheets logging, and Slack reviewer notification
Scoping and Routing Agent receives the validated payload; creates the Notion page in the live workspace; writes the Sheets row; sends the Slack notification to the real reviewer channel
Live Notion page exists at the expected URL with all fields populated from the form submission and a unique reference ID; Google Sheets production tracker contains a new row with status 'Pending Review'; Slack notification delivered to the correct real reviewer channel with Notion link and 3-business-day deadline
FullSpec team verifies Notion page field values against the form submission data; Sheets row confirmed present with correct column values; Slack message visible in the live reviewer channel within 15 seconds of agent execution
T24
Production Approval Digest Agent delivery and error-log verification
Sheets row created in T23 is manually set to 'Awaiting Leadership Decision' to simulate reviewer completion; Approval Digest Agent fires at the next scheduled 8:00 AM Monday-to-Friday window or is triggered manually by the FullSpec team; error log reviewed for any warnings from T22 and T23
Gmail digest delivered to the live CEO or Founder email address listing the QA test initiative with correct budget, reviewer recommendation, and Notion link; execution log for all three agents reviewed and confirmed free of unresolved errors or warnings
Gmail received in live inbox; subject line and body format match the specification from the Integration and API Spec; error log reviewed by FullSpec team and confirmed clean for T22 through T24; any warnings documented and assessed before T25 proceeds
T25
Process owner end-to-end review and formal approval
Process owner (Operations Manager) observes the full production run from T22 through T24; reviews the live Notion page, the Google Sheets tracker row, the Slack notifications in the relevant channels, and the Gmail digest received by the Founder; confirms all outputs match the agreed specification
Process owner confirms: (1) Notion page is complete and correctly structured, (2) Sheets row reflects accurate status and field values, (3) Slack notifications reached the correct channels with correct content, (4) Gmail digest reached the Founder inbox with correct formatting. Process owner records formal approval in the FullSpec confirmation system. FullSpec team then voids all test records created during Phase 3.
All four confirmation points checked by the process owner. Approval recorded in the FullSpec confirmation system with the reviewer's name, date, and a reference to the QA test initiative ID. No separate signoff block is required. FullSpec team deletes the test Notion page, removes the Sheets row, and archives the test Slack messages within 30 minutes of approval.
Once T25 is recorded in the FullSpec confirmation system, the automation is cleared for go-live. The FullSpec team will notify the process owner at support@gofullspec.com with a confirmation summary referencing the Phase 3 pass date before the team briefing and launch steps begin.
Test and QA PlanPage 4 of 4

More documents for this process

Every document generated for New Initiative Scoping & Approval.

Launch Plan
Operations · Owner
View
ROI and Business Case
Finance · Owner
View
Process Runbook / SOP
Operations · Owner
View
Developer Handover Pack
Technical · Developer
View
Integration and API Spec
Technical · Developer
View