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.
- package/README.md +8 -7
- package/dist/cli/adapters/claude-code.d.ts.map +1 -1
- package/dist/cli/adapters/claude-code.js +30 -3
- package/dist/cli/adapters/claude-code.js.map +1 -1
- package/dist/cli/adapters/cursor.d.ts.map +1 -1
- package/dist/cli/adapters/cursor.js +27 -3
- package/dist/cli/adapters/cursor.js.map +1 -1
- package/dist/cli/adapters/opencode.d.ts +20 -0
- package/dist/cli/adapters/opencode.d.ts.map +1 -0
- package/dist/cli/adapters/opencode.js +265 -0
- package/dist/cli/adapters/opencode.js.map +1 -0
- package/dist/cli/adapters/vscode.d.ts.map +1 -1
- package/dist/cli/adapters/vscode.js +37 -6
- package/dist/cli/adapters/vscode.js.map +1 -1
- package/dist/cli/copy.d.ts +12 -0
- package/dist/cli/copy.d.ts.map +1 -1
- package/dist/cli/copy.js +27 -0
- package/dist/cli/copy.js.map +1 -1
- package/dist/cli/detect.d.ts +1 -1
- package/dist/cli/detect.js +21 -15
- package/dist/cli/detect.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +143 -94
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/manifest.d.ts +1 -1
- package/dist/cli/manifest.d.ts.map +1 -1
- package/dist/cli/manifest.js +2 -1
- package/dist/cli/manifest.js.map +1 -1
- package/dist/cli/mcp.d.ts +6 -6
- package/dist/cli/mcp.d.ts.map +1 -1
- package/dist/cli/mcp.js +104 -33
- package/dist/cli/mcp.js.map +1 -1
- package/dist/cli/prompt.d.ts +19 -0
- package/dist/cli/prompt.d.ts.map +1 -1
- package/dist/cli/prompt.js +143 -0
- package/dist/cli/prompt.js.map +1 -1
- package/dist/cli/stack-config.d.ts +23 -0
- package/dist/cli/stack-config.d.ts.map +1 -1
- package/dist/cli/stack-config.js +128 -124
- package/dist/cli/stack-config.js.map +1 -1
- package/dist/cli/types.d.ts +26 -9
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/cli/types.js +26 -1
- package/dist/cli/types.js.map +1 -1
- package/dist/cli/update.d.ts.map +1 -1
- package/dist/cli/update.js +60 -19
- package/dist/cli/update.js.map +1 -1
- package/dist/orchestrator/plugins/chrome-devtools/config.d.ts +3 -0
- package/dist/orchestrator/plugins/chrome-devtools/config.d.ts.map +1 -0
- package/dist/orchestrator/plugins/chrome-devtools/config.js +28 -0
- package/dist/orchestrator/plugins/chrome-devtools/config.js.map +1 -0
- package/dist/orchestrator/plugins/contentful/config.d.ts +3 -0
- package/dist/orchestrator/plugins/contentful/config.d.ts.map +1 -0
- package/dist/orchestrator/plugins/contentful/config.js +48 -0
- package/dist/orchestrator/plugins/contentful/config.js.map +1 -0
- package/dist/orchestrator/plugins/convex/config.d.ts +3 -0
- package/dist/orchestrator/plugins/convex/config.d.ts.map +1 -0
- package/dist/orchestrator/plugins/convex/config.js +32 -0
- package/dist/orchestrator/plugins/convex/config.js.map +1 -0
- package/dist/orchestrator/plugins/index.d.ts +28 -0
- package/dist/orchestrator/plugins/index.d.ts.map +1 -0
- package/dist/orchestrator/plugins/index.js +63 -0
- package/dist/orchestrator/plugins/index.js.map +1 -0
- package/dist/orchestrator/plugins/jira/config.d.ts +3 -0
- package/dist/orchestrator/plugins/jira/config.d.ts.map +1 -0
- package/dist/orchestrator/plugins/jira/config.js +29 -0
- package/dist/orchestrator/plugins/jira/config.js.map +1 -0
- package/dist/orchestrator/plugins/linear/config.d.ts +3 -0
- package/dist/orchestrator/plugins/linear/config.d.ts.map +1 -0
- package/dist/orchestrator/plugins/linear/config.js +33 -0
- package/dist/orchestrator/plugins/linear/config.js.map +1 -0
- package/dist/orchestrator/plugins/nx/config.d.ts +3 -0
- package/dist/orchestrator/plugins/nx/config.d.ts.map +1 -0
- package/dist/orchestrator/plugins/nx/config.js +28 -0
- package/dist/orchestrator/plugins/nx/config.js.map +1 -0
- package/dist/orchestrator/plugins/sanity/config.d.ts +3 -0
- package/dist/orchestrator/plugins/sanity/config.d.ts.map +1 -0
- package/dist/orchestrator/plugins/sanity/config.js +43 -0
- package/dist/orchestrator/plugins/sanity/config.js.map +1 -0
- package/dist/orchestrator/plugins/slack/config.d.ts +3 -0
- package/dist/orchestrator/plugins/slack/config.d.ts.map +1 -0
- package/dist/orchestrator/plugins/slack/config.js +34 -0
- package/dist/orchestrator/plugins/slack/config.js.map +1 -0
- package/dist/orchestrator/plugins/strapi/config.d.ts +3 -0
- package/dist/orchestrator/plugins/strapi/config.d.ts.map +1 -0
- package/dist/orchestrator/plugins/strapi/config.js +40 -0
- package/dist/orchestrator/plugins/strapi/config.js.map +1 -0
- package/dist/orchestrator/plugins/supabase/config.d.ts +3 -0
- package/dist/orchestrator/plugins/supabase/config.d.ts.map +1 -0
- package/dist/orchestrator/plugins/supabase/config.js +33 -0
- package/dist/orchestrator/plugins/supabase/config.js.map +1 -0
- package/dist/orchestrator/plugins/teams/config.d.ts +3 -0
- package/dist/orchestrator/plugins/teams/config.d.ts.map +1 -0
- package/dist/orchestrator/plugins/teams/config.js +43 -0
- package/dist/orchestrator/plugins/teams/config.js.map +1 -0
- package/dist/orchestrator/plugins/types.d.ts +61 -0
- package/dist/orchestrator/plugins/types.d.ts.map +1 -0
- package/dist/orchestrator/plugins/types.js +2 -0
- package/dist/orchestrator/plugins/types.js.map +1 -0
- package/dist/orchestrator/plugins/vercel/config.d.ts +3 -0
- package/dist/orchestrator/plugins/vercel/config.d.ts.map +1 -0
- package/dist/orchestrator/plugins/vercel/config.js +32 -0
- package/dist/orchestrator/plugins/vercel/config.js.map +1 -0
- package/package.json +1 -1
- package/src/cli/adapters/claude-code.ts +36 -4
- package/src/cli/adapters/cursor.ts +42 -4
- package/src/cli/adapters/opencode.ts +320 -0
- package/src/cli/adapters/vscode.ts +40 -8
- package/src/cli/copy.ts +32 -0
- package/src/cli/detect.ts +17 -17
- package/src/cli/init.ts +157 -99
- package/src/cli/manifest.ts +2 -1
- package/src/cli/mcp.ts +129 -50
- package/src/cli/prompt.ts +176 -0
- package/src/cli/stack-config.ts +174 -145
- package/src/cli/types.ts +39 -8
- package/src/cli/update.ts +71 -20
- package/src/dashboard/node_modules/.vite/deps/_metadata.json +6 -6
- package/src/orchestrator/agent-workflows/README.md +1 -1
- package/src/orchestrator/agent-workflows/bug-fix.md +12 -12
- package/src/orchestrator/agent-workflows/data-pipeline.md +21 -20
- package/src/orchestrator/agent-workflows/database-migration.md +11 -11
- package/src/orchestrator/agent-workflows/feature-implementation.md +19 -12
- package/src/orchestrator/agent-workflows/performance-optimization.md +6 -6
- package/src/orchestrator/agent-workflows/refactoring.md +10 -10
- package/src/orchestrator/agent-workflows/schema-changes.md +8 -8
- package/src/orchestrator/agent-workflows/security-audit.md +12 -12
- package/src/orchestrator/agent-workflows/shared-delivery-phase.md +5 -5
- package/src/orchestrator/agents/api-designer.agent.md +1 -1
- package/src/orchestrator/agents/architect.agent.md +2 -2
- package/src/orchestrator/agents/content-engineer.agent.md +3 -3
- package/src/orchestrator/agents/copywriter.agent.md +2 -2
- package/src/orchestrator/agents/data-expert.agent.md +6 -6
- package/src/orchestrator/agents/database-engineer.agent.md +3 -3
- package/src/orchestrator/agents/developer.agent.md +4 -4
- package/src/orchestrator/agents/devops-expert.agent.md +5 -5
- package/src/orchestrator/agents/documentation-writer.agent.md +1 -1
- package/src/orchestrator/agents/performance-expert.agent.md +2 -2
- package/src/orchestrator/agents/release-manager.agent.md +4 -4
- package/src/orchestrator/agents/researcher.agent.md +3 -3
- package/src/orchestrator/agents/reviewer.agent.md +1 -1
- package/src/orchestrator/agents/security-expert.agent.md +4 -4
- package/src/orchestrator/agents/seo-specialist.agent.md +2 -2
- package/src/orchestrator/agents/team-lead.agent.md +56 -38
- package/src/orchestrator/agents/testing-expert.agent.md +5 -5
- package/src/orchestrator/agents/ui-ux-expert.agent.md +6 -6
- package/src/orchestrator/copilot-instructions.md +1 -1
- package/src/orchestrator/customizations/AGENT-FAILURES.md +1 -1
- package/src/orchestrator/customizations/AGENT-PERFORMANCE.md +12 -12
- package/src/orchestrator/customizations/DISPUTES.md +5 -5
- package/src/orchestrator/customizations/KNOWN-ISSUES.md +30 -0
- package/src/orchestrator/customizations/LESSONS-LEARNED.md +7 -7
- package/src/orchestrator/customizations/README.md +5 -2
- package/src/orchestrator/customizations/agents/agent-registry.md +1 -1
- package/src/orchestrator/customizations/agents/skill-matrix.md +12 -7
- package/src/orchestrator/customizations/logs/README.md +1 -1
- package/src/orchestrator/customizations/project/decisions.md +31 -0
- package/src/orchestrator/customizations/project/docs-structure.md +16 -5
- package/src/orchestrator/customizations/project/roadmap.md +24 -0
- package/src/orchestrator/customizations/project/tracker-config.md +1 -1
- package/src/orchestrator/customizations/stack/cms-config.md +1 -1
- package/src/orchestrator/customizations/stack/notifications-config.md +1 -1
- package/src/orchestrator/instructions/ai-optimization.instructions.md +2 -2
- package/src/orchestrator/instructions/general.instructions.md +102 -40
- package/src/orchestrator/{skills/browser-testing → plugins/chrome-devtools}/SKILL.md +1 -1
- package/src/orchestrator/plugins/chrome-devtools/config.ts +29 -0
- package/src/orchestrator/{skills/contentful-cms → plugins/contentful}/SKILL.md +1 -1
- package/src/orchestrator/plugins/contentful/config.ts +49 -0
- package/src/orchestrator/{skills/convex-database → plugins/convex}/SKILL.md +1 -1
- package/src/orchestrator/plugins/convex/config.ts +33 -0
- package/src/orchestrator/plugins/index.ts +85 -0
- package/src/orchestrator/{skills/jira-management → plugins/jira}/SKILL.md +3 -3
- package/src/orchestrator/plugins/jira/config.ts +30 -0
- package/src/orchestrator/{skills/task-management → plugins/linear}/SKILL.md +3 -3
- package/src/orchestrator/plugins/linear/config.ts +34 -0
- package/src/orchestrator/{skills/nx-workspace → plugins/nx}/SKILL.md +1 -1
- package/src/orchestrator/plugins/nx/config.ts +29 -0
- package/src/orchestrator/{skills/sanity-cms → plugins/sanity}/SKILL.md +1 -1
- package/src/orchestrator/plugins/sanity/config.ts +44 -0
- package/src/orchestrator/{skills/slack-notifications → plugins/slack}/SKILL.md +2 -2
- package/src/orchestrator/plugins/slack/config.ts +35 -0
- package/src/orchestrator/{skills/strapi-cms → plugins/strapi}/SKILL.md +1 -1
- package/src/orchestrator/plugins/strapi/config.ts +41 -0
- package/src/orchestrator/{skills/supabase-database → plugins/supabase}/SKILL.md +1 -1
- package/src/orchestrator/plugins/supabase/config.ts +34 -0
- package/src/orchestrator/{skills/teams-notifications → plugins/teams}/SKILL.md +2 -2
- package/src/orchestrator/plugins/teams/config.ts +44 -0
- package/src/orchestrator/plugins/types.ts +79 -0
- package/src/orchestrator/plugins/vercel/config.ts +33 -0
- package/src/orchestrator/prompts/bootstrap-customizations.prompt.md +8 -8
- package/src/orchestrator/prompts/brainstorm.prompt.md +3 -3
- package/src/orchestrator/prompts/bug-fix.prompt.md +27 -22
- package/src/orchestrator/prompts/create-skill.prompt.md +50 -32
- package/src/orchestrator/prompts/generate-task-spec.prompt.md +3 -3
- package/src/orchestrator/prompts/implement-feature.prompt.md +34 -29
- package/src/orchestrator/prompts/metrics-report.prompt.md +11 -11
- package/src/orchestrator/prompts/quick-refinement.prompt.md +23 -19
- package/src/orchestrator/prompts/resolve-pr-comments.prompt.md +19 -5
- package/src/orchestrator/skills/accessibility-standards/SKILL.md +1 -1
- package/src/orchestrator/skills/agent-hooks/SKILL.md +27 -18
- package/src/orchestrator/skills/agent-memory/SKILL.md +7 -7
- package/src/orchestrator/skills/api-patterns/SKILL.md +6 -6
- package/src/orchestrator/skills/code-commenting/SKILL.md +1 -1
- package/src/orchestrator/skills/context-map/SKILL.md +4 -4
- package/src/orchestrator/skills/data-engineering/SKILL.md +7 -4
- package/src/orchestrator/skills/deployment-infrastructure/SKILL.md +2 -2
- package/src/orchestrator/skills/documentation-standards/SKILL.md +1 -1
- package/src/orchestrator/skills/fast-review/SKILL.md +18 -7
- package/src/orchestrator/skills/frontend-design/SKILL.md +1 -1
- package/src/orchestrator/skills/memory-merger/SKILL.md +8 -8
- package/src/orchestrator/skills/nextjs-patterns/SKILL.md +1 -1
- package/src/orchestrator/skills/panel-majority-vote/SKILL.md +2 -2
- package/src/orchestrator/skills/panel-majority-vote/panel-report.template.md +1 -1
- package/src/orchestrator/skills/performance-optimization/SKILL.md +1 -1
- package/src/orchestrator/skills/react-development/SKILL.md +3 -3
- package/src/orchestrator/skills/security-hardening/SKILL.md +27 -27
- package/src/orchestrator/skills/self-improvement/SKILL.md +14 -13
- package/src/orchestrator/skills/seo-patterns/SKILL.md +1 -1
- package/src/orchestrator/skills/session-checkpoints/SKILL.md +19 -19
- package/src/orchestrator/skills/team-lead-reference/SKILL.md +9 -9
- package/src/orchestrator/skills/testing-workflow/SKILL.md +13 -13
- package/src/orchestrator/skills/validation-gates/SKILL.md +157 -27
- 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
|
|
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
|
-
'
|
|
36
|
+
` ${c.red('✗')} No OpenCastle installation found. Run "npx opencastle init" first.`
|
|
26
37
|
)
|
|
27
38
|
process.exit(1)
|
|
28
39
|
}
|
|
29
40
|
|
|
30
|
-
|
|
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 "${
|
|
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(`
|
|
52
|
-
console.log('
|
|
53
|
-
console.log('
|
|
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('
|
|
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(
|
|
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(
|
|
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
|
-
|
|
75
|
-
|
|
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 =
|
|
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 ${
|
|
91
|
-
if (
|
|
92
|
-
console.log(` + Created ${
|
|
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": "
|
|
2
|
+
"hash": "ef84f2a1",
|
|
3
3
|
"configHash": "30f8ea04",
|
|
4
|
-
"lockfileHash": "
|
|
5
|
-
"browserHash": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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
|
|
33
|
-
2. Check
|
|
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
|
|
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
|
|
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
|
-
- [ ]
|
|
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
|
|
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
|
|
113
|
-
7. Update
|
|
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
|
-
- [ ]
|
|
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),
|
|
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 →
|
|
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
|
|
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:
|
|
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
|
|
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
|
-
- [ ]
|
|
48
|
-
- [ ] Scraper approach decided (
|
|
47
|
+
- [ ] Tracker issue created
|
|
48
|
+
- [ ] Scraper approach decided (browser-based, fetch, API)
|
|
49
49
|
|
|
50
50
|
---
|
|
51
51
|
|
|
52
|
-
## Phase 2:
|
|
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
|
|
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
|
|
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
|
-
- [ ]
|
|
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
|
|
82
|
-
3.
|
|
83
|
-
4.
|
|
84
|
-
5.
|
|
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
|
|
89
|
+
- [ ] Processed NDJSON matches schema
|
|
89
90
|
- [ ] All required fields present
|
|
90
91
|
- [ ] Slugs are unique
|
|
91
|
-
- [ ]
|
|
92
|
-
- [ ] Pipeline tests pass
|
|
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
|
|
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),
|
|
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 →
|
|
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
|
|
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
|
|
38
|
-
4. Check
|
|
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
|
|
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
|
-
- [ ]
|
|
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
|
|
143
|
-
7. Move
|
|
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
|
-
- [ ]
|
|
153
|
-
- [ ] Delivery Outcome completed (see `general.instructions.md`) — branch pushed, PR opened (not merged),
|
|
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 →
|
|
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
|
|
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
|
|
90
|
-
5. Decompose into
|
|
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
|
-
- [ ]
|
|
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
|
|
205
|
+
4. Check all tracker issue acceptance criteria
|
|
206
206
|
5. Run panel review if high-stakes (security, DB, architecture)
|
|
207
|
-
6.
|
|
208
|
-
|
|
209
|
-
|
|
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
|
|
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),
|
|
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 →
|
|
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 (
|
|
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
|
-
- [ ]
|
|
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
|
|
117
|
+
- [ ] Results documented in tracker issue
|
|
118
118
|
- [ ] Roadmap updated
|
|
119
|
-
- [ ] Delivery Outcome completed (see `general.instructions.md`) — branch pushed, PR opened (not merged),
|
|
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 →
|
|
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
|
|
36
|
-
4. Run baseline 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
|
|
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
|
-
- [ ]
|
|
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
|
|
100
|
-
2. Run lint
|
|
101
|
-
3. Run 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),
|
|
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 →
|
|
144
|
+
> Commit → Push → PR → tracker linkage. Team Lead owns delivery.
|