@torus-engineering/tas-kit 1.11.1 → 1.12.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.
Files changed (123) hide show
  1. package/.tas/README.md +334 -334
  2. package/{.claude → .tas/_platform/claude-code}/settings.json +0 -12
  3. package/{.claude → .tas/_platform}/hooks/code-quality.js +1 -1
  4. package/{.claude → .tas/_platform}/hooks/session-end.js +20 -25
  5. package/{.claude → .tas}/commands/ado-create.md +5 -4
  6. package/{.claude → .tas}/commands/ado-delete.md +5 -4
  7. package/{.claude → .tas}/commands/ado-update.md +5 -4
  8. package/{.claude → .tas}/commands/tas-adr.md +3 -3
  9. package/{.claude → .tas}/commands/tas-apitest-plan.md +2 -2
  10. package/{.claude → .tas}/commands/tas-apitest.md +4 -4
  11. package/{.claude → .tas}/commands/tas-bug.md +6 -6
  12. package/{.claude → .tas}/commands/tas-design.md +3 -3
  13. package/{.claude → .tas}/commands/tas-dev.md +11 -14
  14. package/{.claude → .tas}/commands/tas-epic.md +3 -3
  15. package/{.claude → .tas}/commands/tas-feature.md +4 -4
  16. package/{.claude → .tas}/commands/tas-fix.md +5 -5
  17. package/{.claude → .tas}/commands/tas-init.md +1 -1
  18. package/{.claude → .tas}/commands/tas-plan.md +198 -198
  19. package/{.claude → .tas}/commands/tas-prd.md +3 -3
  20. package/{.claude → .tas}/commands/tas-review.md +17 -15
  21. package/{.claude → .tas}/commands/tas-sad.md +3 -3
  22. package/{.claude → .tas}/commands/tas-security.md +4 -4
  23. package/{.claude → .tas}/commands/tas-story.md +3 -3
  24. package/.tas/platforms.json +5 -0
  25. package/.tas/project-status-example.yaml +17 -17
  26. package/{.claude/skills/ado-integration/SKILL.md → .tas/rules/ado-integration.md} +5 -15
  27. package/{.claude/skills/api-design/SKILL.md → .tas/rules/common/api-design.md} +517 -530
  28. package/{.claude → .tas}/rules/common/code-review.md +30 -6
  29. package/{.claude/rules/common/post-review-agent.md → .tas/rules/common/post-implementation-review.md} +51 -49
  30. package/{.claude → .tas}/rules/common/project-status.md +80 -80
  31. package/{.claude → .tas}/rules/common/stack-detection.md +29 -29
  32. package/.tas/{checklists → rules/common}/story-done.md +12 -5
  33. package/{.claude/skills/tas-tdd/SKILL.md → .tas/rules/common/tdd.md} +4 -38
  34. package/{.claude → .tas}/rules/common/testing.md +3 -8
  35. package/{.claude → .tas}/rules/common/token-logging.md +36 -27
  36. package/{.claude → .tas}/rules/csharp/api-testing.md +171 -171
  37. package/{.claude → .tas}/rules/csharp/coding-style.md +0 -2
  38. package/{.claude → .tas}/rules/csharp/security.md +10 -0
  39. package/{.claude → .tas}/rules/python/coding-style.md +0 -2
  40. package/{.claude → .tas}/rules/typescript/coding-style.md +0 -2
  41. package/.tas/rules/typescript/patterns.md +142 -0
  42. package/.tas/rules/typescript/security.md +88 -0
  43. package/{.claude → .tas}/rules/typescript/testing.md +0 -4
  44. package/{.claude → .tas}/rules/web/coding-style.md +0 -2
  45. package/.tas/tas-example.yaml +125 -126
  46. package/.tas/templates/ADR.md +47 -47
  47. package/.tas/templates/Bug.md +67 -67
  48. package/.tas/templates/Design-Spec.md +36 -36
  49. package/.tas/templates/Epic.md +46 -46
  50. package/.tas/templates/Feature.md +1 -1
  51. package/.tas/templates/Security-Report.md +27 -27
  52. package/.tas/tools/tas-ado-readme.md +169 -169
  53. package/.tas/tools/tas-ado.py +621 -621
  54. package/README.md +334 -334
  55. package/bin/cli.js +91 -73
  56. package/lib/adapters/antigravity.js +137 -0
  57. package/lib/adapters/claude-code.js +35 -0
  58. package/lib/adapters/codex.js +163 -0
  59. package/lib/adapters/cursor.js +80 -0
  60. package/lib/adapters/index.js +20 -0
  61. package/lib/adapters/utils.js +81 -0
  62. package/lib/deleted-files.json +99 -0
  63. package/lib/install.js +403 -327
  64. package/package.json +4 -3
  65. package/.claude/agents/code-reviewer.md +0 -41
  66. package/.claude/agents/e2e-runner.md +0 -61
  67. package/.claude/agents/planner.md +0 -82
  68. package/.claude/agents/tdd-guide.md +0 -84
  69. package/.claude/commands/tas-verify.md +0 -51
  70. package/.claude/rules/typescript/patterns.md +0 -62
  71. package/.claude/rules/typescript/security.md +0 -28
  72. package/.claude/settings.local.json +0 -38
  73. package/.claude/skills/ai-regression-testing/SKILL.md +0 -364
  74. package/.claude/skills/architecture-decision-records/SKILL.md +0 -184
  75. package/.claude/skills/benchmark/SKILL.md +0 -98
  76. package/.claude/skills/browser-qa/SKILL.md +0 -92
  77. package/.claude/skills/canary-watch/SKILL.md +0 -104
  78. package/.claude/skills/js-backend-patterns/SKILL.md +0 -603
  79. package/.claude/skills/tas-conventions/SKILL.md +0 -65
  80. package/.claude/skills/tas-implementation-complete/SKILL.md +0 -100
  81. package/.claude/skills/token-logger/SKILL.md +0 -19
  82. package/.tas/checklists/code-review.md +0 -29
  83. package/.tas/checklists/security.md +0 -21
  84. /package/{.claude → .tas}/agents/architect.md +0 -0
  85. /package/{.claude → .tas}/agents/aws-reviewer.md +0 -0
  86. /package/{.claude → .tas}/agents/build-resolver.md +0 -0
  87. /package/{.claude → .tas}/agents/code-explorer.md +0 -0
  88. /package/{.claude → .tas}/agents/csharp-reviewer.md +0 -0
  89. /package/{.claude → .tas}/agents/database-reviewer.md +0 -0
  90. /package/{.claude → .tas}/agents/doc-updater.md +0 -0
  91. /package/{.claude → .tas}/agents/python-reviewer.md +0 -0
  92. /package/{.claude → .tas}/agents/security-reviewer.md +0 -0
  93. /package/{.claude → .tas}/agents/typescript-reviewer.md +0 -0
  94. /package/{.claude → .tas}/commands/ado-get.md +0 -0
  95. /package/{.claude → .tas}/commands/ado-status.md +0 -0
  96. /package/{.claude → .tas}/commands/tas-brainstorm.md +0 -0
  97. /package/{.claude → .tas}/commands/tas-e2e-mobile.md +0 -0
  98. /package/{.claude → .tas}/commands/tas-e2e-web.md +0 -0
  99. /package/{.claude → .tas}/commands/tas-e2e.md +0 -0
  100. /package/{.claude → .tas}/commands/tas-functest-mobile.md +0 -0
  101. /package/{.claude → .tas}/commands/tas-functest-web.md +0 -0
  102. /package/{.claude → .tas}/commands/tas-functest.md +0 -0
  103. /package/{.claude → .tas}/commands/tas-spec.md +0 -0
  104. /package/{.claude → .tas}/commands/tas-status.md +0 -0
  105. /package/{.claude → .tas}/rules/.gitkeep +0 -0
  106. /package/{.claude → .tas}/rules/common/hooks.md +0 -0
  107. /package/{.claude → .tas}/rules/common/patterns.md +0 -0
  108. /package/{.claude → .tas}/rules/common/security.md +0 -0
  109. /package/{.claude → .tas}/rules/csharp/hooks.md +0 -0
  110. /package/{.claude → .tas}/rules/csharp/patterns.md +0 -0
  111. /package/{.claude → .tas}/rules/csharp/testing.md +0 -0
  112. /package/{.claude → .tas}/rules/python/hooks.md +0 -0
  113. /package/{.claude → .tas}/rules/python/patterns.md +0 -0
  114. /package/{.claude → .tas}/rules/python/security.md +0 -0
  115. /package/{.claude → .tas}/rules/python/testing.md +0 -0
  116. /package/{.claude → .tas}/rules/typescript/hooks.md +0 -0
  117. /package/{.claude → .tas}/rules/web/design-quality.md +0 -0
  118. /package/{.claude → .tas}/rules/web/hooks.md +0 -0
  119. /package/{.claude → .tas}/rules/web/patterns.md +0 -0
  120. /package/{.claude → .tas}/rules/web/performance.md +0 -0
  121. /package/{.claude → .tas}/rules/web/security.md +0 -0
  122. /package/{.claude → .tas}/rules/web/testing.md +0 -0
  123. /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",
@@ -22,7 +22,7 @@ const { execSync } = require('child_process');
22
22
  // --- Read hook input ---
23
23
  let input;
24
24
  try {
25
- const raw = fs.readFileSync('/dev/stdin', 'utf8');
25
+ const raw = fs.readFileSync(0, 'utf8');
26
26
  input = JSON.parse(raw);
27
27
  } catch {
28
28
  process.exit(0);
@@ -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 -- --passWithNoTests 2>&1', cwd);
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
- const csprojFiles = (() => {
60
- try {
61
- return fs.readdirSync(cwd).filter(f => f.endsWith('.csproj') || f.endsWith('.sln'));
62
- } catch { return []; }
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 `tas.yaml`, check `ado.enabled`. If `false` or missing: report "ADO integration is disabled (`ado.enabled: false` in tas.yaml)." then stop.
19
- 2. Run: python .tas/tools/tas-ado.py create-<type> <temp-id> [--parent-id <id>]
20
- 3. Script will:
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
- 4. Update root/project-status.yaml
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 `tas.yaml`, check `ado.enabled`. If `false` or missing: report "ADO integration is disabled (`ado.enabled: false` in tas.yaml)." then stop.
16
- 2. MUST ask user confirmation before deleting: "Are you sure you want to delete <type> #<ado-id> on ADO?"
17
- 3. After user confirms, run: python .tas/tools/tas-ado.py delete-<type> <ado-id>
18
- 4. Script will:
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 `tas.yaml`, check `ado.enabled`. If `false` or missing: report "ADO integration is disabled (`ado.enabled: false` in tas.yaml)." then stop.
20
- 2. Run: python .tas/tools/tas-ado.py update-<type> <ado-id> [--assign ...] [--status ...]
21
- 3. Script will:
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
- 4. If no --assign and --status provided, push entire file content to ADO
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 `.claude/rules/common/project-status.md` — add entry to `adrs`.
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 `.claude/rules/common/project-status.md` — update `adrs.{ADR_ID}.status`.
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
- Invoke skill `token-logger`: write AI Usage Log to working ADR file.
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 `.claude/rules/csharp/api-testing.md` for conventions |
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
- Invoke skill `token-logger`: write AI Usage Log to test spec file.
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 `.claude/rules/csharp/api-testing.md` for conventions before generating.
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 `.claude/rules/csharp/api-testing.md` section **Project Structure** and **Config Pattern** to generate:
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 `.claude/rules/csharp/testing.md` + `.claude/rules/csharp/api-testing.md`.
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
- Invoke skill `token-logger`: write AI Usage Log to API Test Spec file.
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 `.claude/rules/common/stack-detection.md`.
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
- - `.claude/rules/common/security.md` — fix must not create new security risks
72
- - `.claude/rules/common/testing.md` — regression test writing patterns
73
- - `.claude/rules/[lang_agent stack]/coding-style.md` — follow conventions
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 `.claude/rules/common/post-review-agent.md`.
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
- Invoke skill `token-logger`: write AI Usage Log to working Bug file.
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 `.claude/rules/common/project-status.md` — add `artifacts.design_spec`.
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 `.claude/rules/common/project-status.md` — update `artifacts.design_spec`.
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
- Invoke skill `token-logger`: write AI Usage Log to `docs/design-spec.md`.
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/checklists/story-done.md` at first step (only at final step).
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 `.claude/rules/common/stack-detection.md`.
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** → invoke skill `js-backend-patterns` to reference
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
- Platform-specific (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/`
64
+ Read `.tas/rules/common/tdd.md` for Red-Green-Refactor discipline + Test Naming Convention.
70
65
 
71
- b. **Green phase** Write minimal code to pass tests.
72
- c. **Refactor**Clean up, ensure tests still pass.
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 `.claude/rules/common/post-review-agent.md`.
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/checklists/story-done.md`, verify each item, tick in Story:
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
- Invoke skill `token-logger`: write AI Usage Log to working Story file.
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 `.claude/rules/common/project-status.md` — add entry to `epics`.
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 `.claude/rules/common/project-status.md` — update `epics.{EPIC_ID}.status`.
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
- Invoke skill `token-logger`: write AI Usage Log to working Epic file.
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-verify.
30
- 9. Update `project-status.yaml` per `.claude/rules/common/project-status.md` — add entry to `epics.{EPIC_ID}.features`.
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 `.claude/rules/common/project-status.md` — update `epics.{EPIC_ID}.features.{FEATURE_ID}.status`.
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
- Invoke skill `token-logger`: write AI Usage Log to working Feature file.
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 `.claude/rules/common/stack-detection.md`.
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
- - `.claude/rules/common/security.md` — check if fix creates security risks
29
- - `.claude/rules/common/testing.md` — regression test writing patterns
30
- - `.claude/rules/[lang_rules]/coding-style.md` — current stack conventions (if identifiable)
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
- Invoke skill `token-logger`: write AI Usage Log to related Story or Bug file (if any).
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/, .tas/checklists/, docs/, docs/adr/, docs/epics/, docs/bugs/
7
+ 2. Create directory structure: .tas/templates/, docs/, docs/adr/, docs/epics/, docs/bugs/
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: