@torus-engineering/tas-kit 1.13.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.tas/_platform/claude-code/settings.json +58 -46
- package/.tas/_platform/hooks/code-quality.js +127 -127
- package/.tas/_platform/hooks/session-end.js +111 -111
- package/.tas/agents/architect.md +53 -53
- package/.tas/agents/aws-reviewer.md +71 -71
- package/.tas/agents/build-resolver.md +89 -59
- package/.tas/agents/code-explorer.md +63 -63
- package/.tas/agents/csharp-reviewer.md +62 -62
- package/.tas/agents/database-reviewer.md +73 -73
- package/.tas/agents/doc-updater.md +68 -66
- package/.tas/agents/python-reviewer.md +67 -67
- package/.tas/agents/security-reviewer.md +79 -79
- package/.tas/agents/software-engineer.md +53 -0
- package/.tas/agents/typescript-reviewer.md +65 -65
- package/.tas/commands/ado-create.md +33 -28
- package/.tas/commands/ado-delete.md +26 -22
- package/.tas/commands/ado-get.md +24 -20
- package/.tas/commands/ado-status.md +22 -18
- package/.tas/commands/ado-update.md +31 -27
- package/.tas/commands/tas-adr.md +37 -33
- package/.tas/commands/tas-apitest-plan.md +177 -173
- package/.tas/commands/tas-apitest.md +147 -143
- package/.tas/commands/tas-brainstorm.md +23 -19
- package/.tas/commands/tas-brd.md +50 -0
- package/.tas/commands/tas-bug.md +127 -113
- package/.tas/commands/tas-checklist.md +180 -0
- package/.tas/commands/tas-debug.md +103 -0
- package/.tas/commands/tas-design.md +41 -37
- package/.tas/commands/tas-dev.md +225 -125
- package/.tas/commands/tas-e2e-mobile.md +146 -155
- package/.tas/commands/tas-e2e-web.md +150 -163
- package/.tas/commands/tas-e2e.md +289 -102
- package/.tas/commands/tas-feature.md +181 -47
- package/.tas/commands/tas-fix.md +72 -51
- package/.tas/commands/tas-functest-mobile.md +138 -144
- package/.tas/commands/tas-functest-web.md +176 -192
- package/.tas/commands/tas-functest.md +225 -76
- package/.tas/commands/tas-init.md +22 -17
- package/.tas/commands/tas-master-plan.md +300 -0
- package/.tas/commands/tas-orchestrate.md +159 -0
- package/.tas/commands/tas-plan.md +152 -117
- package/.tas/commands/tas-prd.md +57 -37
- package/.tas/commands/tas-review-pr.md +174 -0
- package/.tas/commands/tas-review.md +115 -113
- package/.tas/commands/tas-sad.md +47 -43
- package/.tas/commands/tas-security.md +91 -87
- package/.tas/commands/tas-spec.md +54 -50
- package/.tas/commands/tas-status.md +25 -16
- package/.tas/project-status-example.yaml +3 -1
- package/.tas/rules/ado-integration.md +67 -65
- package/.tas/rules/common/api-design.md +517 -517
- package/.tas/rules/common/build-debug-loop.md +233 -0
- package/.tas/rules/common/code-review.md +4 -0
- package/.tas/rules/common/feature-done.md +42 -0
- package/.tas/rules/common/post-implementation-review.md +4 -0
- package/.tas/rules/common/project-status.md +33 -16
- package/.tas/rules/common/sad-impact.md +81 -0
- package/.tas/rules/common/tdd.md +104 -89
- package/.tas/rules/csharp/api-testing.md +2 -2
- package/.tas/rules/csharp/torus-core-framework.md +128 -0
- package/.tas/tas-example.yaml +9 -32
- package/.tas/templates/AGENTS.md +13 -0
- package/.tas/templates/API-Test-Spec.md +5 -4
- package/.tas/templates/BRD.md +133 -0
- package/.tas/templates/Bug.md +15 -0
- package/.tas/templates/E2E-Execution-Report.md +8 -8
- package/.tas/templates/E2E-Mobile-Spec.md +6 -8
- package/.tas/templates/E2E-Report.md +2 -2
- package/.tas/templates/E2E-Scenario.md +22 -22
- package/.tas/templates/E2E-Test-Spec.md +274 -0
- package/.tas/templates/E2E-Web-Spec.md +4 -4
- package/.tas/templates/Feature-Technical-Part.md +69 -0
- package/.tas/templates/Feature-Technical-Stack.md +74 -0
- package/.tas/templates/Feature-Technical.md +329 -0
- package/.tas/templates/Feature.md +50 -26
- package/.tas/templates/Func-Test-Script.md +29 -56
- package/.tas/templates/Func-Test-Spec.md +144 -142
- package/.tas/templates/PRD.md +173 -142
- package/.tas/templates/TestChecklist.md +96 -0
- package/.tas/templates/torus-dotnet-bootstrap.md +223 -0
- package/.tas/tools/tas-ado-readme.md +24 -27
- package/.tas/tools/tas-ado.py +328 -25
- package/.tas/tools/tas-github.py +339 -0
- package/README.md +142 -57
- package/bin/cli.js +90 -90
- package/lib/adapters/antigravity.js +131 -131
- package/lib/adapters/claude-code.js +71 -35
- package/lib/adapters/codex.js +157 -157
- package/lib/adapters/cursor.js +80 -80
- package/lib/adapters/index.js +20 -20
- package/lib/adapters/utils.js +81 -81
- package/lib/deleted-files.json +7 -0
- package/lib/install.js +546 -543
- package/package.json +2 -2
- package/.tas/README.md +0 -334
- package/.tas/commands/tas-epic.md +0 -35
- package/.tas/commands/tas-story.md +0 -91
- package/.tas/rules/common/story-done.md +0 -30
- package/.tas/templates/Epic.md +0 -46
- package/.tas/templates/Story.md +0 -90
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.cs"
|
|
4
|
+
- "**/*.csproj"
|
|
5
|
+
- "**/*.sln"
|
|
6
|
+
- "**/Directory.Build.props"
|
|
7
|
+
- "**/Directory.Build.targets"
|
|
8
|
+
- "**/appsettings*.json"
|
|
9
|
+
- "**/Program.cs"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Torus Core Framework — Bootstrap Rule
|
|
13
|
+
|
|
14
|
+
> Used by `/tas-plan` and `/tas-dev` when scaffolding a **new .NET backend project** on top of Torus Backend Framework.
|
|
15
|
+
> Skip this rule for non-Torus .NET projects, or when modifying an existing solution not started from `torus-bootstrap`.
|
|
16
|
+
|
|
17
|
+
## When to apply
|
|
18
|
+
|
|
19
|
+
Apply if **all** of the following hold:
|
|
20
|
+
- Tech Stack in `CLAUDE.md` contains `.NET` / `C#` as backend
|
|
21
|
+
- Feature / PRD asks for a brand-new backend project (target dir has no `*.sln`)
|
|
22
|
+
- User has not opted out of Torus Backend Framework in `tas.yaml` or task description
|
|
23
|
+
|
|
24
|
+
If a `*.sln` already exists in the target dir → do NOT re-bootstrap. Read the existing layout instead.
|
|
25
|
+
|
|
26
|
+
## Tooling
|
|
27
|
+
|
|
28
|
+
CLI: `torus-bootstrap` — generates Onion Architecture solution wired to Torus Backend Framework NuGet packages.
|
|
29
|
+
|
|
30
|
+
Install globally (once):
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
dotnet tool install --global Torus.Bootstrap
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Or build from source (when working inside the framework monorepo):
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
cd Torus.Bootstrap
|
|
40
|
+
dotnet pack
|
|
41
|
+
dotnet tool install --global --add-source ./bin/Debug Torus.Bootstrap
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Bootstrap workflow
|
|
45
|
+
|
|
46
|
+
### 1. Pick mode
|
|
47
|
+
|
|
48
|
+
| Mode | Command | Use when |
|
|
49
|
+
|---|---|---|
|
|
50
|
+
| Interactive | `torus-bootstrap create --name {Name}` | Choices unclear, first-time scaffold |
|
|
51
|
+
| Non-interactive | `torus-bootstrap create --name {Name} --interactive false` | Defaults fine: Memory cache, OpenTelemetry, SQL Server |
|
|
52
|
+
| Flag-driven | `torus-bootstrap create --name {Name} --cache redis --database postgresql ...` | Choices already decided in PRD / SAD |
|
|
53
|
+
|
|
54
|
+
`{Name}` follows project naming convention (e.g. `Torus.Org`, `Acme.Billing`).
|
|
55
|
+
|
|
56
|
+
### 2. Flag reference
|
|
57
|
+
|
|
58
|
+
| Category | Flag | Values | Default |
|
|
59
|
+
|---|---|---|---|
|
|
60
|
+
| Cache | `--cache` | `none` / `memory` / `redis` / `both` | `memory` |
|
|
61
|
+
| Cache | `--distributed-lock` | flag — requires `--cache redis\|both` | off |
|
|
62
|
+
| Messaging | `--messaging` `--kafka` | `--kafka` requires `--messaging` | off |
|
|
63
|
+
| Background Jobs | `--background-jobs` `--quartz` | `--quartz` requires `--background-jobs` | off |
|
|
64
|
+
| Telemetry | `--telemetry` `--otel` | `--otel` requires `--telemetry` | off |
|
|
65
|
+
| Captcha | `--captcha` | `none` / `google` / `turnstile` / `both` | `none` |
|
|
66
|
+
| Authorization | `--opa` | flag — Open Policy Agent | off |
|
|
67
|
+
| Blob Storage | `--blob-storage` | `none` / `filesystem` / `minio` / `s3` / `both` | `none` |
|
|
68
|
+
| Email | `--email` | `none` / `mailkit` / `ses` / `both` | `none` |
|
|
69
|
+
| Database | `--database` | `sqlserver` / `postgresql` / `mysql` / `mongodb` | `sqlserver` |
|
|
70
|
+
| Multi-Tenancy | `--multi-tenancy` | flag | off |
|
|
71
|
+
| Output dir | `--output` | path | current dir |
|
|
72
|
+
|
|
73
|
+
Flags override interactive prompts when combined.
|
|
74
|
+
|
|
75
|
+
### 3. Generated structure
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
{Name}/
|
|
79
|
+
├── {Name}.Domain.Shared/ # Shared domain primitives
|
|
80
|
+
├── {Name}.Domain/ # Domain layer (entities, value objects)
|
|
81
|
+
├── {Name}.Application.Contracts/ # Application contracts (DTOs, interfaces)
|
|
82
|
+
├── {Name}.Application/ # Application layer (use cases, services)
|
|
83
|
+
├── {Name}.Persistence.EfCore/ # EF Core DbContext + repositories
|
|
84
|
+
├── {Name}.Infrastructure/ # Cross-cutting (logging, caching, ...)
|
|
85
|
+
├── {Name}.WebApi/ # ASP.NET Core entry point
|
|
86
|
+
└── {Name}.sln
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Onion dependency direction: `WebApi → Infrastructure / Persistence → Application → Application.Contracts → Domain → Domain.Shared`. Inner layers MUST NOT reference outer layers.
|
|
90
|
+
|
|
91
|
+
### 4. Post-bootstrap checklist
|
|
92
|
+
|
|
93
|
+
After `torus-bootstrap create` succeeds:
|
|
94
|
+
|
|
95
|
+
1. `cd {Name}` && `dotnet restore`
|
|
96
|
+
2. Update `appsettings.json` with real config. Secrets go via `dotnet user-secrets` / env vars — never commit.
|
|
97
|
+
3. Add EF Core provider package to `{Name}.Persistence.EfCore.csproj`:
|
|
98
|
+
- `sqlserver` → `Microsoft.EntityFrameworkCore.SqlServer`
|
|
99
|
+
- `postgresql` → `Npgsql.EntityFrameworkCore.PostgreSQL`
|
|
100
|
+
- `mysql` → `Pomelo.EntityFrameworkCore.MySql`
|
|
101
|
+
- `mongodb` → `MongoDB.EntityFrameworkCore` (or use the driver directly, skip EF Core)
|
|
102
|
+
4. Create initial migration:
|
|
103
|
+
```bash
|
|
104
|
+
dotnet ef migrations add InitialCreate --project {Name}.Persistence.EfCore
|
|
105
|
+
```
|
|
106
|
+
5. Build + run:
|
|
107
|
+
```bash
|
|
108
|
+
dotnet build
|
|
109
|
+
dotnet run --project {Name}.WebApi
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Guardrails
|
|
113
|
+
|
|
114
|
+
- DO NOT scaffold on top of an existing solution. Verify target dir has no `.sln` first.
|
|
115
|
+
- DO NOT add stray top-level projects (e.g. `Common`, `Shared`) outside Onion layers — extend `Domain.Shared` or `Infrastructure` instead.
|
|
116
|
+
- DO NOT let `WebApi` reference `Application` directly — go through `Application.Contracts` to keep boundaries clean.
|
|
117
|
+
- DO NOT pin to outdated Torus NuGet versions — `torus-bootstrap` resolves current versions; trust its choices unless PRD overrides.
|
|
118
|
+
- Multi-tenancy reshapes DbContext + middleware significantly — only enable if PRD / SAD explicitly calls for it.
|
|
119
|
+
- Captcha / OPA / Distributed Lock add infra dependencies — only enable when AC requires them.
|
|
120
|
+
|
|
121
|
+
## Integration with TAS commands
|
|
122
|
+
|
|
123
|
+
- **`/tas-plan`** — when Feature requires a new .NET backend project, include a `Bootstrap` step in the Execution Plan referencing this rule. Pin the exact `torus-bootstrap create ...` command (with all chosen flags) in the Technical file so `/tas-dev` can replay it deterministically.
|
|
124
|
+
- **`/tas-dev`** — before writing application code, if no `*.sln` exists in target dir, run the bootstrap command from the Technical Plan, then continue with regular Tasks.
|
|
125
|
+
|
|
126
|
+
## Reference
|
|
127
|
+
|
|
128
|
+
Full bootstrap CLI docs: [`.tas/templates/torus-dotnet-bootstrap.md`](../../templates/torus-dotnet-bootstrap.md).
|
package/.tas/tas-example.yaml
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
project:
|
|
7
7
|
name: "My Project"
|
|
8
|
-
code: "PROJ" # Prefix for file naming: PROJ-
|
|
8
|
+
code: "PROJ" # Prefix for file naming: PROJ-Feature-001, PROJ-Bug-001, etc.
|
|
9
9
|
type: greenfield # greenfield | brownfield
|
|
10
10
|
description: "Brief project description"
|
|
11
11
|
|
|
@@ -37,9 +37,8 @@ workflow:
|
|
|
37
37
|
- design_spec
|
|
38
38
|
- sad
|
|
39
39
|
- adr
|
|
40
|
-
-
|
|
41
|
-
-
|
|
42
|
-
- story
|
|
40
|
+
- feature # Business spec — replaces Epic + Story (single unit per business flow per stack)
|
|
41
|
+
- feature_technical # Technical plan generated by /tas-plan
|
|
43
42
|
gate: ready_for_development
|
|
44
43
|
|
|
45
44
|
# Phase 1: Develop (Orchestrated Agentic)
|
|
@@ -49,6 +48,12 @@ workflow:
|
|
|
49
48
|
environment: test
|
|
50
49
|
use_tdd: true
|
|
51
50
|
auto_review: true
|
|
51
|
+
# Autonomy mode for /tas-dev + /tas-plan.
|
|
52
|
+
# manual (default) — human gates: plan approval, SAD/ADR ask, deviation prompt, Done confirm.
|
|
53
|
+
# full — skip gates: auto-pick approach, write Technical file straight, auto-Done if review passes.
|
|
54
|
+
# CLI flag --autonomous=true|false on /tas-dev or /tas-plan overrides this per-call.
|
|
55
|
+
# Hard gates remain even in `full`: post-impl review still runs; Critical/High blocks auto-Done; ADR creation stays human-triggered.
|
|
56
|
+
autonomy_mode: manual
|
|
52
57
|
|
|
53
58
|
# Phase 2: Verify (Agentic + PE Review)
|
|
54
59
|
verify:
|
|
@@ -95,31 +100,3 @@ security:
|
|
|
95
100
|
deep_scan_on_every_commit: false # true = opt into tier 3 AI review each local commit
|
|
96
101
|
block_on: [critical, high] # severities that block commit (tier 1 & 2 only)
|
|
97
102
|
allow_bypass: true # print hint about SKIP_SECURITY_SCAN / --no-verify
|
|
98
|
-
|
|
99
|
-
# Template overrides (optional)
|
|
100
|
-
templates:
|
|
101
|
-
sad: ".tas/templates/SAD.md"
|
|
102
|
-
adr: ".tas/templates/ADR.md"
|
|
103
|
-
prd: ".tas/templates/PRD.md"
|
|
104
|
-
epic: ".tas/templates/Epic.md"
|
|
105
|
-
feature: ".tas/templates/Feature.md"
|
|
106
|
-
story: ".tas/templates/Story.md"
|
|
107
|
-
bug: ".tas/templates/Bug.md"
|
|
108
|
-
|
|
109
|
-
# Model mapping
|
|
110
|
-
models:
|
|
111
|
-
default: sonnet
|
|
112
|
-
commands:
|
|
113
|
-
tas-prd: sonnet
|
|
114
|
-
tas-design: sonnet
|
|
115
|
-
tas-sad: opus
|
|
116
|
-
tas-adr: opus
|
|
117
|
-
tas-epic: sonnet
|
|
118
|
-
tas-feature: sonnet
|
|
119
|
-
tas-story: sonnet
|
|
120
|
-
tas-dev: sonnet
|
|
121
|
-
tas-review: opus
|
|
122
|
-
tas-brainstorm: opus
|
|
123
|
-
tas-bug: sonnet
|
|
124
|
-
tas-status: haiku
|
|
125
|
-
tas-security: opus
|
package/.tas/templates/AGENTS.md
CHANGED
|
@@ -35,3 +35,16 @@
|
|
|
35
35
|
## Key Workflows
|
|
36
36
|
<!-- Common commands for this project -->
|
|
37
37
|
Type /[command-name] to [describe what it does].
|
|
38
|
+
|
|
39
|
+
## TAS Flow (kit v3 — Feature-only)
|
|
40
|
+
|
|
41
|
+
> Epic and User Story are NOT used. Each piece of work = one Feature per stack (`app` | `web` | `service` | `integration`), small enough to release in 1 day of dev.
|
|
42
|
+
|
|
43
|
+
Typical loop:
|
|
44
|
+
1. `/tas-prd` — capture business requirements (PE)
|
|
45
|
+
2. `/tas-feature` — create `docs/features/{CODE}-Feature-NNN-{slug}/{CODE}-Feature-NNN-{slug}.md` with AC in Given/When/Then (PE)
|
|
46
|
+
3. `/tas-plan` — generate `{CODE}-Feature-NNN-{slug}-Technical.md` with Context Diagram, Logic Flow, Data Flow, ERD, File Changes, Config, SAD impact, ADR need (SE)
|
|
47
|
+
4. `/tas-dev` — implement per Technical Plan + Definition of Done (SE)
|
|
48
|
+
5. `/tas-functest` + `/tas-functest-{mobile|web}` — generate FT spec + scripts (QA/SE)
|
|
49
|
+
6. `/tas-e2e` + `/tas-e2e-{mobile|web}` — chain Features into end-to-end scenarios (QA/PE)
|
|
50
|
+
7. `/tas-review` — multi-agent review before release
|
|
@@ -8,7 +8,7 @@ status:
|
|
|
8
8
|
created_date:
|
|
9
9
|
updated_date:
|
|
10
10
|
executor:
|
|
11
|
-
|
|
11
|
+
feature_id:
|
|
12
12
|
framework: xUnit
|
|
13
13
|
---
|
|
14
14
|
|
|
@@ -22,7 +22,7 @@ framework: xUnit
|
|
|
22
22
|
**Status**: [status] (Draft | Review | Approved | Deprecated)
|
|
23
23
|
**Spec Source**: [spec_source]
|
|
24
24
|
**Code Path**: [code_path]
|
|
25
|
-
**
|
|
25
|
+
**Feature**: [feature_id] (if applicable)
|
|
26
26
|
|
|
27
27
|
---
|
|
28
28
|
|
|
@@ -352,9 +352,10 @@ framework: xUnit
|
|
|
352
352
|
|
|
353
353
|
---
|
|
354
354
|
|
|
355
|
-
##
|
|
355
|
+
## Feature-Specific Test Cases (Optional)
|
|
356
356
|
|
|
357
|
-
> If spec generated from
|
|
357
|
+
> If spec generated from a Feature, add AC mapping here.
|
|
358
|
+
> Anchor TC IDs on AC: `{PROJECT}_F{FEATURE}_AC{N}_API_NNN_{H|N}` if you want full traceability.
|
|
358
359
|
|
|
359
360
|
| AC ID | AC Description | Test Case IDs |
|
|
360
361
|
|-------|----------------|---------------|
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Business Requirements Document (BRD)
|
|
2
|
+
|
|
3
|
+
> **Document Status:** [Draft | In Review | Approved | Archived]
|
|
4
|
+
> **Last Updated:** [Date]
|
|
5
|
+
> **Business Owner:** [Name]
|
|
6
|
+
> **Contributors:** [Names/Roles]
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Executive Summary
|
|
11
|
+
|
|
12
|
+
**Project / Initiative Name:** [Name]
|
|
13
|
+
|
|
14
|
+
**Summary:**
|
|
15
|
+
[2-3 sentences: what this initiative is, what business problem it solves, expected outcome.]
|
|
16
|
+
|
|
17
|
+
**Decision Required By:** [Date]
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Business Objectives
|
|
22
|
+
|
|
23
|
+
1. [Primary business objective — measurable]
|
|
24
|
+
2. [Secondary business objective]
|
|
25
|
+
|
|
26
|
+
**KPIs / Success Criteria:**
|
|
27
|
+
- [KPI 1 with target, e.g. "Reduce support tickets by 30% within 6 months"]
|
|
28
|
+
- [KPI 2 with target]
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Problem Statement / Business Need
|
|
33
|
+
|
|
34
|
+
**Current State:**
|
|
35
|
+
[Describe the problem, pain point, or opportunity. What is broken or missing today?]
|
|
36
|
+
|
|
37
|
+
**Impact:**
|
|
38
|
+
[Quantify impact where possible: cost, time, revenue lost, compliance risk, etc.]
|
|
39
|
+
|
|
40
|
+
**Why Now:**
|
|
41
|
+
[Market timing, regulatory deadline, competitive pressure, strategic priority]
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Project Scope
|
|
46
|
+
|
|
47
|
+
### In Scope
|
|
48
|
+
- [Business capability / domain 1]
|
|
49
|
+
- [Business capability / domain 2]
|
|
50
|
+
|
|
51
|
+
### Out of Scope
|
|
52
|
+
- [Explicitly excluded item 1]
|
|
53
|
+
- [Explicitly excluded item 2]
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Business Requirements
|
|
58
|
+
|
|
59
|
+
> High-level requirements only. No technical implementation detail.
|
|
60
|
+
|
|
61
|
+
| ID | Requirement | Priority |
|
|
62
|
+
|----|-------------|----------|
|
|
63
|
+
| BR-001 | [Business requirement description] | Must |
|
|
64
|
+
| BR-002 | [Business requirement description] | Should |
|
|
65
|
+
| BR-003 | [Business requirement description] | Could |
|
|
66
|
+
|
|
67
|
+
**Priority scale:** Must / Should / Could / Won't
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Stakeholders
|
|
72
|
+
|
|
73
|
+
| Name / Role | Type | Interest / Concern |
|
|
74
|
+
|-------------|------|--------------------|
|
|
75
|
+
| [Name] — [Title] | Decision Maker | [What they care about] |
|
|
76
|
+
| [Name] — [Title] | Contributor | [What they contribute] |
|
|
77
|
+
| [Name] — [Title] | Informed | [What they need to know] |
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Constraints & Assumptions
|
|
82
|
+
|
|
83
|
+
### Constraints
|
|
84
|
+
- **Budget:** [Constraint]
|
|
85
|
+
- **Timeline:** [Hard deadline if any]
|
|
86
|
+
- **Legal / Regulatory:** [Compliance constraints]
|
|
87
|
+
- **Technical:** [Platform, integration limits]
|
|
88
|
+
|
|
89
|
+
### Assumptions
|
|
90
|
+
- [Assumption 1 — what we assume to be true]
|
|
91
|
+
- [Assumption 2]
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Timeline / Milestones
|
|
96
|
+
|
|
97
|
+
| Milestone | Target Date | Owner |
|
|
98
|
+
|-----------|-------------|-------|
|
|
99
|
+
| BRD Approved | [Date] | Business Owner |
|
|
100
|
+
| PRD Completed | [Date] | PE |
|
|
101
|
+
| Development Start | [Date] | SE |
|
|
102
|
+
| Launch | [Date] | DSE |
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Cost-Benefit / Business Case
|
|
107
|
+
|
|
108
|
+
**Estimated Cost:**
|
|
109
|
+
- Development: [estimate]
|
|
110
|
+
- Operational: [estimate]
|
|
111
|
+
|
|
112
|
+
**Expected Benefits:**
|
|
113
|
+
- [Benefit 1 — quantified if possible]
|
|
114
|
+
- [Benefit 2]
|
|
115
|
+
|
|
116
|
+
**ROI / Payback Period:** [estimate]
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Changelog
|
|
121
|
+
|
|
122
|
+
| Date | Version | Changes | Author |
|
|
123
|
+
|------|---------|---------|--------|
|
|
124
|
+
| [Date] | 1.0 | Initial draft | [Name] |
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## AI Usage Log
|
|
129
|
+
|
|
130
|
+
| # | Date | Command | Input (est.) | Output (est.) |
|
|
131
|
+
|---|------|---------|-------------|---------------|
|
|
132
|
+
| 1 | [Date] | /tas-brd | ~{N}k | ~{N}k |
|
|
133
|
+
| **Total** | | | **~{N}k** | **~{N}k** |
|
package/.tas/templates/Bug.md
CHANGED
|
@@ -7,6 +7,7 @@ ado_assigned_to:
|
|
|
7
7
|
ado_created:
|
|
8
8
|
last_ado_sync:
|
|
9
9
|
parent_ado_id:
|
|
10
|
+
sad_impact: false
|
|
10
11
|
---
|
|
11
12
|
# Bug-{NNN}: {Title}
|
|
12
13
|
|
|
@@ -49,6 +50,20 @@ parent_ado_id:
|
|
|
49
50
|
| RT-1 | Reproduce bug case | {input} | {expected} | - |
|
|
50
51
|
| RT-2 | Related regression | {input} | {expected} | - |
|
|
51
52
|
|
|
53
|
+
## SAD Impact Matrix
|
|
54
|
+
*SE fills during analyze step. Per `.tas/rules/common/sad-impact.md`. Set frontmatter `sad_impact: true` if any row `Detected: Yes`.*
|
|
55
|
+
|
|
56
|
+
| # | Category | Detected | SAD Section | Change Summary | ADR Candidate |
|
|
57
|
+
|---|----------|----------|-------------|----------------|---------------|
|
|
58
|
+
| 1 | Tech Stack | No | — | — | No |
|
|
59
|
+
| 2 | System Boundary | No | — | — | No |
|
|
60
|
+
| 3 | Container / Topology | No | — | — | No |
|
|
61
|
+
| 4 | Data Architecture | No | — | — | No |
|
|
62
|
+
| 5 | API Contract | No | — | — | No |
|
|
63
|
+
| 6 | Security | No | — | — | No |
|
|
64
|
+
| 7 | NFR / Ops | No | — | — | No |
|
|
65
|
+
| 8 | Deployment | No | — | — | No |
|
|
66
|
+
|
|
52
67
|
## Fix Notes
|
|
53
68
|
*SE fills after fixing*
|
|
54
69
|
- **Fix Description:** {Fix description}
|
|
@@ -3,9 +3,9 @@ created_date:
|
|
|
3
3
|
executor:
|
|
4
4
|
status: # Pass | Fail | Partial
|
|
5
5
|
test_layer: # functional | e2e
|
|
6
|
-
scenario_id:
|
|
7
|
-
feature_id:
|
|
8
|
-
|
|
6
|
+
scenario_id: # filled when test_layer = e2e
|
|
7
|
+
feature_id: # filled when test_layer = functional (single Feature)
|
|
8
|
+
feature_ids: # filled when test_layer = e2e (comma-separated Features in scenario)
|
|
9
9
|
platform: # mobile-ios | mobile-android | web-chromium | web-firefox | web-webkit
|
|
10
10
|
environment: # dev | staging | prod
|
|
11
11
|
---
|
|
@@ -40,9 +40,9 @@ environment: # dev | staging | prod
|
|
|
40
40
|
|
|
41
41
|
| Test ID | AC Ref | Description | Result | Duration | Failure Reason |
|
|
42
42
|
|---------|--------|-------------|--------|----------|----------------|
|
|
43
|
-
| {PROJECT}
|
|
44
|
-
| {PROJECT}
|
|
45
|
-
| {PROJECT}
|
|
43
|
+
| {PROJECT}_F{FEATURE}_AC1_FT_001_H | AC-1 | {description} | PASS | {Xs} | - |
|
|
44
|
+
| {PROJECT}_F{FEATURE}_AC1_FT_002_N | AC-1 | {description} | PASS | {Xs} | - |
|
|
45
|
+
| {PROJECT}_F{FEATURE}_AC1_FT_003_E | AC-1 | {description} | FAIL | {Xs} | {brief reason: element not found / assertion mismatch / timeout / ...} |
|
|
46
46
|
|
|
47
47
|
---
|
|
48
48
|
|
|
@@ -133,8 +133,8 @@ environment: # dev | staging | prod
|
|
|
133
133
|
|
|
134
134
|
| AC ID | FT Tests | E2E Tests | Covered | Status |
|
|
135
135
|
|-------|----------|-----------|---------|--------|
|
|
136
|
-
| AC-1 |
|
|
137
|
-
| AC-2 |
|
|
136
|
+
| AC-1 | F012_AC1_FT_001_H, F012_AC1_FT_002_N | E2E_001 (Step 1) | Yes | All Pass |
|
|
137
|
+
| AC-2 | F012_AC2_FT_001_H | E2E_001 (Step 3) | Yes | 1 Fail |
|
|
138
138
|
| AC-3 | - | - | No | Not tested |
|
|
139
139
|
|
|
140
140
|
### Uncovered Areas
|
|
@@ -2,18 +2,16 @@
|
|
|
2
2
|
created_date:
|
|
3
3
|
executor:
|
|
4
4
|
status: Draft
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
epic_id:
|
|
5
|
+
feature_ids: # comma-separated Feature IDs chained in this scenario
|
|
6
|
+
scenario_id:
|
|
8
7
|
---
|
|
9
8
|
|
|
10
9
|
# E2E Mobile Test Specification
|
|
11
10
|
|
|
12
|
-
**
|
|
13
|
-
**
|
|
14
|
-
**
|
|
15
|
-
**
|
|
16
|
-
**Created**: [created_date]
|
|
11
|
+
**Scenario**: [{Scenario_ID}]({SCENARIO_LINK})
|
|
12
|
+
**Features**: {feature_ids}
|
|
13
|
+
**Author**: @[executor]
|
|
14
|
+
**Created**: [created_date]
|
|
17
15
|
**Status**: [status]
|
|
18
16
|
|
|
19
17
|
---
|
|
@@ -3,15 +3,15 @@ created_date:
|
|
|
3
3
|
updated_date:
|
|
4
4
|
executor:
|
|
5
5
|
status: Draft
|
|
6
|
-
|
|
7
|
-
scenario_type: # single-
|
|
6
|
+
feature_ids: # comma-separated list of Features chained in this scenario, or "XSTACK" for cross-stack
|
|
7
|
+
scenario_type: # single-stack | cross-stack
|
|
8
8
|
platform: # mobile | web | both
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# E2E Scenario: {Scenario Name}
|
|
12
12
|
|
|
13
|
-
**
|
|
14
|
-
**Scenario Type**: {{scenario_type}} (single-
|
|
13
|
+
**Features**: [{Feature_ID_1}]({link1}) {{#if cross-stack}} + [{Feature_ID_2}]({link2}) {{/if}}
|
|
14
|
+
**Scenario Type**: {{scenario_type}} (single-stack | cross-stack)
|
|
15
15
|
**Platform**: {{platform}}
|
|
16
16
|
**Author**: @[executor]
|
|
17
17
|
**Created**: [created_date]
|
|
@@ -21,17 +21,17 @@ platform: # mobile | web | both
|
|
|
21
21
|
|
|
22
22
|
## Scenario Naming Convention
|
|
23
23
|
|
|
24
|
-
### Single-
|
|
24
|
+
### Single-Stack E2E
|
|
25
25
|
```
|
|
26
|
-
{PROJECT}
|
|
26
|
+
{PROJECT}_E2E_{NUMBER}_{MODIFIER}
|
|
27
27
|
```
|
|
28
|
-
Example: `
|
|
28
|
+
Example: `AL_E2E_001_H` — full auth flow happy path (all Features in `web` stack)
|
|
29
29
|
|
|
30
|
-
### Cross-
|
|
30
|
+
### Cross-Stack E2E
|
|
31
31
|
```
|
|
32
|
-
{PROJECT}
|
|
32
|
+
{PROJECT}_XSTACK_E2E_{NUMBER}_{MODIFIER}
|
|
33
33
|
```
|
|
34
|
-
Example: `
|
|
34
|
+
Example: `AL_XSTACK_E2E_001_H` — registration (web) → KYC service → first scan (app)
|
|
35
35
|
|
|
36
36
|
---
|
|
37
37
|
|
|
@@ -40,7 +40,7 @@ Example: `AL_XEPIC_E2E_001_H` - Registration through first scan journey
|
|
|
40
40
|
> Narrative description of the end-to-end user journey.
|
|
41
41
|
> This scenario tests {what} by simulating {user type} performing {complete flow}.
|
|
42
42
|
|
|
43
|
-
**User Persona**: {
|
|
43
|
+
**User Persona**: {persona / role}
|
|
44
44
|
**Starting Point**: {Screen/Page where flow begins}
|
|
45
45
|
**End Point**: {Screen/Page where flow ends}
|
|
46
46
|
**Estimated Duration**: {X minutes}
|
|
@@ -51,11 +51,11 @@ Example: `AL_XEPIC_E2E_001_H` - Registration through first scan journey
|
|
|
51
51
|
|
|
52
52
|
| Step | Screen/Page | Action | Expected Result | Builds on FT IDs | Priority |
|
|
53
53
|
|------|-------------|--------|-----------------|-------------------|----------|
|
|
54
|
-
| 1 | {Start Screen} | {User action} | {Expected outcome} | {PROJECT}
|
|
55
|
-
| 2 | {Next Screen} | {User action} | {Expected outcome} | {PROJECT}
|
|
56
|
-
| 3 | {Next Screen} | {User action} | {Expected outcome} | {PROJECT}
|
|
54
|
+
| 1 | {Start Screen} | {User action} | {Expected outcome} | {PROJECT}_F{FEATURE}_AC1_FT_001_H | P0 |
|
|
55
|
+
| 2 | {Next Screen} | {User action} | {Expected outcome} | {PROJECT}_F{FEATURE}_AC1_FT_002_H | P0 |
|
|
56
|
+
| 3 | {Next Screen} | {User action} | {Expected outcome} | {PROJECT}_F{FEATURE}_AC2_FT_001_H | P0 |
|
|
57
57
|
| 4 | {Next Screen} | {User action} | {Expected outcome} | - (new step, no FT reference) | P1 |
|
|
58
|
-
| 5 | {End Screen} | {Verify final state} | {Final expected state} | {PROJECT}
|
|
58
|
+
| 5 | {End Screen} | {Verify final state} | {Final expected state} | {PROJECT}_F{FEATURE}_AC2_FT_003_H | P0 |
|
|
59
59
|
|
|
60
60
|
### Step Details
|
|
61
61
|
|
|
@@ -64,7 +64,7 @@ Example: `AL_XEPIC_E2E_001_H` - Registration through first scan journey
|
|
|
64
64
|
- **Preconditions**: {What must be true before this step}
|
|
65
65
|
- **Action**: {Detailed user action}
|
|
66
66
|
- **Expected Result**: {What should happen}
|
|
67
|
-
- **FT Reference**: Reuses logic from `{FT_ID}` in `features/{
|
|
67
|
+
- **FT Reference**: Reuses logic from `{FT_ID}` in `features/{feature-slug}/helpers.ts`
|
|
68
68
|
- **Timeout**: {Expected max time for this step}
|
|
69
69
|
|
|
70
70
|
#### Step 2: {Action Title}
|
|
@@ -116,7 +116,7 @@ _(Continue for each step)_
|
|
|
116
116
|
## Prerequisites
|
|
117
117
|
|
|
118
118
|
- [ ] User account exists in target environment
|
|
119
|
-
- [ ] Required test data seeded
|
|
119
|
+
- [ ] Required test data seeded
|
|
120
120
|
- [ ] Backend services running and accessible
|
|
121
121
|
- [ ] External service stubs/mocks configured (if applicable)
|
|
122
122
|
- [ ] Device/browser configured and ready
|
|
@@ -151,12 +151,12 @@ _(Continue for each step)_
|
|
|
151
151
|
|
|
152
152
|
### Mobile Script Output
|
|
153
153
|
- **File**: `apps/mobile/e2e/flows/{scenario-slug}.e2e.ts`
|
|
154
|
-
- **Reuses**: Helper functions from `apps/mobile/e2e/features/{
|
|
154
|
+
- **Reuses**: Helper functions from `apps/mobile/e2e/features/{feature-slug}/helpers.ts`
|
|
155
155
|
- **Run**: `yarn e2e:flow:{scenario-slug}`
|
|
156
156
|
|
|
157
157
|
### Web Script Output
|
|
158
158
|
- **File**: `apps/web/e2e/flows/{scenario-slug}.spec.ts`
|
|
159
|
-
- **Reuses**: Page objects + helpers from `apps/web/e2e/features/{
|
|
159
|
+
- **Reuses**: Page objects + helpers from `apps/web/e2e/features/{feature-slug}/`
|
|
160
160
|
- **Run**: `yarn e2e:flow:{scenario-slug}`
|
|
161
161
|
|
|
162
162
|
---
|
|
@@ -167,9 +167,9 @@ _(Continue for each step)_
|
|
|
167
167
|
|
|
168
168
|
| Step | FT ID | Source File | Helper Function |
|
|
169
169
|
|------|-------|-------------|-----------------|
|
|
170
|
-
| 1 | {FT_ID_1} | `features/{
|
|
171
|
-
| 2 | {FT_ID_2} | `features/{
|
|
172
|
-
| 3 | - | (new logic) | N/A
|
|
170
|
+
| 1 | {FT_ID_1} | `features/{feature-slug}/helpers.ts` | `{functionName}()` |
|
|
171
|
+
| 2 | {FT_ID_2} | `features/{feature-slug}/helpers.ts` | `{functionName}()` |
|
|
172
|
+
| 3 | - | (new logic) | N/A — write new code |
|
|
173
173
|
|
|
174
174
|
---
|
|
175
175
|
|