---
# NOTE: owner=PE from tas.yaml (never change); author=git user per verification-layers.md § 5.1 (fallback=owner)
owner: {pe_name}
author:
created_by:
created_date:
updated_date:
reviewer: ""
feature_id: ""
status: Draft
platform: web
tags: []
ver: 1.0
release_id: ""             # optional — set when artifact belongs to a named release (e.g. "R2026-Q3"); used by /tas-release-plan to group outputs

sources:
  testchecklist: "{path} # v{ver}"
  feature: "{feature_id} # v{ver}"
  reviewed: YYYY-MM-DD

test_strategy:
  scope: manual_gui_execution
  inclusion_rules: { ... }          # Filled by /tas-functest Step 5 — defaults per tc-generation-strategy.md § Inclusion Rules; overridden by TestChecklist routing if specified
  coverage: { total_tps: 0, included_tps: 0, excluded_tps: 0, coverage_percentage: 0 }
---

<!-- AGENT: Phase 3 (/tas-functest-web) reads feature_id + inclusion_rules above. §1 lists Feature/AC deps. §4 shows Pre-Condition format (Depends FIRST) + layout mode + TC structure. No changes needed for Phase 2 (manual execution). -->

# Functional Test Specification: {Feature Name}

**Feature**: [{Feature_ID}]
**Author**: {created_by} | **Reviewer**: {reviewer} | **Status**: {status}

---

## 1. Feature Context

| **Field** | **Detail** |
|---|---|
| **Feature Summary** | As a [user], I want [action] so that [benefit] |
| **Scope** | **In-Scope:** {What is specifically being tested in this Feature — e.g. "Patient registration flow: form submission, field validation, account creation confirmation"} <br><br>**Boundary:** Per [verification-layers.md §4 Scope-Conflict Matrix](../rules/qa/verification-layers.md#4-scope-conflict-matrix-functest--apitest-plan) — GUI/VAL/BL/EXC + UI-observable SEC/INT; human QC executable; AC + PE-testable NFR |
| **Out of Scope** | {What is explicitly NOT tested here — e.g. "Email delivery, payment gateway internals, load testing"} <br><br>**Boundary:** Per [verification-layers.md §4 Scope-Conflict Matrix](../rules/qa/verification-layers.md#4-scope-conflict-matrix-functest--apitest-plan) — tooling-required testing → `/tas-apitest-plan`; automation scripts → `/tas-functest-web`/`/tas-functest-mobile`; DevOps NFRs |
| **Dependencies** | **Upstream:** {Feature IDs → This Feature} |
| | **Seed Data:** {Data must exist before testing} |
| | **Env Config:** {Feature flags, mock/real, settings} |
| | **Known Blockers:** {Bugs/environment issues} |
| | **Time/State:** {Scheduled tasks, time-based logic} _(auto-add if detected)_ |
| | **Cleanup:** {Data isolation, cleanup required} _(auto-add if detected)_ |
| | **Refs:** {Design specs, API docs} _(auto-add if detected)_ |
| **Test Strategy** | TEST_STRATEGY_PLACEHOLDER |

---

> ⚠️ **Prerequisites:** If TestChecklist is Draft or has blocking [BR-AMBIGUITY] / [User-Blocking] / [NFR-NON-PE] risks — see **Section 5 Inherited Risk Notes** before executing any TCs.

---

## 2. Environment & Data Configuration

> **NFR baselines:** See TestChecklist Section 2.2

### 2.1 Execution Environment Matrix

| **Platform / View** | **OS Version** | **Browser / Viewport** | **Priority** | **Test Approach** | **Tool** |
|---|---|---|---|---|---|
| _(Fill from project platform standards)_ | | | | | |

### 2.2 Environment & Test Data Configuration

| **Environment** | **Description** | **Data Source** |
|---|---|---|
| TEST | Internal test data (mock / seeded DB) | |
| STAG | Integration data for UAT | |

### 2.3 Test Account & Role Matrix

> **Delete this section entirely if Feature is public/no-auth required.**

| **Role** | **Username** | **Access Level** | **Notes** |
|---|---|---|---|
| Admin | | Full | Full system access |
| Standard User | | Limited | Regular permissions |

---

## 3. Acceptance Criteria & Test Coverage

> Planning only — no Status column here. Execution results tracked in Section 4 `Result` column.

| **AC ID** | **Priority** | **Acceptance Criteria (Given / When / Then)** | **Covered by TC IDs** | **Coverage** | **Notes** |
|---|---|---|---|---|---|
| `AC-1` | 🔴 P0 | Given user is on authentication login screen<br>When enters valid email and password<br>Then redirected to user dashboard | F001_AC1_BL_001<br>F001_AC1_VAL_001<br>F001_AC1_SEC_001 | 3 TCs | Core authentication flow |
| `AC-2` | 🟡 P1 | Given user is logged in as authenticated user<br>When clicks logout button<br>Then session terminated and redirected to login | F001_AC2_BL_001<br>F001_AC2_EXC_001 | 2 TCs | Logout + session cleanup |

**Coverage Summary:**

| **Total ACs** | **Covered** | **Not Covered** | **Total TCs** |
|---------------|-------------|-----------------|---------------|
| 2             | 2           | 0               | 5             |

---


## 4. Test Cases

> **Layout mode** (SINGLE_TABLE vs MULTI_TABLE) — `/tas-functest` Step 3.5 decides at generation time.

> **TC ID format**, **Category codes**, **Autoable values**, **Pre-Condition pipe order**, **Depends propagation**, **Dedup rules**, and **Test Type techniques** are canonical in [test-id-convention.md](../rules/qa/test-id-convention.md), [tc-generation-strategy.md](../rules/qa/tc-generation-strategy.md), and [test-design.md](../rules/qa/test-design.md). This template defines **structure only** (column order, format examples).

**Pre-Condition format examples** (pipe-separated; Depends FIRST if applicable):
> - No dependency: `Page: Login (/login) | Role: Guest`
> - With dependency: `Depends: F002_AC2_BL_001 | Page: Checkout | Role: Standard | State: cart≥1 | Viewport: 1440px`

**Required formats:**
> - **Logical Steps:** `1. Action — Verify: outcome` + optional `— Teardown: cleanup`
> - **Data:** `field: "value" [tag]` — populate from TestChecklist §2.3 (concrete values, not abstract names)
> - **Expected:** `• bullet` per observable outcome
> - **Execution:** P0 → P1 → P2. Any P0 fail → STOP. >30% P1 fail → STOP. **🔴 HOLD** = TestChecklist Draft (see §5)
> - **Execution Locators column:** Phase 2 uses `_Phase 3 — SE_` placeholder. Phase 3 (`/tas-functest-web` / `/tas-functest-mobile`) overwrites with Locator DSL from Feature-Technical `### Locator Map`

| **TC ID** | **Test Type** | **Description** | **Pre-Condition** | **Logical Steps** | **Test Data** | **Execution Locators** | **Expected Result** | **Test Result** | **Priority** | **Autoable** | **Traceability** |
|---|---|---|---|---|---|---|---|---|---|---|---|
| `F001_AC1_BL_001` | HP | Valid credentials grant dashboard access | Page: Login (/login) \| Role: Standard | 1. Navigate to /login<br>2. Enter valid credentials<br>3. Click Submit<br>— Verify: redirected to /dashboard<br>— Teardown: Logout | email: "test@example.com" [EP·valid]<br>password: "Test@123" [EP·valid] | _Phase 3 — SE_ | • Dashboard loaded<br>• Profile icon visible | — | 🔴 P0 | YES | AC-1 |

---

### 4.E Manual Test Cases (Autoable=NO)

> **Scope (Gate — applies to both §4 and §4.E):** Human executes directly on the running app/web, with NO data simulation (no mock server/DB fixture) and NO tooling beyond Dev Toolbar / API Logger. Split from §4.1–4.5 by Autoable only (per [tc-generation-strategy.md § Autoable Classification](../rules/qa/tc-generation-strategy.md#autoable-classification-phase-2--phase-3-handoff--canonical-)) — Category ∈ {GUI, SEC, INT} → Autoable=NO → cannot be scripted, execute here.
>
> **Sources (both already resolved by TestChecklist — `/tas-functest` only routes, never re-detects):**
> - **`Source=TP`** — TestChecklist §2.1 TPs with Autoable=NO. Traceability = originating TP ID.
> - **`Source=Risk(§5)`** — TestChecklist §5 Risk Registry rows where `Owner=PE` and note references "FuncTest §4.E exploratory". Traceability = Risk ID (R-NNN).
> - Both sources may originate from TestChecklist's Design-Spec/Tech-Stack Screening ([test-design.md § Design-Spec/Tech-Stack Screening](../rules/qa/test-design.md#design-spec--tech-stack-screening)) — a UI/UX or tech-stack concern surfaced from `design_spec_digest`/`tech_stack_digest` and resolved there into either a TP or a §5 risk.
>
> **Delete this section** if no Autoable=NO TPs and no PE-tagged §4.E risks exist for this Feature.

| **TC ID** | **Source** | **Category** | **Description** | **Pre-Condition** | **Logical Steps** | **Test Data** | **Expected Result** | **Test Result** | **Priority** | **Traceability** |
|---|---|---|---|---|---|---|---|---|---|---|
| `F001_AC1_GUI_001` | TP | GUI | Login form renders correctly | Page: Login (/login) \| Role: Guest | 1. Navigate to /login<br>— Verify: form fully visible | — | • Header, fields, submit button all rendered<br>• No layout overlap | — | 🔴 P0 | TP-001 |
| `F001_R003_GUI_001` | Risk(§5) | GUI | Mobile layout — design spec concern (375px) | Mobile viewport 375px | 1. Open feature on 375px<br>— Verify: layout matches design spec | — | • No overflow, spacing per design spec | — | 🟡 P2 | R-003 |

---

## 5. Inherited Risk Notes [CONDITIONAL — if TestChecklist has blocking risks]

> **⚠️ When to include:** If TestChecklist §5 Risk Registry has outstanding risks with Status = ⏳ Active AND tags [BR-AMBIGUITY] / [User-Blocking] / [NFR-NON-PE]
> **Purpose:** Document inherited risks that impact test execution. Do NOT execute TCs until these are resolved.

**TestChecklist Status:** {Draft | Approved}  
**Blocking Risks:** {count} outstanding

### 5.1 Critical Risks Requiring Resolution

**⏳ Do not execute test cases until these are resolved:**

| # | Risk ID | Description | Level | Owner | Status | Mitigation | Target Date |
|---|---------|-------------|-------|-------|--------|-----------|-------------|
| 1 | [BR-AMBIGUITY]-001 | _{e.g., Photo upload requirement: min-count not specified}_ | 🟠 HIGH | PM | ⏳ Active | Clarify: Can user proceed with 0 files? | TBD |
| 2 | [NFR-NON-PE]-001 | _{e.g., Load testing baseline}_ | 🟠 HIGH | SE | ⏳ Active | SE to define baseline + test strategy | TBD |

### 5.2 TCs Impacted by Outstanding Risks

| TC ID | Description | Depends On Risk | Status |
|-------|-------------|-----------------|--------|
| F001_AC2_VAL_001 | Submit without photo validation | [BR-AMBIGUITY]-001 | ⏳ TBD |
| F001_AC3_BL_002 | Handle session timeout gracefully | [User-Blocking]-001 | ⏳ TBD |

### 5.3 Next Steps

1. **Coordinate:** PE + PM resolve [BR-AMBIGUITY] clarifications
2. **Escalate:** Owner → resolve by Target Date
3. **Re-sync:** After resolution, run `/tas-functest {feature} {checklist}` to regenerate with full clarity
4. **Approve:** Re-review updated FuncTest before test execution

---

## 6. Change Log

| **Date** | **Ver** | **Changes** | **Author** |
|---|---|---|---|
| {YYYY-MM-DD} | 1.0 | Initial functional test spec | {Git Username} |

---

## AI Usage Log

| # | Date | Command |
|---|------|---------|
| 1 | {YYYY-MM-DD} | /tas-functest |
