opencastle 0.6.0 → 0.8.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 (223) hide show
  1. package/README.md +8 -7
  2. package/dist/cli/adapters/claude-code.d.ts.map +1 -1
  3. package/dist/cli/adapters/claude-code.js +30 -3
  4. package/dist/cli/adapters/claude-code.js.map +1 -1
  5. package/dist/cli/adapters/cursor.d.ts.map +1 -1
  6. package/dist/cli/adapters/cursor.js +27 -3
  7. package/dist/cli/adapters/cursor.js.map +1 -1
  8. package/dist/cli/adapters/opencode.d.ts +20 -0
  9. package/dist/cli/adapters/opencode.d.ts.map +1 -0
  10. package/dist/cli/adapters/opencode.js +265 -0
  11. package/dist/cli/adapters/opencode.js.map +1 -0
  12. package/dist/cli/adapters/vscode.d.ts.map +1 -1
  13. package/dist/cli/adapters/vscode.js +37 -6
  14. package/dist/cli/adapters/vscode.js.map +1 -1
  15. package/dist/cli/copy.d.ts +12 -0
  16. package/dist/cli/copy.d.ts.map +1 -1
  17. package/dist/cli/copy.js +27 -0
  18. package/dist/cli/copy.js.map +1 -1
  19. package/dist/cli/detect.d.ts +1 -1
  20. package/dist/cli/detect.js +21 -15
  21. package/dist/cli/detect.js.map +1 -1
  22. package/dist/cli/init.d.ts.map +1 -1
  23. package/dist/cli/init.js +143 -94
  24. package/dist/cli/init.js.map +1 -1
  25. package/dist/cli/manifest.d.ts +1 -1
  26. package/dist/cli/manifest.d.ts.map +1 -1
  27. package/dist/cli/manifest.js +2 -1
  28. package/dist/cli/manifest.js.map +1 -1
  29. package/dist/cli/mcp.d.ts +6 -6
  30. package/dist/cli/mcp.d.ts.map +1 -1
  31. package/dist/cli/mcp.js +104 -33
  32. package/dist/cli/mcp.js.map +1 -1
  33. package/dist/cli/prompt.d.ts +19 -0
  34. package/dist/cli/prompt.d.ts.map +1 -1
  35. package/dist/cli/prompt.js +143 -0
  36. package/dist/cli/prompt.js.map +1 -1
  37. package/dist/cli/stack-config.d.ts +23 -0
  38. package/dist/cli/stack-config.d.ts.map +1 -1
  39. package/dist/cli/stack-config.js +128 -124
  40. package/dist/cli/stack-config.js.map +1 -1
  41. package/dist/cli/types.d.ts +26 -9
  42. package/dist/cli/types.d.ts.map +1 -1
  43. package/dist/cli/types.js +26 -1
  44. package/dist/cli/types.js.map +1 -1
  45. package/dist/cli/update.d.ts.map +1 -1
  46. package/dist/cli/update.js +60 -19
  47. package/dist/cli/update.js.map +1 -1
  48. package/dist/orchestrator/plugins/chrome-devtools/config.d.ts +3 -0
  49. package/dist/orchestrator/plugins/chrome-devtools/config.d.ts.map +1 -0
  50. package/dist/orchestrator/plugins/chrome-devtools/config.js +28 -0
  51. package/dist/orchestrator/plugins/chrome-devtools/config.js.map +1 -0
  52. package/dist/orchestrator/plugins/contentful/config.d.ts +3 -0
  53. package/dist/orchestrator/plugins/contentful/config.d.ts.map +1 -0
  54. package/dist/orchestrator/plugins/contentful/config.js +48 -0
  55. package/dist/orchestrator/plugins/contentful/config.js.map +1 -0
  56. package/dist/orchestrator/plugins/convex/config.d.ts +3 -0
  57. package/dist/orchestrator/plugins/convex/config.d.ts.map +1 -0
  58. package/dist/orchestrator/plugins/convex/config.js +32 -0
  59. package/dist/orchestrator/plugins/convex/config.js.map +1 -0
  60. package/dist/orchestrator/plugins/index.d.ts +28 -0
  61. package/dist/orchestrator/plugins/index.d.ts.map +1 -0
  62. package/dist/orchestrator/plugins/index.js +63 -0
  63. package/dist/orchestrator/plugins/index.js.map +1 -0
  64. package/dist/orchestrator/plugins/jira/config.d.ts +3 -0
  65. package/dist/orchestrator/plugins/jira/config.d.ts.map +1 -0
  66. package/dist/orchestrator/plugins/jira/config.js +29 -0
  67. package/dist/orchestrator/plugins/jira/config.js.map +1 -0
  68. package/dist/orchestrator/plugins/linear/config.d.ts +3 -0
  69. package/dist/orchestrator/plugins/linear/config.d.ts.map +1 -0
  70. package/dist/orchestrator/plugins/linear/config.js +33 -0
  71. package/dist/orchestrator/plugins/linear/config.js.map +1 -0
  72. package/dist/orchestrator/plugins/nx/config.d.ts +3 -0
  73. package/dist/orchestrator/plugins/nx/config.d.ts.map +1 -0
  74. package/dist/orchestrator/plugins/nx/config.js +28 -0
  75. package/dist/orchestrator/plugins/nx/config.js.map +1 -0
  76. package/dist/orchestrator/plugins/sanity/config.d.ts +3 -0
  77. package/dist/orchestrator/plugins/sanity/config.d.ts.map +1 -0
  78. package/dist/orchestrator/plugins/sanity/config.js +43 -0
  79. package/dist/orchestrator/plugins/sanity/config.js.map +1 -0
  80. package/dist/orchestrator/plugins/slack/config.d.ts +3 -0
  81. package/dist/orchestrator/plugins/slack/config.d.ts.map +1 -0
  82. package/dist/orchestrator/plugins/slack/config.js +34 -0
  83. package/dist/orchestrator/plugins/slack/config.js.map +1 -0
  84. package/dist/orchestrator/plugins/strapi/config.d.ts +3 -0
  85. package/dist/orchestrator/plugins/strapi/config.d.ts.map +1 -0
  86. package/dist/orchestrator/plugins/strapi/config.js +40 -0
  87. package/dist/orchestrator/plugins/strapi/config.js.map +1 -0
  88. package/dist/orchestrator/plugins/supabase/config.d.ts +3 -0
  89. package/dist/orchestrator/plugins/supabase/config.d.ts.map +1 -0
  90. package/dist/orchestrator/plugins/supabase/config.js +33 -0
  91. package/dist/orchestrator/plugins/supabase/config.js.map +1 -0
  92. package/dist/orchestrator/plugins/teams/config.d.ts +3 -0
  93. package/dist/orchestrator/plugins/teams/config.d.ts.map +1 -0
  94. package/dist/orchestrator/plugins/teams/config.js +43 -0
  95. package/dist/orchestrator/plugins/teams/config.js.map +1 -0
  96. package/dist/orchestrator/plugins/types.d.ts +61 -0
  97. package/dist/orchestrator/plugins/types.d.ts.map +1 -0
  98. package/dist/orchestrator/plugins/types.js +2 -0
  99. package/dist/orchestrator/plugins/types.js.map +1 -0
  100. package/dist/orchestrator/plugins/vercel/config.d.ts +3 -0
  101. package/dist/orchestrator/plugins/vercel/config.d.ts.map +1 -0
  102. package/dist/orchestrator/plugins/vercel/config.js +32 -0
  103. package/dist/orchestrator/plugins/vercel/config.js.map +1 -0
  104. package/package.json +1 -1
  105. package/src/cli/adapters/claude-code.ts +36 -4
  106. package/src/cli/adapters/cursor.ts +42 -4
  107. package/src/cli/adapters/opencode.ts +320 -0
  108. package/src/cli/adapters/vscode.ts +40 -8
  109. package/src/cli/copy.ts +32 -0
  110. package/src/cli/detect.ts +17 -17
  111. package/src/cli/init.ts +157 -99
  112. package/src/cli/manifest.ts +2 -1
  113. package/src/cli/mcp.ts +129 -50
  114. package/src/cli/prompt.ts +176 -0
  115. package/src/cli/stack-config.ts +174 -145
  116. package/src/cli/types.ts +39 -8
  117. package/src/cli/update.ts +71 -20
  118. package/src/dashboard/node_modules/.vite/deps/_metadata.json +6 -6
  119. package/src/orchestrator/agent-workflows/README.md +1 -1
  120. package/src/orchestrator/agent-workflows/bug-fix.md +12 -12
  121. package/src/orchestrator/agent-workflows/data-pipeline.md +21 -20
  122. package/src/orchestrator/agent-workflows/database-migration.md +11 -11
  123. package/src/orchestrator/agent-workflows/feature-implementation.md +19 -12
  124. package/src/orchestrator/agent-workflows/performance-optimization.md +6 -6
  125. package/src/orchestrator/agent-workflows/refactoring.md +10 -10
  126. package/src/orchestrator/agent-workflows/schema-changes.md +8 -8
  127. package/src/orchestrator/agent-workflows/security-audit.md +12 -12
  128. package/src/orchestrator/agent-workflows/shared-delivery-phase.md +5 -5
  129. package/src/orchestrator/agents/api-designer.agent.md +1 -1
  130. package/src/orchestrator/agents/architect.agent.md +2 -2
  131. package/src/orchestrator/agents/content-engineer.agent.md +3 -3
  132. package/src/orchestrator/agents/copywriter.agent.md +2 -2
  133. package/src/orchestrator/agents/data-expert.agent.md +6 -6
  134. package/src/orchestrator/agents/database-engineer.agent.md +3 -3
  135. package/src/orchestrator/agents/developer.agent.md +4 -4
  136. package/src/orchestrator/agents/devops-expert.agent.md +5 -5
  137. package/src/orchestrator/agents/documentation-writer.agent.md +1 -1
  138. package/src/orchestrator/agents/performance-expert.agent.md +2 -2
  139. package/src/orchestrator/agents/release-manager.agent.md +4 -4
  140. package/src/orchestrator/agents/researcher.agent.md +3 -3
  141. package/src/orchestrator/agents/reviewer.agent.md +1 -1
  142. package/src/orchestrator/agents/security-expert.agent.md +4 -4
  143. package/src/orchestrator/agents/seo-specialist.agent.md +2 -2
  144. package/src/orchestrator/agents/team-lead.agent.md +56 -38
  145. package/src/orchestrator/agents/testing-expert.agent.md +5 -5
  146. package/src/orchestrator/agents/ui-ux-expert.agent.md +6 -6
  147. package/src/orchestrator/copilot-instructions.md +1 -1
  148. package/src/orchestrator/customizations/AGENT-FAILURES.md +1 -1
  149. package/src/orchestrator/customizations/AGENT-PERFORMANCE.md +12 -12
  150. package/src/orchestrator/customizations/DISPUTES.md +5 -5
  151. package/src/orchestrator/customizations/KNOWN-ISSUES.md +30 -0
  152. package/src/orchestrator/customizations/LESSONS-LEARNED.md +7 -7
  153. package/src/orchestrator/customizations/README.md +5 -2
  154. package/src/orchestrator/customizations/agents/agent-registry.md +1 -1
  155. package/src/orchestrator/customizations/agents/skill-matrix.md +12 -7
  156. package/src/orchestrator/customizations/logs/README.md +1 -1
  157. package/src/orchestrator/customizations/project/decisions.md +31 -0
  158. package/src/orchestrator/customizations/project/docs-structure.md +16 -5
  159. package/src/orchestrator/customizations/project/roadmap.md +24 -0
  160. package/src/orchestrator/customizations/project/tracker-config.md +1 -1
  161. package/src/orchestrator/customizations/stack/cms-config.md +1 -1
  162. package/src/orchestrator/customizations/stack/notifications-config.md +1 -1
  163. package/src/orchestrator/instructions/ai-optimization.instructions.md +2 -2
  164. package/src/orchestrator/instructions/general.instructions.md +102 -40
  165. package/src/orchestrator/{skills/browser-testing → plugins/chrome-devtools}/SKILL.md +1 -1
  166. package/src/orchestrator/plugins/chrome-devtools/config.ts +29 -0
  167. package/src/orchestrator/{skills/contentful-cms → plugins/contentful}/SKILL.md +1 -1
  168. package/src/orchestrator/plugins/contentful/config.ts +49 -0
  169. package/src/orchestrator/{skills/convex-database → plugins/convex}/SKILL.md +1 -1
  170. package/src/orchestrator/plugins/convex/config.ts +33 -0
  171. package/src/orchestrator/plugins/index.ts +85 -0
  172. package/src/orchestrator/{skills/jira-management → plugins/jira}/SKILL.md +3 -3
  173. package/src/orchestrator/plugins/jira/config.ts +30 -0
  174. package/src/orchestrator/{skills/task-management → plugins/linear}/SKILL.md +3 -3
  175. package/src/orchestrator/plugins/linear/config.ts +34 -0
  176. package/src/orchestrator/{skills/nx-workspace → plugins/nx}/SKILL.md +1 -1
  177. package/src/orchestrator/plugins/nx/config.ts +29 -0
  178. package/src/orchestrator/{skills/sanity-cms → plugins/sanity}/SKILL.md +1 -1
  179. package/src/orchestrator/plugins/sanity/config.ts +44 -0
  180. package/src/orchestrator/{skills/slack-notifications → plugins/slack}/SKILL.md +2 -2
  181. package/src/orchestrator/plugins/slack/config.ts +35 -0
  182. package/src/orchestrator/{skills/strapi-cms → plugins/strapi}/SKILL.md +1 -1
  183. package/src/orchestrator/plugins/strapi/config.ts +41 -0
  184. package/src/orchestrator/{skills/supabase-database → plugins/supabase}/SKILL.md +1 -1
  185. package/src/orchestrator/plugins/supabase/config.ts +34 -0
  186. package/src/orchestrator/{skills/teams-notifications → plugins/teams}/SKILL.md +2 -2
  187. package/src/orchestrator/plugins/teams/config.ts +44 -0
  188. package/src/orchestrator/plugins/types.ts +79 -0
  189. package/src/orchestrator/plugins/vercel/config.ts +33 -0
  190. package/src/orchestrator/prompts/bootstrap-customizations.prompt.md +8 -8
  191. package/src/orchestrator/prompts/brainstorm.prompt.md +3 -3
  192. package/src/orchestrator/prompts/bug-fix.prompt.md +27 -22
  193. package/src/orchestrator/prompts/create-skill.prompt.md +50 -32
  194. package/src/orchestrator/prompts/generate-task-spec.prompt.md +3 -3
  195. package/src/orchestrator/prompts/implement-feature.prompt.md +34 -29
  196. package/src/orchestrator/prompts/metrics-report.prompt.md +11 -11
  197. package/src/orchestrator/prompts/quick-refinement.prompt.md +23 -19
  198. package/src/orchestrator/prompts/resolve-pr-comments.prompt.md +19 -5
  199. package/src/orchestrator/skills/accessibility-standards/SKILL.md +1 -1
  200. package/src/orchestrator/skills/agent-hooks/SKILL.md +27 -18
  201. package/src/orchestrator/skills/agent-memory/SKILL.md +7 -7
  202. package/src/orchestrator/skills/api-patterns/SKILL.md +6 -6
  203. package/src/orchestrator/skills/code-commenting/SKILL.md +1 -1
  204. package/src/orchestrator/skills/context-map/SKILL.md +4 -4
  205. package/src/orchestrator/skills/data-engineering/SKILL.md +7 -4
  206. package/src/orchestrator/skills/deployment-infrastructure/SKILL.md +2 -2
  207. package/src/orchestrator/skills/documentation-standards/SKILL.md +1 -1
  208. package/src/orchestrator/skills/fast-review/SKILL.md +18 -7
  209. package/src/orchestrator/skills/frontend-design/SKILL.md +1 -1
  210. package/src/orchestrator/skills/memory-merger/SKILL.md +8 -8
  211. package/src/orchestrator/skills/nextjs-patterns/SKILL.md +1 -1
  212. package/src/orchestrator/skills/panel-majority-vote/SKILL.md +2 -2
  213. package/src/orchestrator/skills/panel-majority-vote/panel-report.template.md +1 -1
  214. package/src/orchestrator/skills/performance-optimization/SKILL.md +1 -1
  215. package/src/orchestrator/skills/react-development/SKILL.md +3 -3
  216. package/src/orchestrator/skills/security-hardening/SKILL.md +27 -27
  217. package/src/orchestrator/skills/self-improvement/SKILL.md +14 -13
  218. package/src/orchestrator/skills/seo-patterns/SKILL.md +1 -1
  219. package/src/orchestrator/skills/session-checkpoints/SKILL.md +19 -19
  220. package/src/orchestrator/skills/team-lead-reference/SKILL.md +9 -9
  221. package/src/orchestrator/skills/testing-workflow/SKILL.md +13 -13
  222. package/src/orchestrator/skills/validation-gates/SKILL.md +157 -27
  223. package/src/orchestrator/mcp.json +0 -69
package/src/cli/update.ts CHANGED
@@ -1,18 +1,29 @@
1
1
  import { resolve } from 'node:path'
2
2
  import { readFile } from 'node:fs/promises'
3
3
  import { readManifest, writeManifest } from './manifest.js'
4
- import { confirm, closePrompts } from './prompt.js'
5
- import type { CliContext, IdeAdapter } from './types.js'
4
+ import { confirm, closePrompts, c } from './prompt.js'
5
+ import { isLegacyStack, migrateStackConfig } from './types.js'
6
+ import type { CliContext, IdeAdapter, IdeChoice } from './types.js'
6
7
 
7
8
  const ADAPTERS: Record<string, () => Promise<IdeAdapter>> = {
8
9
  vscode: () => import('./adapters/vscode.js') as Promise<IdeAdapter>,
9
10
  cursor: () => import('./adapters/cursor.js') as Promise<IdeAdapter>,
10
11
  'claude-code': () =>
11
12
  import('./adapters/claude-code.js') as Promise<IdeAdapter>,
13
+ opencode: () =>
14
+ import('./adapters/opencode.js') as Promise<IdeAdapter>,
12
15
  }
13
16
 
14
17
  const VALID_IDES = Object.keys(ADAPTERS)
15
18
 
19
+ /** IDE display labels */
20
+ const IDE_DISPLAY: Record<IdeChoice, string> = {
21
+ vscode: 'VS Code',
22
+ cursor: 'Cursor',
23
+ 'claude-code': 'Claude Code',
24
+ opencode: 'OpenCode',
25
+ }
26
+
16
27
  export default async function update({
17
28
  pkgRoot,
18
29
  args,
@@ -22,18 +33,27 @@ export default async function update({
22
33
  const manifest = await readManifest(projectRoot)
23
34
  if (!manifest) {
24
35
  console.error(
25
- ' ✗ No OpenCastle installation found. Run "npx opencastle init" first.'
36
+ ` ${c.red('✗')} No OpenCastle installation found. Run "npx opencastle init" first.`
26
37
  )
27
38
  process.exit(1)
28
39
  }
29
40
 
30
- if (!manifest.ide || !VALID_IDES.includes(manifest.ide)) {
41
+ // Determine list of IDEs to update (support legacy single-IDE manifests)
42
+ const ides = manifest.ides?.length ? manifest.ides : [manifest.ide]
43
+ const invalidIdes = ides.filter((id) => !VALID_IDES.includes(id))
44
+ if (invalidIdes.length > 0) {
31
45
  console.error(
32
- ` ✗ Invalid IDE "${manifest.ide}" in .opencastle.json. Valid options: ${VALID_IDES.join(', ')}`
46
+ ` ${c.red('')} Invalid IDE(s) "${invalidIdes.join(', ')}" in .opencastle.json. Valid: ${VALID_IDES.join(', ')}`
33
47
  )
34
48
  process.exit(1)
35
49
  }
36
50
 
51
+ // Migrate legacy stack config if needed
52
+ if (manifest.stack && isLegacyStack(manifest.stack)) {
53
+ manifest.stack = migrateStackConfig(manifest.stack, manifest.ide)
54
+ manifest.stack.ides = ides as IdeChoice[]
55
+ }
56
+
37
57
  const pkg = JSON.parse(
38
58
  await readFile(resolve(pkgRoot, 'package.json'), 'utf8')
39
59
  ) as { version: string }
@@ -45,23 +65,24 @@ export default async function update({
45
65
  return
46
66
  }
47
67
 
68
+ const ideNames = ides.map((id) => IDE_DISPLAY[id as IdeChoice] ?? id).join(', ')
48
69
  console.log(
49
- `\n 🏰 OpenCastle ${dryRun ? 'dry-run' : 'update'}: v${manifest.version} → v${pkg.version}\n`
70
+ `\n 🏰 ${c.bold('OpenCastle')} ${dryRun ? 'dry-run' : 'update'}: ${c.dim(`v${manifest.version}`)}${c.green(`v${pkg.version}`)}\n`
50
71
  )
51
- console.log(` IDE: ${manifest.ide}`)
52
- console.log(' Framework files will be overwritten.')
53
- console.log(' Customization files will be preserved.\n')
72
+ console.log(` IDEs: ${c.cyan(ideNames)}`)
73
+ console.log(` ${c.dim('Framework files will be overwritten.')}`)
74
+ console.log(` ${c.dim('Customization files will be preserved.')}\n`)
54
75
 
55
76
  if (dryRun) {
56
- console.log(' [dry-run] Framework files that would be updated:\n')
77
+ console.log(` ${c.dim('[dry-run]')} Framework files that would be updated:\n`)
57
78
  for (const p of manifest.managedPaths?.framework ?? []) {
58
- console.log(` ↻ ${p}`)
79
+ console.log(` ${c.yellow('')} ${p}`)
59
80
  }
60
- console.log('\n Customization files that would be preserved:\n')
81
+ console.log(`\n ${c.dim('[dry-run]')} Customization files that would be preserved:\n`)
61
82
  for (const p of manifest.managedPaths?.customizable ?? []) {
62
- console.log(` ✓ ${p}`)
83
+ console.log(` ${c.green('')} ${p}`)
63
84
  }
64
- console.log('\n No files were written.\n')
85
+ console.log(`\n ${c.dim('No files were written.')}\n`)
65
86
  return
66
87
  }
67
88
 
@@ -71,8 +92,21 @@ export default async function update({
71
92
  return
72
93
  }
73
94
 
74
- const adapter = await ADAPTERS[manifest.ide]()
75
- const results = await adapter.update(pkgRoot, projectRoot, manifest.stack)
95
+ // Update each IDE
96
+ let totalCopied = 0
97
+ let totalCreated = 0
98
+ const allManagedPaths = { framework: [] as string[], customizable: [] as string[] }
99
+
100
+ for (const ide of ides) {
101
+ const adapter = await ADAPTERS[ide]()
102
+ const results = await adapter.update(pkgRoot, projectRoot, manifest.stack)
103
+ totalCopied += results.copied.length
104
+ totalCreated += results.created.length
105
+
106
+ const managed = adapter.getManagedPaths()
107
+ allManagedPaths.framework.push(...managed.framework)
108
+ allManagedPaths.customizable.push(...managed.customizable)
109
+ }
76
110
 
77
111
  // Refresh repo research on update
78
112
  const { detectRepoInfo, mergeStackIntoRepoInfo } = await import('./detect.js')
@@ -80,16 +114,33 @@ export default async function update({
80
114
 
81
115
  // Update manifest
82
116
  manifest.version = pkg.version
117
+ manifest.ides = ides
83
118
  manifest.updatedAt = new Date().toISOString()
84
- manifest.managedPaths = adapter.getManagedPaths()
119
+ manifest.managedPaths = allManagedPaths
85
120
  manifest.repoInfo = manifest.stack
86
121
  ? mergeStackIntoRepoInfo(repoInfo, manifest.stack)
87
122
  : repoInfo
88
123
  await writeManifest(projectRoot, manifest)
89
124
 
90
- console.log(`\n ✓ Updated ${results.copied.length} framework files`)
91
- if (results.created.length > 0) {
92
- console.log(` + Created ${results.created.length} new files`)
125
+ console.log(`\n ${c.green('')} Updated ${c.bold(String(totalCopied))} framework files`)
126
+ if (totalCreated > 0) {
127
+ console.log(` ${c.green('+')} Created ${c.bold(String(totalCreated))} new files`)
128
+ }
129
+
130
+ // ── Reload window message ─────────────────────────────────────
131
+ const needsReload = ides.filter((id) => ['vscode', 'cursor'].includes(id))
132
+ if (needsReload.length > 0) {
133
+ console.log()
134
+ if (needsReload.includes('vscode')) {
135
+ console.log(
136
+ ` ${c.yellow('⟳')} Reload VS Code window (Cmd+Shift+P → "Developer: Reload Window") to pick up changes`
137
+ )
138
+ }
139
+ if (needsReload.includes('cursor')) {
140
+ console.log(
141
+ ` ${c.yellow('⟳')} Reload Cursor window to pick up the updated rule files`
142
+ )
143
+ }
93
144
  }
94
145
  console.log()
95
146
 
@@ -1,25 +1,25 @@
1
1
  {
2
- "hash": "b74383b1",
2
+ "hash": "ef84f2a1",
3
3
  "configHash": "30f8ea04",
4
- "lockfileHash": "280174fa",
5
- "browserHash": "2ec9de9d",
4
+ "lockfileHash": "fc571d9a",
5
+ "browserHash": "822a1467",
6
6
  "optimized": {
7
7
  "astro > cssesc": {
8
8
  "src": "../../../../../node_modules/cssesc/cssesc.js",
9
9
  "file": "astro___cssesc.js",
10
- "fileHash": "bb46d6fb",
10
+ "fileHash": "d234c1d0",
11
11
  "needsInterop": true
12
12
  },
13
13
  "astro > aria-query": {
14
14
  "src": "../../../../../node_modules/aria-query/lib/index.js",
15
15
  "file": "astro___aria-query.js",
16
- "fileHash": "8270e9c7",
16
+ "fileHash": "bcc57b41",
17
17
  "needsInterop": true
18
18
  },
19
19
  "astro > axobject-query": {
20
20
  "src": "../../../../../node_modules/axobject-query/lib/index.js",
21
21
  "file": "astro___axobject-query.js",
22
- "fileHash": "1cfcd59d",
22
+ "fileHash": "196f4f3c",
23
23
  "needsInterop": true
24
24
  }
25
25
  },
@@ -1,4 +1,4 @@
1
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
1
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
2
2
 
3
3
  # Workflow Templates
4
4
 
@@ -1,4 +1,4 @@
1
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
1
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
2
2
 
3
3
  # Workflow: Bug Fix
4
4
 
@@ -29,23 +29,23 @@ Follow the **Delivery Outcome** in `general.instructions.md` and the **Branch Ow
29
29
 
30
30
  ### Steps
31
31
 
32
- 1. Check `docs/KNOWN-ISSUES.md` for existing entry
33
- 2. Check Linear for existing bug ticket
32
+ 1. Check `.github/customizations/KNOWN-ISSUES.md` for existing entry
33
+ 2. Check tracker for existing bug ticket
34
34
  3. Read `.github/customizations/LESSONS-LEARNED.md` for related pitfalls
35
35
  4. **Reproduce the bug** — this is mandatory before any fix attempt:
36
- a. Start the dev server: `yarn nx run <app>:serve`
36
+ a. Start the dev server (see the **codebase-tool** skill for the serve command)
37
37
  b. Navigate to the affected page in Chrome
38
38
  c. Follow the reproduction steps from the bug report
39
39
  d. **Confirm the failure** — screenshot the broken state as evidence
40
40
  e. If the bug **cannot be reproduced**, document what was tried and ask the reporter for more detail. Do NOT proceed to Phase 2 without reproduction
41
41
  5. Assess severity (Critical/High/Medium/Low)
42
- 6. Create Linear issue with `[Bug]` prefix and `bug` label, including reproduction steps and screenshot
42
+ 6. Create tracker issue with `[Bug]` prefix and `bug` label, including reproduction steps and screenshot
43
43
 
44
44
  ### Exit Criteria
45
45
 
46
46
  - [ ] Bug **confirmed reproduced** with screenshot evidence (or documented as non-reproducible with investigation notes)
47
47
  - [ ] Severity assessed
48
- - [ ] Linear issue created with reproduction steps and screenshot
48
+ - [ ] Tracker issue created with reproduction steps and screenshot
49
49
  - [ ] Affected apps identified (see `project.instructions.md` for inventory)
50
50
 
51
51
  ---
@@ -66,7 +66,7 @@ Follow the **Delivery Outcome** in `general.instructions.md` and the **Branch Ow
66
66
  - Race condition (timing, hydration mismatch)
67
67
  - CSS/Layout (specificity, overflow, responsive)
68
68
  - Integration (API contract mismatch, schema drift)
69
- 5. Update Linear issue with root cause and affected files
69
+ 5. Update tracker issue with root cause and affected files
70
70
 
71
71
  ### Exit Criteria
72
72
 
@@ -109,17 +109,17 @@ Follow the **Delivery Outcome** in `general.instructions.md` and the **Branch Ow
109
109
  3. Verify the bug is fixed in Chrome (screenshot the working state)
110
110
  4. Test adjacent features for regressions
111
111
  5. If security-related: schedule panel review
112
- 6. Move Linear issue to Done
113
- 7. Update `docs/KNOWN-ISSUES.md` if the bug was listed there
112
+ 6. Move tracker issue to Done
113
+ 7. Update `.github/customizations/KNOWN-ISSUES.md` if the bug was listed there
114
114
  8. Commit and push
115
115
 
116
116
  ### Exit Criteria
117
117
 
118
118
  - [ ] Bug confirmed fixed with screenshot
119
119
  - [ ] No regressions introduced
120
- - [ ] Linear issue moved to Done
120
+ - [ ] Tracker issue moved to Done
121
121
  - [ ] Known issues updated (if applicable)
122
- - [ ] Delivery Outcome completed (see `general.instructions.md`) — branch pushed, PR opened (not merged), Linear linked
122
+ - [ ] Delivery Outcome completed (see `general.instructions.md`) — branch pushed, PR opened (not merged), tracker linked
123
123
 
124
124
  ---
125
125
 
@@ -127,4 +127,4 @@ Follow the **Delivery Outcome** in `general.instructions.md` and the **Branch Ow
127
127
 
128
128
  > **See [shared-delivery-phase.md](shared-delivery-phase.md) for the standard delivery steps.**
129
129
  >
130
- > Commit → Push → PR → Linear linkage. Team Lead owns delivery.
130
+ > Commit → Push → PR → tracker linkage. Team Lead owns delivery.
@@ -1,8 +1,8 @@
1
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
1
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
2
2
 
3
3
  # Workflow: Data Pipeline
4
4
 
5
- Standard execution plan for scraping, processing, and importing data.
5
+ Standard execution plan for crowling, processing, and importing data.
6
6
 
7
7
  > **Project config:** For project-specific paths, data schema, CLI commands, and processing rules, see `data-pipeline-config.md`. For data model docs, see `docs-structure.md`.
8
8
 
@@ -10,7 +10,7 @@ Standard execution plan for scraping, processing, and importing data.
10
10
 
11
11
  ```
12
12
  Phase 1: Source Analysis (sub-agent, inline)
13
- Phase 2: Scraping (background agent)
13
+ Phase 2: Crowling (background agent)
14
14
  Phase 3: Processing (sub-agent, sequential)
15
15
  Phase 4: Validation (sub-agent, inline)
16
16
  Phase 5: Import (sub-agent, inline)
@@ -37,34 +37,34 @@ Follow the **Delivery Outcome** in `general.instructions.md` and the **Branch Ow
37
37
  3. Check the data model documentation (see `docs-structure.md`) for required fields
38
38
  4. Estimate record count
39
39
  5. Check for existing scraper patterns (see **data-engineering** skill)
40
- 6. Create Linear issue with data source details
40
+ 6. Create tracker issue with data source details
41
41
 
42
42
  ### Exit Criteria
43
43
 
44
44
  - [ ] Source structure documented
45
45
  - [ ] Field mapping defined (source field → target field)
46
46
  - [ ] Estimated record count
47
- - [ ] Linear issue created
48
- - [ ] Scraper approach decided (Puppeteer, fetch, API)
47
+ - [ ] Tracker issue created
48
+ - [ ] Scraper approach decided (browser-based, fetch, API)
49
49
 
50
50
  ---
51
51
 
52
- ## Phase 2: Scraping
52
+ ## Phase 2: Crowling
53
53
 
54
54
  **Agent:** Data Expert
55
55
  **Type:** Background agent (may be long-running)
56
56
 
57
57
  ### Steps
58
58
 
59
- 1. Implement scraper following existing patterns (see `data-pipeline-config.md`)
59
+ 1. Implement crowler following existing patterns (see `data-pipeline-config.md`)
60
60
  2. Output raw data as NDJSON
61
61
  3. Handle pagination, rate limiting, and error recovery
62
- 4. Log scraping statistics (pages visited, records extracted, errors)
62
+ 4. Log crowling statistics (pages visited, records extracted, errors)
63
63
 
64
64
  ### Exit Criteria
65
65
 
66
66
  - [ ] Raw NDJSON file produced
67
- - [ ] Scraping statistics logged
67
+ - [ ] Crowling statistics logged
68
68
  - [ ] No duplicate records
69
69
  - [ ] Output contract returned
70
70
 
@@ -78,18 +78,19 @@ Follow the **Delivery Outcome** in `general.instructions.md` and the **Branch Ow
78
78
  ### Steps
79
79
 
80
80
  1. Convert raw data to the target schema format
81
- 2. Enrich with geocoding, slug generation, image optimization
82
- 3. Normalize text fields (see data-pipeline-config.md for rules)
83
- 4. Validate against place schema
84
- 5. Output processed NDJSON
81
+ 2. Enrich with appropriate metadata (geocoding, slug generation)
82
+ 3. Images optimization
83
+ 4. Normalize text fields (see data-pipeline-config.md for rules)
84
+ 5. Validate against schema
85
+ 6. Output processed NDJSON
85
86
 
86
87
  ### Exit Criteria
87
88
 
88
- - [ ] Processed NDJSON matches place schema
89
+ - [ ] Processed NDJSON matches schema
89
90
  - [ ] All required fields present
90
91
  - [ ] Slugs are unique
91
- - [ ] Geocoding complete
92
- - [ ] Pipeline tests pass: `yarn nx run data-pipeline:test`
92
+ - [ ] Metadata complete
93
+ - [ ] Pipeline tests pass (run the project's test command — see **codebase-tool** skill)
93
94
  - [ ] Output contract returned with quality metrics
94
95
 
95
96
  ---
@@ -127,7 +128,7 @@ Follow the **Delivery Outcome** in `general.instructions.md` and the **Branch Ow
127
128
  2. Verify in CMS
128
129
  3. Import full dataset
129
130
  4. Log import statistics (created, updated, skipped, failed)
130
- 5. Update Linear issue and roadmap
131
+ 5. Update tracker issue and roadmap
131
132
 
132
133
  ### Exit Criteria
133
134
 
@@ -136,7 +137,7 @@ Follow the **Delivery Outcome** in `general.instructions.md` and the **Branch Ow
136
137
  - [ ] Import statistics logged
137
138
  - [ ] <0.1% failure rate
138
139
  - [ ] Output contract returned
139
- - [ ] Delivery Outcome completed (see `general.instructions.md`) — branch pushed, PR opened (not merged), Linear linked
140
+ - [ ] Delivery Outcome completed (see `general.instructions.md`) — branch pushed, PR opened (not merged), tracker linked
140
141
 
141
142
  ---
142
143
 
@@ -144,4 +145,4 @@ Follow the **Delivery Outcome** in `general.instructions.md` and the **Branch Ow
144
145
 
145
146
  > **See [shared-delivery-phase.md](shared-delivery-phase.md) for the standard delivery steps.**
146
147
  >
147
- > Commit → Push → PR → Linear linkage. Team Lead owns delivery.
148
+ > Commit → Push → PR → tracker linkage. Team Lead owns delivery.
@@ -1,10 +1,10 @@
1
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
1
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
2
2
 
3
3
  # Workflow: Database Migration
4
4
 
5
5
  Structured workflow for database schema changes, RLS policies, and data migrations.
6
6
 
7
- > **Project config:** For database-specific paths, schema details, and migration conventions, see the relevant database customization file (e.g., `supabase-config.md`).
7
+ > **Project config:** For database-specific paths, schema details, and migration conventions, see the relevant database customization file in `customizations/stack/`.
8
8
 
9
9
  ## Phases
10
10
 
@@ -34,11 +34,11 @@ Follow the **Delivery Outcome** in `general.instructions.md` and the **Branch Ow
34
34
 
35
35
  1. Read current schema in the migrations directory (see database customization) to understand existing tables
36
36
  2. Check existing RLS policies using the database query tool
37
- 3. Read `docs/PROJECT.md` for database architecture
38
- 4. Check `docs/KNOWN-ISSUES.md` for database-related limitations
37
+ 3. Read `.github/customizations/project.instructions.md` for database architecture
38
+ 4. Check `.github/customizations/KNOWN-ISSUES.md` for database-related limitations
39
39
  5. Document the migration plan: tables affected, columns added/removed, RLS changes
40
40
  6. Write rollback strategy (how to reverse the migration)
41
- 7. Create Linear issue with migration details and rollback plan
41
+ 7. Create tracker issue with migration details and rollback plan
42
42
 
43
43
  ### Exit Criteria
44
44
 
@@ -46,7 +46,7 @@ Follow the **Delivery Outcome** in `general.instructions.md` and the **Branch Ow
46
46
  - [ ] Migration plan documented
47
47
  - [ ] Rollback strategy defined
48
48
  - [ ] Impact on existing data assessed
49
- - [ ] Linear issue created with rollback plan
49
+ - [ ] Tracker issue created with rollback plan
50
50
 
51
51
  ---
52
52
 
@@ -139,8 +139,8 @@ Follow the **Delivery Outcome** in `general.instructions.md` and the **Branch Ow
139
139
  3. Spot-check data using the database query tool
140
140
  4. Start dev server and verify end-to-end functionality
141
141
  5. **Security check:** If the migration touches auth or RLS, schedule panel review
142
- 6. Document rollback procedure in Linear issue
143
- 7. Move Linear issue to Done
142
+ 6. Document rollback procedure in tracker issue
143
+ 7. Move tracker issue to Done
144
144
 
145
145
  ### Exit Criteria
146
146
 
@@ -149,8 +149,8 @@ Follow the **Delivery Outcome** in `general.instructions.md` and the **Branch Ow
149
149
  - [ ] End-to-end flow works in browser
150
150
  - [ ] Panel review passed (if auth/RLS changes)
151
151
  - [ ] Rollback procedure documented
152
- - [ ] Linear issue moved to Done
153
- - [ ] Delivery Outcome completed (see `general.instructions.md`) — branch pushed, PR opened (not merged), Linear linked
152
+ - [ ] Tracker issue moved to Done
153
+ - [ ] Delivery Outcome completed (see `general.instructions.md`) — branch pushed, PR opened (not merged), tracker linked
154
154
 
155
155
  ---
156
156
 
@@ -158,4 +158,4 @@ Follow the **Delivery Outcome** in `general.instructions.md` and the **Branch Ow
158
158
 
159
159
  > **See [shared-delivery-phase.md](shared-delivery-phase.md) for the standard delivery steps.**
160
160
  >
161
- > Commit → Push → PR → Linear linkage. Team Lead owns delivery.
161
+ > Commit → Push → PR → tracker linkage. Team Lead owns delivery.
@@ -1,4 +1,4 @@
1
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
1
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
2
2
 
3
3
  # Workflow: Feature Implementation
4
4
 
@@ -77,7 +77,7 @@ Run the `brainstorm` prompt when the task has ambiguity, multiple valid approach
77
77
 
78
78
  ### Steps
79
79
 
80
- 1. Read `docs/PROJECT.md`, `docs/KNOWN-ISSUES.md`, `.github/customizations/LESSONS-LEARNED.md`
80
+ 1. Read `.github/customizations/project.instructions.md`, `.github/customizations/KNOWN-ISSUES.md`, `.github/customizations/LESSONS-LEARNED.md`
81
81
  2. Search codebase for existing implementations
82
82
  3. Identify affected apps, libs, and layers
83
83
  4. **Spec flow analysis** — Trace the complete user flow end-to-end and identify:
@@ -86,8 +86,8 @@ Run the `brainstorm` prompt when the task has ambiguity, multiple valid approach
86
86
  - Edge cases (network failure, invalid data, concurrent access, empty collections)
87
87
  - Missing paths in the spec ("what happens when X?")
88
88
  - Accessibility flows (keyboard navigation, screen reader announcements)
89
- - Document findings as acceptance criteria on the Linear issues
90
- 5. Decompose into Linear issues with file partitions
89
+ - Document findings as acceptance criteria on the tracker issues
90
+ 5. Decompose into tracker issues with file partitions
91
91
  6. **Surface Open Questions** — Collect ambiguities, design choices, and assumptions that need user input. Present as a structured list for approval before proceeding.
92
92
  7. Create session checkpoint
93
93
 
@@ -112,7 +112,7 @@ If there are no open questions, explicitly state: "No open questions — plan is
112
112
 
113
113
  - [ ] All relevant docs read
114
114
  - [ ] **User flow traced** — all states, transitions, and edge cases documented
115
- - [ ] Linear issues created for every subtask (including edge case coverage)
115
+ - [ ] Tracker issues created for every subtask (including edge case coverage)
116
116
  - [ ] File partitions mapped (no overlaps)
117
117
  - [ ] Dependencies identified
118
118
  - [ ] **Open questions answered** by user (or none identified)
@@ -202,19 +202,26 @@ If there are no open questions, explicitly state: "No open questions — plan is
202
202
  1. Review all output contracts from Phases 2-4
203
203
  2. Run full lint + test + build across all affected projects
204
204
  3. Verify no files outside partitions were modified
205
- 4. Check all Linear issue acceptance criteria
205
+ 4. Check all tracker issue acceptance criteria
206
206
  5. Run panel review if high-stakes (security, DB, architecture)
207
- 6. Move all issues to Done
208
- 7. Update session checkpoint delete checkpoint
209
- 8. Update `docs/ROADMAP-POST-MVP.md`
207
+ 6. **Final Smoke Test (Gate 10)** — verify the complete feature end-to-end:
208
+ - Full clean build of all affected projects (not incremental)
209
+ - End-to-end browser walkthrough of the complete user flow
210
+ - Verify all states: loading, empty, populated, error, partial
211
+ - Cross-task integration check (e.g., migration + component + page compose correctly)
212
+ - Final responsive sweep at all breakpoints (if UI changes)
213
+ 7. Move all issues to Done
214
+ 8. Update session checkpoint → delete checkpoint
215
+ 9. Update `.github/customizations/project/roadmap.md`
210
216
 
211
217
  ### Exit Criteria
212
218
 
213
219
  - [ ] All phases verified
214
- - [ ] All Linear issues Done
220
+ - [ ] All tracker issues Done
215
221
  - [ ] Full build passes
222
+ - [ ] **Final smoke test passed** — complete user flow verified end-to-end
216
223
  - [ ] Roadmap updated
217
- - [ ] Delivery Outcome completed (see `general.instructions.md`) — branch pushed, PR opened (not merged), Linear linked
224
+ - [ ] Delivery Outcome completed (see `general.instructions.md`) — branch pushed, PR opened (not merged), tracker linked
218
225
 
219
226
  ---
220
227
 
@@ -222,4 +229,4 @@ If there are no open questions, explicitly state: "No open questions — plan is
222
229
 
223
230
  > **See [shared-delivery-phase.md](shared-delivery-phase.md) for the standard delivery steps.**
224
231
  >
225
- > Commit → Push → PR → Linear linkage. Team Lead owns delivery.
232
+ > Commit → Push → PR → tracker linkage. Team Lead owns delivery.
@@ -1,4 +1,4 @@
1
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
1
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
2
2
 
3
3
  # Workflow: Performance Optimization
4
4
 
@@ -31,7 +31,7 @@ Follow the **Delivery Outcome** in `general.instructions.md` and the **Branch Ow
31
31
 
32
32
  1. Build the affected app(s) with production config
33
33
  2. Run Lighthouse audit on key pages
34
- 3. Measure bundle size (`yarn nx run <app>:build` output)
34
+ 3. Measure bundle size (production build output — see the **codebase-tool** skill for the build command)
35
35
  4. Record Core Web Vitals: LCP, FID/INP, CLS, TTFB
36
36
  5. Profile server-side rendering time
37
37
  6. Document baseline metrics
@@ -45,7 +45,7 @@ Follow the **Delivery Outcome** in `general.instructions.md` and the **Branch Ow
45
45
  - [ ] Baseline metrics recorded for all key pages
46
46
  - [ ] Bundle size documented
47
47
  - [ ] Lighthouse scores saved
48
- - [ ] Linear issue created with targets
48
+ - [ ] Tracker issue created with targets
49
49
 
50
50
  ---
51
51
 
@@ -114,9 +114,9 @@ Follow the **Delivery Outcome** in `general.instructions.md` and the **Branch Ow
114
114
  - [ ] Metrics improved (or justified why not)
115
115
  - [ ] No visual regressions
116
116
  - [ ] No functional regressions
117
- - [ ] Results documented in Linear issue
117
+ - [ ] Results documented in tracker issue
118
118
  - [ ] Roadmap updated
119
- - [ ] Delivery Outcome completed (see `general.instructions.md`) — branch pushed, PR opened (not merged), Linear linked
119
+ - [ ] Delivery Outcome completed (see `general.instructions.md`) — branch pushed, PR opened (not merged), tracker linked
120
120
 
121
121
  ---
122
122
 
@@ -124,4 +124,4 @@ Follow the **Delivery Outcome** in `general.instructions.md` and the **Branch Ow
124
124
 
125
125
  > **See [shared-delivery-phase.md](shared-delivery-phase.md) for the standard delivery steps.**
126
126
  >
127
- > Commit → Push → PR → Linear linkage. Team Lead owns delivery.
127
+ > Commit → Push → PR → tracker linkage. Team Lead owns delivery.
@@ -1,4 +1,4 @@
1
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
1
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
2
2
 
3
3
  # Workflow: Code Refactoring
4
4
 
@@ -32,16 +32,16 @@ Follow the **Delivery Outcome** in `general.instructions.md` and the **Branch Ow
32
32
 
33
33
  1. Identify all files and modules in scope for refactoring
34
34
  2. Document current behavior (screenshots, test outputs, API responses)
35
- 3. Run baseline tests: `yarn nx run <project>:test --coverage`
36
- 4. Run baseline lint: `yarn nx run <project>:lint`
35
+ 3. Run baseline tests (with coverage) for the project — see the **codebase-tool** skill for commands
36
+ 4. Run baseline lint for the project
37
37
  5. Record baseline metrics (test count, coverage %, lint errors, bundle size)
38
- 6. Create Linear issues for the refactoring scope
38
+ 6. Create tracker issues for the refactoring scope
39
39
 
40
40
  ### Exit Criteria
41
41
 
42
42
  - [ ] Scope documented with file list
43
43
  - [ ] Baseline metrics recorded
44
- - [ ] Linear issues created
44
+ - [ ] Tracker issues created
45
45
 
46
46
  ---
47
47
 
@@ -96,9 +96,9 @@ The refactoring agent owns only the scoped files. No changes outside the partiti
96
96
 
97
97
  ### Steps
98
98
 
99
- 1. Run full test suite: `yarn nx run <project>:test`
100
- 2. Run lint: `yarn nx run <project>:lint`
101
- 3. Run build: `yarn nx run <project>:build`
99
+ 1. Run full test suite for the project
100
+ 2. Run lint for the project
101
+ 3. Run build for the project
102
102
  4. Compare metrics against Phase 1 baseline (test count, coverage, bundle size)
103
103
  5. For UI refactors: start dev server and visually verify at all breakpoints
104
104
  6. Verify no regressions in dependent code
@@ -133,7 +133,7 @@ The refactoring agent owns only the scoped files. No changes outside the partiti
133
133
  ### Exit Criteria
134
134
 
135
135
  - [ ] Panel PASS (2/3 majority)
136
- - [ ] Delivery Outcome completed (see `general.instructions.md`) — branch pushed, PR opened (not merged), Linear linked
136
+ - [ ] Delivery Outcome completed (see `general.instructions.md`) — branch pushed, PR opened (not merged), tracker linked
137
137
 
138
138
  ---
139
139
 
@@ -141,4 +141,4 @@ The refactoring agent owns only the scoped files. No changes outside the partiti
141
141
 
142
142
  > **See [shared-delivery-phase.md](shared-delivery-phase.md) for the standard delivery steps.**
143
143
  >
144
- > Commit → Push → PR → Linear linkage. Team Lead owns delivery.
144
+ > Commit → Push → PR → tracker linkage. Team Lead owns delivery.