@torus-engineering/tas-kit 1.11.1 → 1.13.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/README.md +334 -334
- package/{.claude → .tas/_platform/claude-code}/settings.json +0 -12
- package/{.claude → .tas/_platform}/hooks/code-quality.js +1 -1
- package/{.claude → .tas/_platform}/hooks/session-end.js +20 -25
- package/{.claude → .tas}/commands/ado-create.md +5 -4
- package/{.claude → .tas}/commands/ado-delete.md +5 -4
- package/{.claude → .tas}/commands/ado-update.md +5 -4
- package/{.claude → .tas}/commands/tas-adr.md +3 -3
- package/{.claude → .tas}/commands/tas-apitest-plan.md +2 -2
- package/{.claude → .tas}/commands/tas-apitest.md +4 -4
- package/{.claude → .tas}/commands/tas-bug.md +6 -6
- package/{.claude → .tas}/commands/tas-design.md +3 -3
- package/{.claude → .tas}/commands/tas-dev.md +11 -14
- package/{.claude → .tas}/commands/tas-epic.md +3 -3
- package/{.claude → .tas}/commands/tas-feature.md +4 -4
- package/{.claude → .tas}/commands/tas-fix.md +5 -5
- package/{.claude → .tas}/commands/tas-init.md +1 -1
- package/{.claude → .tas}/commands/tas-plan.md +198 -198
- package/{.claude → .tas}/commands/tas-prd.md +3 -3
- package/{.claude → .tas}/commands/tas-review.md +17 -15
- package/{.claude → .tas}/commands/tas-sad.md +3 -3
- package/{.claude → .tas}/commands/tas-security.md +4 -4
- package/{.claude → .tas}/commands/tas-story.md +3 -3
- package/.tas/platforms.json +5 -0
- package/.tas/project-status-example.yaml +17 -17
- package/{.claude/skills/ado-integration/SKILL.md → .tas/rules/ado-integration.md} +5 -15
- package/{.claude/skills/api-design/SKILL.md → .tas/rules/common/api-design.md} +517 -530
- package/{.claude → .tas}/rules/common/code-review.md +30 -6
- package/{.claude/rules/common/post-review-agent.md → .tas/rules/common/post-implementation-review.md} +51 -49
- package/{.claude → .tas}/rules/common/project-status.md +80 -80
- package/{.claude → .tas}/rules/common/stack-detection.md +29 -29
- package/.tas/{checklists → rules/common}/story-done.md +12 -5
- package/{.claude/skills/tas-tdd/SKILL.md → .tas/rules/common/tdd.md} +4 -38
- package/{.claude → .tas}/rules/common/testing.md +3 -8
- package/{.claude → .tas}/rules/common/token-logging.md +36 -27
- package/{.claude → .tas}/rules/csharp/api-testing.md +171 -171
- package/{.claude → .tas}/rules/csharp/coding-style.md +0 -2
- package/{.claude → .tas}/rules/csharp/security.md +10 -0
- package/{.claude → .tas}/rules/python/coding-style.md +0 -2
- package/{.claude → .tas}/rules/typescript/coding-style.md +0 -2
- package/.tas/rules/typescript/patterns.md +142 -0
- package/.tas/rules/typescript/security.md +88 -0
- package/{.claude → .tas}/rules/typescript/testing.md +0 -4
- package/{.claude → .tas}/rules/web/coding-style.md +0 -2
- package/.tas/tas-example.yaml +125 -126
- package/.tas/templates/ADR.md +47 -47
- package/.tas/templates/Bug.md +67 -67
- package/.tas/templates/Design-Spec.md +36 -36
- package/.tas/templates/Epic.md +46 -46
- package/.tas/templates/Feature.md +1 -1
- package/.tas/templates/Security-Report.md +27 -27
- package/.tas/tools/tas-ado-readme.md +169 -169
- package/.tas/tools/tas-ado.py +621 -621
- package/README.md +334 -334
- package/bin/cli.js +91 -73
- package/lib/adapters/antigravity.js +131 -0
- package/lib/adapters/claude-code.js +35 -0
- package/lib/adapters/codex.js +157 -0
- package/lib/adapters/cursor.js +80 -0
- package/lib/adapters/index.js +20 -0
- package/lib/adapters/utils.js +81 -0
- package/lib/deleted-files.json +99 -0
- package/lib/install.js +543 -327
- package/package.json +5 -4
- package/.claude/agents/code-reviewer.md +0 -41
- package/.claude/agents/e2e-runner.md +0 -61
- package/.claude/agents/planner.md +0 -82
- package/.claude/agents/tdd-guide.md +0 -84
- package/.claude/commands/tas-verify.md +0 -51
- package/.claude/rules/typescript/patterns.md +0 -62
- package/.claude/rules/typescript/security.md +0 -28
- package/.claude/settings.local.json +0 -38
- package/.claude/skills/ai-regression-testing/SKILL.md +0 -364
- package/.claude/skills/architecture-decision-records/SKILL.md +0 -184
- package/.claude/skills/benchmark/SKILL.md +0 -98
- package/.claude/skills/browser-qa/SKILL.md +0 -92
- package/.claude/skills/canary-watch/SKILL.md +0 -104
- package/.claude/skills/js-backend-patterns/SKILL.md +0 -603
- package/.claude/skills/tas-conventions/SKILL.md +0 -65
- package/.claude/skills/tas-implementation-complete/SKILL.md +0 -100
- package/.claude/skills/token-logger/SKILL.md +0 -19
- package/.tas/checklists/code-review.md +0 -29
- package/.tas/checklists/security.md +0 -21
- /package/{.claude → .tas}/agents/architect.md +0 -0
- /package/{.claude → .tas}/agents/aws-reviewer.md +0 -0
- /package/{.claude → .tas}/agents/build-resolver.md +0 -0
- /package/{.claude → .tas}/agents/code-explorer.md +0 -0
- /package/{.claude → .tas}/agents/csharp-reviewer.md +0 -0
- /package/{.claude → .tas}/agents/database-reviewer.md +0 -0
- /package/{.claude → .tas}/agents/doc-updater.md +0 -0
- /package/{.claude → .tas}/agents/python-reviewer.md +0 -0
- /package/{.claude → .tas}/agents/security-reviewer.md +0 -0
- /package/{.claude → .tas}/agents/typescript-reviewer.md +0 -0
- /package/{.claude → .tas}/commands/ado-get.md +0 -0
- /package/{.claude → .tas}/commands/ado-status.md +0 -0
- /package/{.claude → .tas}/commands/tas-brainstorm.md +0 -0
- /package/{.claude → .tas}/commands/tas-e2e-mobile.md +0 -0
- /package/{.claude → .tas}/commands/tas-e2e-web.md +0 -0
- /package/{.claude → .tas}/commands/tas-e2e.md +0 -0
- /package/{.claude → .tas}/commands/tas-functest-mobile.md +0 -0
- /package/{.claude → .tas}/commands/tas-functest-web.md +0 -0
- /package/{.claude → .tas}/commands/tas-functest.md +0 -0
- /package/{.claude → .tas}/commands/tas-spec.md +0 -0
- /package/{.claude → .tas}/commands/tas-status.md +0 -0
- /package/{.claude → .tas}/rules/.gitkeep +0 -0
- /package/{.claude → .tas}/rules/common/hooks.md +0 -0
- /package/{.claude → .tas}/rules/common/patterns.md +0 -0
- /package/{.claude → .tas}/rules/common/security.md +0 -0
- /package/{.claude → .tas}/rules/csharp/hooks.md +0 -0
- /package/{.claude → .tas}/rules/csharp/patterns.md +0 -0
- /package/{.claude → .tas}/rules/csharp/testing.md +0 -0
- /package/{.claude → .tas}/rules/python/hooks.md +0 -0
- /package/{.claude → .tas}/rules/python/patterns.md +0 -0
- /package/{.claude → .tas}/rules/python/security.md +0 -0
- /package/{.claude → .tas}/rules/python/testing.md +0 -0
- /package/{.claude → .tas}/rules/typescript/hooks.md +0 -0
- /package/{.claude → .tas}/rules/web/design-quality.md +0 -0
- /package/{.claude → .tas}/rules/web/hooks.md +0 -0
- /package/{.claude → .tas}/rules/web/patterns.md +0 -0
- /package/{.claude → .tas}/rules/web/performance.md +0 -0
- /package/{.claude → .tas}/rules/web/security.md +0 -0
- /package/{.claude → .tas}/rules/web/testing.md +0 -0
- /package/{CLAUDE-Example.md → .tas/templates/AGENTS.md} +0 -0
|
@@ -19,18 +19,6 @@
|
|
|
19
19
|
]
|
|
20
20
|
},
|
|
21
21
|
"hooks": {
|
|
22
|
-
"PreToolUse": [
|
|
23
|
-
{
|
|
24
|
-
"matcher": "Write|Edit|MultiEdit",
|
|
25
|
-
"hooks": [
|
|
26
|
-
{
|
|
27
|
-
"type": "command",
|
|
28
|
-
"command": "node -e \"const d=JSON.parse(require('fs').readFileSync('/dev/stdin','utf8')); const p=(d.tool_input||{}).file_path||''; const s=['.env','.prod.','.production.','appsettings.Production','secrets/','terraform/','.pem','.key','credentials'].find(x=>p.toLowerCase().includes(x.toLowerCase())); if(s) console.log('[TAS] WARNING: Sensitive file ('+s+'): '+p+' → Confirm this edit is intentional.');\"",
|
|
29
|
-
"description": "Warn before editing sensitive files"
|
|
30
|
-
}
|
|
31
|
-
]
|
|
32
|
-
}
|
|
33
|
-
],
|
|
34
22
|
"PostToolUse": [
|
|
35
23
|
{
|
|
36
24
|
"matcher": "Write|Edit|MultiEdit",
|
|
@@ -45,7 +45,7 @@ if (fs.existsSync(path.join(cwd, 'package.json'))) {
|
|
|
45
45
|
} catch { /* ignore */ }
|
|
46
46
|
|
|
47
47
|
if (hasTestScript) {
|
|
48
|
-
const result = run('npm test
|
|
48
|
+
const result = run('npm test', cwd);
|
|
49
49
|
checks.push(result.ok
|
|
50
50
|
? '✓ Tests passed (npm test)'
|
|
51
51
|
: '✗ Tests FAILED (npm test) — fix before committing'
|
|
@@ -56,11 +56,25 @@ if (fs.existsSync(path.join(cwd, 'package.json'))) {
|
|
|
56
56
|
|
|
57
57
|
// .NET
|
|
58
58
|
if (!testRan) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
59
|
+
function findDotnetFiles(startDir, maxDepth = 3) {
|
|
60
|
+
const results = [];
|
|
61
|
+
function walk(dir, depth) {
|
|
62
|
+
if (depth > maxDepth) return;
|
|
63
|
+
try {
|
|
64
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
65
|
+
if (entry.isDirectory() && !entry.name.startsWith('.') && entry.name !== 'node_modules') {
|
|
66
|
+
walk(path.join(dir, entry.name), depth + 1);
|
|
67
|
+
} else if (entry.name.endsWith('.csproj') || entry.name.endsWith('.sln')) {
|
|
68
|
+
results.push(entry.name);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
} catch { /* ignore */ }
|
|
72
|
+
}
|
|
73
|
+
walk(startDir, 0);
|
|
74
|
+
return results;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const csprojFiles = findDotnetFiles(cwd);
|
|
64
78
|
|
|
65
79
|
if (csprojFiles.length > 0) {
|
|
66
80
|
const result = run('dotnet test --no-build --logger "console;verbosity=minimal" 2>&1', cwd);
|
|
@@ -89,25 +103,6 @@ if (!testRan) {
|
|
|
89
103
|
}
|
|
90
104
|
}
|
|
91
105
|
|
|
92
|
-
// ─── 2. Check project-status.yaml updated today ──────────────────────────────
|
|
93
|
-
const statusFile = path.join(cwd, 'project-status.yaml');
|
|
94
|
-
if (fs.existsSync(statusFile)) {
|
|
95
|
-
const today = new Date().toISOString().split('T')[0]; // YYYY-MM-DD
|
|
96
|
-
try {
|
|
97
|
-
const content = fs.readFileSync(statusFile, 'utf8');
|
|
98
|
-
if (content.includes(today)) {
|
|
99
|
-
checks.push('✓ project-status.yaml updated today');
|
|
100
|
-
} else {
|
|
101
|
-
checks.push('⚠ project-status.yaml not updated today — run /tas-status to sync');
|
|
102
|
-
}
|
|
103
|
-
} catch {
|
|
104
|
-
checks.push('⚠ Could not read project-status.yaml');
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// ─── 3. Remind about story status ────────────────────────────────────────────
|
|
109
|
-
checks.push('→ Next: /tas-review-code before moving story to Deploy Test');
|
|
110
|
-
|
|
111
106
|
// ─── Output ──────────────────────────────────────────────────────────────────
|
|
112
107
|
if (checks.length > 0) {
|
|
113
108
|
console.log('\n[TAS] Session end checks:');
|
|
@@ -15,13 +15,14 @@ Create new work item on Azure DevOps from local .md file.
|
|
|
15
15
|
/ado-create bug 003 --parent-id 123
|
|
16
16
|
|
|
17
17
|
## Actions
|
|
18
|
-
1. Read
|
|
19
|
-
2.
|
|
20
|
-
3.
|
|
18
|
+
1. Read `.tas/rules/ado-integration.md` for ADO operating rules (Always/Ask/Never, Red Flags).
|
|
19
|
+
2. Read `tas.yaml`, check `ado.enabled`. If `false` or missing: report "ADO integration is disabled (`ado.enabled: false` in tas.yaml)." then stop.
|
|
20
|
+
3. Run: python .tas/tools/tas-ado.py create-<type> <temp-id> [--parent-id <id>]
|
|
21
|
+
4. Script will:
|
|
21
22
|
- Find file by pattern {type}-{temp-id}-*.md
|
|
22
23
|
- Extract title and description
|
|
23
24
|
- Create work item on ADO
|
|
24
25
|
- Rename file to {type}-{ado_id}-*.md
|
|
25
26
|
- Add parent relation if --parent-id provided
|
|
26
27
|
- Update frontmatter: ado_id, last_ado_sync
|
|
27
|
-
|
|
28
|
+
5. Update root/project-status.yaml
|
|
@@ -12,10 +12,11 @@ Delete work item on Azure DevOps. Does NOT delete local file.
|
|
|
12
12
|
/ado-delete bug 5678
|
|
13
13
|
|
|
14
14
|
## Actions
|
|
15
|
-
1. Read
|
|
16
|
-
2.
|
|
17
|
-
3.
|
|
18
|
-
4.
|
|
15
|
+
1. Read `.tas/rules/ado-integration.md` for ADO operating rules (Always/Ask/Never, Red Flags).
|
|
16
|
+
2. Read `tas.yaml`, check `ado.enabled`. If `false` or missing: report "ADO integration is disabled (`ado.enabled: false` in tas.yaml)." then stop.
|
|
17
|
+
3. MUST ask user confirmation before deleting: "Are you sure you want to delete <type> #<ado-id> on ADO?"
|
|
18
|
+
4. After user confirms, run: python .tas/tools/tas-ado.py delete-<type> <ado-id>
|
|
19
|
+
5. Script will:
|
|
19
20
|
- Delete work item on ADO
|
|
20
21
|
- NOT delete local file (keep for reference)
|
|
21
22
|
- Update frontmatter: ado_state = Removed, last_ado_sync
|
|
@@ -16,11 +16,12 @@ Update work item on Azure DevOps from local .md file.
|
|
|
16
16
|
/ado-update feature 456
|
|
17
17
|
|
|
18
18
|
## Actions
|
|
19
|
-
1. Read
|
|
20
|
-
2.
|
|
21
|
-
3.
|
|
19
|
+
1. Read `.tas/rules/ado-integration.md` for ADO operating rules (Always/Ask/Never, Red Flags).
|
|
20
|
+
2. Read `tas.yaml`, check `ado.enabled`. If `false` or missing: report "ADO integration is disabled (`ado.enabled: false` in tas.yaml)." then stop.
|
|
21
|
+
3. Run: python .tas/tools/tas-ado.py update-<type> <ado-id> [--assign ...] [--status ...]
|
|
22
|
+
4. Script will:
|
|
22
23
|
- Find local file by pattern *-<ado-id>-*.md
|
|
23
24
|
- Read title and description from file
|
|
24
25
|
- Update work item on ADO
|
|
25
26
|
- Update frontmatter: ado_state, ado_assigned_to, last_ado_sync
|
|
26
|
-
|
|
27
|
+
5. If no --assign and --status provided, push entire file content to ADO
|
|
@@ -12,14 +12,14 @@ Create or update Architecture Decision Record.
|
|
|
12
12
|
4. Determine next sequence number (ADR-001, ADR-002...)
|
|
13
13
|
5. If docs/sad.md exists, need context from SAD to ensure ADR consistency
|
|
14
14
|
6. Create file docs/adr/ADR-{NNN}-{slug}.md
|
|
15
|
-
7. Update `project-status.yaml` per `.
|
|
15
|
+
7. Update `project-status.yaml` per `.tas/rules/common/project-status.md` — add entry to `adrs`.
|
|
16
16
|
|
|
17
17
|
### UPDATE mode ($ARGUMENTS is ADR ID, e.g., "ADR-001"):
|
|
18
18
|
4. Need context from current ADR file
|
|
19
19
|
5. Ask user what needs changing (update status, add consequences, supersede...)
|
|
20
20
|
6. Update file, add changelog
|
|
21
21
|
7. If supersede: update old ADR status to "Superseded by ADR-{NNN}"
|
|
22
|
-
8. Update `project-status.yaml` per `.
|
|
22
|
+
8. Update `project-status.yaml` per `.tas/rules/common/project-status.md` — update `adrs.{ADR_ID}.status`.
|
|
23
23
|
|
|
24
24
|
## Principles
|
|
25
25
|
- ADR must have: Context, Decision, Rationale, Consequences, Alternatives Considered
|
|
@@ -30,4 +30,4 @@ Create or update Architecture Decision Record.
|
|
|
30
30
|
|
|
31
31
|
## Final Step — Token Log
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
Follow `.tas/rules/common/token-logging.md`: write AI Usage Log to working ADR file.
|
|
@@ -11,7 +11,7 @@ Generate API Test Specification (Markdown) from API Spec (OpenAPI 3.0, Markdown,
|
|
|
11
11
|
| **Always** | Organize test cases by API version — each version separate section |
|
|
12
12
|
| **Always** | Append-only: don't modify sections in existing old version |
|
|
13
13
|
| **Always** | Coverage matrix: each endpoint needs ≥1 happy path + ≥1 error path |
|
|
14
|
-
| **Always** | Read `.
|
|
14
|
+
| **Always** | Read `.tas/rules/csharp/api-testing.md` for conventions |
|
|
15
15
|
| **Ask** | When spec unclear about expected response schema or business rule |
|
|
16
16
|
| **Never** | Use version folder/syntax in test spec file (use section headers instead) |
|
|
17
17
|
| **Never** | Skip error path — each endpoint needs cover validation errors |
|
|
@@ -170,4 +170,4 @@ Display:
|
|
|
170
170
|
|
|
171
171
|
## Final Step — Token Log
|
|
172
172
|
|
|
173
|
-
|
|
173
|
+
Follow `.tas/rules/common/token-logging.md`: write AI Usage Log to test spec file.
|
|
@@ -30,7 +30,7 @@ Enter path to API Test Spec file (e.g., docs/tests/API-Test-Spec-users.md)
|
|
|
30
30
|
|
|
31
31
|
### Step 2 — Parse API Test Spec
|
|
32
32
|
|
|
33
|
-
Read `.
|
|
33
|
+
Read `.tas/rules/csharp/api-testing.md` for conventions before generating.
|
|
34
34
|
|
|
35
35
|
From API Test Spec file, collect:
|
|
36
36
|
- API version
|
|
@@ -56,7 +56,7 @@ Version folder: lowercase, no dot — `v1`, `v2` (not `v1.0`).
|
|
|
56
56
|
|
|
57
57
|
### Step 5 — Generate Infrastructure (only when creating new project)
|
|
58
58
|
|
|
59
|
-
Read `.
|
|
59
|
+
Read `.tas/rules/csharp/api-testing.md` section **Project Structure** and **Config Pattern** to generate:
|
|
60
60
|
- `ApiTests.csproj` with standard packages
|
|
61
61
|
- `appsettings.json` (base) + `appsettings.Test.json` + `appsettings.Staging.json` with values from spec
|
|
62
62
|
- `Shared/TestBase.cs` — load config, HttpClient, helper methods
|
|
@@ -102,7 +102,7 @@ If spec has `test-data.{env}.json` references:
|
|
|
102
102
|
### Step 9 — Post-Generate Review
|
|
103
103
|
|
|
104
104
|
Launch `csharp-reviewer` agent:
|
|
105
|
-
> Review `tests/ApiTests/{version}/`. Read `.
|
|
105
|
+
> Review `tests/ApiTests/{version}/`. Read `.tas/rules/csharp/testing.md` + `.tas/rules/csharp/api-testing.md`.
|
|
106
106
|
> Focus: async/await, HttpClient disposal, assertion completeness, XML doc coverage.
|
|
107
107
|
> Format: Critical / High / Medium / Low with file:line.
|
|
108
108
|
|
|
@@ -140,4 +140,4 @@ Display:
|
|
|
140
140
|
|
|
141
141
|
## Final Step — Token Log
|
|
142
142
|
|
|
143
|
-
|
|
143
|
+
Follow `.tas/rules/common/token-logging.md`: write AI Usage Log to API Test Spec file.
|
|
@@ -16,7 +16,7 @@ Bug status determines next step — no role declaration needed.
|
|
|
16
16
|
| **Never** | Auto-commit or push — wait for user manual testing first |
|
|
17
17
|
|
|
18
18
|
## Stack Detection
|
|
19
|
-
Read `.
|
|
19
|
+
Read `.tas/rules/common/stack-detection.md`.
|
|
20
20
|
|
|
21
21
|
## Actions
|
|
22
22
|
|
|
@@ -68,9 +68,9 @@ Find Bug file via glob `docs/bugs/*-Bug-{ID}-*.md`, read current status.
|
|
|
68
68
|
If additional files needed → ask user confirmation first.
|
|
69
69
|
|
|
70
70
|
Before fixing, read:
|
|
71
|
-
- `.
|
|
72
|
-
- `.
|
|
73
|
-
- `.
|
|
71
|
+
- `.tas/rules/common/security.md` — fix must not create new security risks
|
|
72
|
+
- `.tas/rules/common/testing.md` — regression test writing patterns
|
|
73
|
+
- `.tas/rules/[lang_agent stack]/coding-style.md` — follow conventions
|
|
74
74
|
|
|
75
75
|
**Fix workflow:**
|
|
76
76
|
a. Run regression test case → confirm **FAIL** (reproduces bug)
|
|
@@ -81,7 +81,7 @@ d. Run full test suite → no new regressions
|
|
|
81
81
|
|
|
82
82
|
**After fix — Post-Fix Review (Isolated Agent):**
|
|
83
83
|
|
|
84
|
-
Follow `.
|
|
84
|
+
Follow `.tas/rules/common/post-implementation-review.md`.
|
|
85
85
|
Pass in: Bug file path, changed files list, stack (from CLAUDE.md), lang_agent.
|
|
86
86
|
|
|
87
87
|
After review passes:
|
|
@@ -110,4 +110,4 @@ After review passes:
|
|
|
110
110
|
|
|
111
111
|
## Final Step — Token Log
|
|
112
112
|
|
|
113
|
-
|
|
113
|
+
Follow `.tas/rules/common/token-logging.md`: write AI Usage Log to working Bug file.
|
|
@@ -19,13 +19,13 @@ Create or update Design Specification document (UI/UX flows, wireframe descripti
|
|
|
19
19
|
- Navigation structure
|
|
20
20
|
- Interaction patterns
|
|
21
21
|
- Responsive behavior notes
|
|
22
|
-
6. Update `project-status.yaml` per `.
|
|
22
|
+
6. Update `project-status.yaml` per `.tas/rules/common/project-status.md` — add `artifacts.design_spec`.
|
|
23
23
|
|
|
24
24
|
### UPDATE mode (file exists):
|
|
25
25
|
3. Need context from current docs/design-spec.md
|
|
26
26
|
4. $ARGUMENTS is change description. If not provided, ask user which section to update.
|
|
27
27
|
5. Update file, add changelog
|
|
28
|
-
6. Update `project-status.yaml` per `.
|
|
28
|
+
6. Update `project-status.yaml` per `.tas/rules/common/project-status.md` — update `artifacts.design_spec`.
|
|
29
29
|
|
|
30
30
|
## Principles
|
|
31
31
|
- Focus on flows and behavior, not pixel-perfect design
|
|
@@ -34,4 +34,4 @@ Create or update Design Specification document (UI/UX flows, wireframe descripti
|
|
|
34
34
|
|
|
35
35
|
## Final Step — Token Log
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
Follow `.tas/rules/common/token-logging.md`: write AI Usage Log to `docs/design-spec.md`.
|
|
@@ -19,10 +19,10 @@ Implement a User Story per approved Technical Plan.
|
|
|
19
19
|
- ONLY read Story file — Technical Plan has enough technical context.
|
|
20
20
|
- Don't auto-read PRD, SAD, ADR, Design-Spec unless user confirms.
|
|
21
21
|
- Don't list directories, don't scan project structure.
|
|
22
|
-
- Don't read `.tas/
|
|
22
|
+
- Don't read `.tas/rules/common/story-done.md` at first step (only at final step).
|
|
23
23
|
|
|
24
24
|
## Stack Detection
|
|
25
|
-
Read `.
|
|
25
|
+
Read `.tas/rules/common/stack-detection.md`.
|
|
26
26
|
|
|
27
27
|
## Actions
|
|
28
28
|
|
|
@@ -57,19 +57,16 @@ If no Technical Plan (quick mode) → analyze AC and implement directly per AC.
|
|
|
57
57
|
|
|
58
58
|
### Step 3 — Implement
|
|
59
59
|
|
|
60
|
-
**If stack is Node.js/Express/Next.js** →
|
|
61
|
-
repository pattern, service layer, N+1 prevention, caching, error handling before coding.
|
|
60
|
+
**If stack is Node.js/Express/Next.js** → Read `.tas/rules/typescript/patterns.md` and `.tas/rules/typescript/security.md` for repository pattern, N+1 prevention, error handler, caching, JWT/RBAC before coding.
|
|
62
61
|
|
|
63
62
|
#### If `use_tdd = true` in `tas.yaml`:
|
|
64
|
-
a. **Red phase** — Write test cases FIRST per AC in Story. Run tests, confirm FAIL.
|
|
65
63
|
|
|
66
|
-
|
|
67
|
-
- **Mobile (React Native)**: Jest + React Testing Library — Components (`render`, `fireEvent`, `screen`), Hooks (`renderHook`), Services/API (Jest mocks + MSW), Utils, Zustand stores. File: `src/**/*.test.ts(x)`
|
|
68
|
-
- **Web (React + Node)**: Vitest/Jest + React Testing Library — Components, Hooks, Services (MSW/Nock), Backend services (Jest). File: `src/**/*.test.ts(x)`
|
|
69
|
-
- **Backend (.NET)**: xUnit — Unit (services, repositories), Integration (TestServer), API (WebApplicationFactory). File: `tests/Unit/`, `tests/Integration/`, `tests/Api/`
|
|
64
|
+
Read `.tas/rules/common/tdd.md` for Red-Green-Refactor discipline + Test Naming Convention.
|
|
70
65
|
|
|
71
|
-
|
|
72
|
-
|
|
66
|
+
Platform-specific test stacks (from stack detection):
|
|
67
|
+
- **Mobile (React Native)**: Jest + React Testing Library — Components (`render`, `fireEvent`, `screen`), Hooks (`renderHook`), Services/API (Jest mocks + MSW), Utils, Zustand stores. File: `src/**/*.test.ts(x)`
|
|
68
|
+
- **Web (React + Node)**: Vitest/Jest + React Testing Library — Components, Hooks, Services (MSW/Nock), Backend services (Jest). File: `src/**/*.test.ts(x)`
|
|
69
|
+
- **Backend (.NET)**: xUnit — Unit (services, repositories), Integration (TestServer), API (WebApplicationFactory). File: `tests/Unit/`, `tests/Integration/`, `tests/Api/`
|
|
73
70
|
|
|
74
71
|
#### If `use_tdd = false`:
|
|
75
72
|
a. Implement code per AC + Tasks in Technical Plan
|
|
@@ -83,12 +80,12 @@ If discover plan needs significant changes → notify user before changing direc
|
|
|
83
80
|
|
|
84
81
|
### Step 4 — Post-Implementation Review (Isolated Agent)
|
|
85
82
|
|
|
86
|
-
Follow `.
|
|
83
|
+
Follow `.tas/rules/common/post-implementation-review.md`.
|
|
87
84
|
Pass in: Story file path, changed files list, stack (from CLAUDE.md), lang_agent.
|
|
88
85
|
|
|
89
86
|
### Step 5 — Definition of Done
|
|
90
87
|
|
|
91
|
-
Read `.tas/
|
|
88
|
+
Read `.tas/rules/common/story-done.md`, verify each item, tick in Story:
|
|
92
89
|
- `- [x] Technical plan completed` — if plan_status: completed (or quick mode confirmed)
|
|
93
90
|
- `- [x] Code implemented` — if implementation done
|
|
94
91
|
- `- [x] Unit tests pass` — if tests passed
|
|
@@ -125,4 +122,4 @@ If Yes:
|
|
|
125
122
|
|
|
126
123
|
## Final Step — Token Log
|
|
127
124
|
|
|
128
|
-
|
|
125
|
+
Follow `.tas/rules/common/token-logging.md`: write AI Usage Log to working Story file.
|
|
@@ -16,14 +16,14 @@ Create or update Epic document.
|
|
|
16
16
|
5. Read project.code from root/tas.yaml. Scan docs/epics/ to determine sequence number.
|
|
17
17
|
6. Create directory docs/epics/{code}-Epic-{NNN}-{slug}/
|
|
18
18
|
7. Create file docs/epics/{code}-Epic-{NNN}-{slug}/{code}-Epic-{NNN}-{slug}.md
|
|
19
|
-
8. Update `project-status.yaml` per `.
|
|
19
|
+
8. Update `project-status.yaml` per `.tas/rules/common/project-status.md` — add entry to `epics`.
|
|
20
20
|
|
|
21
21
|
### UPDATE mode ($ARGUMENTS is Epic ID, e.g., "Epic-001"):
|
|
22
22
|
4. Find directory docs/epics/{code}-Epic-001-*/
|
|
23
23
|
5. Need context from current Epic file
|
|
24
24
|
6. Ask user what needs changing (update scope, add feature, change status...)
|
|
25
25
|
7. Update file, add changelog
|
|
26
|
-
8. Update `project-status.yaml` per `.
|
|
26
|
+
8. Update `project-status.yaml` per `.tas/rules/common/project-status.md` — update `epics.{EPIC_ID}.status`.
|
|
27
27
|
|
|
28
28
|
## Principles
|
|
29
29
|
- Each Epic maps to one business capability in PRD
|
|
@@ -32,4 +32,4 @@ Create or update Epic document.
|
|
|
32
32
|
|
|
33
33
|
## Final Step — Token Log
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
Follow `.tas/rules/common/token-logging.md`: write AI Usage Log to working Epic file.
|
|
@@ -26,15 +26,15 @@ Create or update Feature document, including Integration Test and E2E/Acceptance
|
|
|
26
26
|
- "What's the main user scenario to verify this feature on Staging?"
|
|
27
27
|
- "Any scenarios needing real or near-real data testing?"
|
|
28
28
|
- "Which acceptance criteria need manual PE verification?"
|
|
29
|
-
Write to E2E Test Cases section. This is the checklist PE uses in Phase 2 when running /tas-
|
|
30
|
-
9. Update `project-status.yaml` per `.
|
|
29
|
+
Write to E2E Test Cases section. This is the checklist PE uses in Phase 2 when running /tas-functest + /tas-e2e.
|
|
30
|
+
9. Update `project-status.yaml` per `.tas/rules/common/project-status.md` — add entry to `epics.{EPIC_ID}.features`.
|
|
31
31
|
|
|
32
32
|
### UPDATE mode ($ARGUMENTS is Feature ID, e.g., "Feature-003"):
|
|
33
33
|
4. Find Feature file in docs/epics/ tree (using glob)
|
|
34
34
|
5. Need context from current Feature file
|
|
35
35
|
6. Ask user what needs changing (add story, update AC, add test cases, change status...)
|
|
36
36
|
7. Update file, add changelog
|
|
37
|
-
8. Update `project-status.yaml` per `.
|
|
37
|
+
8. Update `project-status.yaml` per `.tas/rules/common/project-status.md` — update `epics.{EPIC_ID}.features.{FEATURE_ID}.status`.
|
|
38
38
|
|
|
39
39
|
## Principles
|
|
40
40
|
- Feature is a specific function that can be demoed
|
|
@@ -44,4 +44,4 @@ Create or update Feature document, including Integration Test and E2E/Acceptance
|
|
|
44
44
|
|
|
45
45
|
## Final Step — Token Log
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
Follow `.tas/rules/common/token-logging.md`: write AI Usage Log to working Feature file.
|
|
@@ -6,7 +6,7 @@ Use when: solo dev, quick hotfix, bug found during development.
|
|
|
6
6
|
Differs from /tas-bug: no Bug file created, no status tracking, no deploy flow.
|
|
7
7
|
|
|
8
8
|
## Stack Detection
|
|
9
|
-
Read `.
|
|
9
|
+
Read `.tas/rules/common/stack-detection.md`.
|
|
10
10
|
|
|
11
11
|
## Actions
|
|
12
12
|
|
|
@@ -25,9 +25,9 @@ $ARGUMENTS is error description, error message, or file:line_number.
|
|
|
25
25
|
### 3. Fix with regression test
|
|
26
26
|
|
|
27
27
|
Before fixing, read relevant rules:
|
|
28
|
-
- `.
|
|
29
|
-
- `.
|
|
30
|
-
- `.
|
|
28
|
+
- `.tas/rules/common/security.md` — check if fix creates security risks
|
|
29
|
+
- `.tas/rules/common/testing.md` — regression test writing patterns
|
|
30
|
+
- `.tas/rules/[lang_rules]/coding-style.md` — current stack conventions (if identifiable)
|
|
31
31
|
|
|
32
32
|
Then:
|
|
33
33
|
a. Write 1 minimal test case reproducing bug (if project has test framework)
|
|
@@ -48,4 +48,4 @@ e. Quick run of test suite if available (to check regression)
|
|
|
48
48
|
|
|
49
49
|
## Final Step — Token Log
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
Follow `.tas/rules/common/token-logging.md`: write AI Usage Log to related Story or Bug file (if any).
|
|
@@ -4,7 +4,7 @@ Initialize TAS kit for the current project.
|
|
|
4
4
|
|
|
5
5
|
## Actions
|
|
6
6
|
1. Need context from root/tas.yaml. If not exists, copy from .tas/tas-example.yaml to root and ask user to fill required information.
|
|
7
|
-
2. Create directory structure: .tas/templates/,
|
|
7
|
+
2. Create directory structure: .tas/templates/, docs/, docs/adr/, docs/epics/, docs/bugs/, docs/ref/
|
|
8
8
|
3. Create root/project-status.yaml file with initial state (artifacts, epics, adrs all empty).
|
|
9
9
|
4. Copy default templates to .tas/templates/ if not exist.
|
|
10
10
|
5. If project type is brownfield and codebase_scan_on_init = true:
|