claude-code-workflow 6.3.43 → 6.3.44
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/.claude/agents/tdd-developer.md +530 -0
- package/.claude/commands/issue/discover-by-prompt.md +5 -1
- package/.claude/commands/issue/discover.md +472 -468
- package/.claude/commands/issue/execute.md +580 -581
- package/.claude/commands/issue/new.md +417 -413
- package/.claude/commands/issue/plan.md +5 -1
- package/.claude/commands/issue/queue.md +445 -441
- package/.claude/commands/task/breakdown.md +207 -203
- package/.claude/commands/task/replan.md +440 -436
- package/.claude/commands/workflow/action-plan-verify.md +485 -447
- package/.claude/commands/workflow/brainstorm/artifacts.md +457 -453
- package/.claude/commands/workflow/brainstorm/auto-parallel.md +5 -1
- package/.claude/commands/workflow/brainstorm/synthesis.md +402 -398
- package/.claude/commands/workflow/clean.md +67 -35
- package/.claude/commands/workflow/debug-with-file.md +670 -666
- package/.claude/commands/workflow/debug.md +331 -327
- package/.claude/commands/workflow/develop-with-file.md +5 -1
- package/.claude/commands/workflow/execute.md +546 -498
- package/.claude/commands/workflow/lite-execute.md +44 -26
- package/.claude/commands/workflow/lite-fix.md +780 -730
- package/.claude/commands/workflow/lite-lite-lite.md +5 -1
- package/.claude/commands/workflow/lite-plan.md +87 -39
- package/.claude/commands/workflow/multi-cli-plan.md +572 -568
- package/.claude/commands/workflow/plan-verify.md +527 -0
- package/.claude/commands/workflow/plan.md +555 -551
- package/.claude/commands/workflow/replan.md +572 -515
- package/.claude/commands/workflow/review-fix.md +608 -610
- package/.claude/commands/workflow/session/complete.md +37 -14
- package/.claude/commands/workflow/session/solidify.md +303 -299
- package/.claude/commands/workflow/tdd-plan.md +630 -597
- package/.claude/commands/workflow/tdd-verify.md +391 -206
- package/.claude/commands/workflow/tools/conflict-resolution.md +24 -12
- package/.claude/commands/workflow/tools/task-generate-agent.md +583 -563
- package/.claude/commands/workflow/tools/task-generate-tdd.md +749 -517
- package/.claude/commands/workflow/ui-design/animation-extract.md +1154 -1150
- package/.claude/commands/workflow/ui-design/layout-extract.md +792 -788
- package/.claude/commands/workflow/ui-design/style-extract.md +777 -773
- package/.claude/skills/ccw/command.json +4 -4
- package/.claude/skills/ccw-coordinator/README.md +45 -0
- package/.claude/skills/ccw-coordinator/SKILL.md +320 -0
- package/.claude/skills/ccw-coordinator/phases/actions/action-abort.md +9 -0
- package/.claude/skills/ccw-coordinator/phases/actions/action-command-build.md +40 -0
- package/.claude/skills/ccw-coordinator/phases/actions/action-command-execute.md +124 -0
- package/.claude/skills/ccw-coordinator/phases/actions/action-command-selection.md +48 -0
- package/.claude/skills/ccw-coordinator/phases/actions/action-complete.md +25 -0
- package/.claude/skills/ccw-coordinator/phases/actions/action-init.md +26 -0
- package/.claude/skills/ccw-coordinator/phases/orchestrator.md +59 -0
- package/.claude/skills/ccw-coordinator/phases/state-schema.md +66 -0
- package/.claude/skills/ccw-coordinator/skill-config.json +66 -0
- package/.claude/skills/ccw-coordinator/specs/command-library.md +169 -0
- package/.claude/skills/ccw-coordinator/specs/specs.md +362 -0
- package/.claude/skills/ccw-coordinator/tools/README.md +95 -0
- package/.claude/skills/ccw-coordinator/tools/chain-validate.cjs +320 -0
- package/.claude/skills/ccw-coordinator/tools/command-registry.cjs +255 -0
- package/.claude/skills/ccw-help/command.json +5 -5
- package/.claude/skills/ccw-help/scripts/analyze_commands.py +337 -337
- package/.claude/workflows/cli-templates/prompts/workflow-impl-plan-template.txt +1 -1
- package/ccw/dist/commands/issue.d.ts +4 -0
- package/ccw/dist/commands/issue.d.ts.map +1 -1
- package/ccw/dist/commands/issue.js +73 -6
- package/ccw/dist/commands/issue.js.map +1 -1
- package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/cli-routes.js +32 -28
- package/ccw/dist/core/routes/cli-routes.js.map +1 -1
- package/ccw/dist/tools/claude-cli-tools.d.ts +10 -0
- package/ccw/dist/tools/claude-cli-tools.d.ts.map +1 -1
- package/ccw/dist/tools/claude-cli-tools.js +45 -0
- package/ccw/dist/tools/claude-cli-tools.js.map +1 -1
- package/ccw/dist/tools/codex-lens.d.ts.map +1 -1
- package/ccw/dist/tools/codex-lens.js +38 -11
- package/ccw/dist/tools/codex-lens.js.map +1 -1
- package/ccw/src/commands/issue.ts +84 -6
- package/ccw/src/core/routes/cli-routes.ts +30 -25
- package/ccw/src/templates/dashboard-js/views/help.js +1 -1
- package/ccw/src/tools/claude-cli-tools.ts +50 -0
- package/ccw/src/tools/codex-lens.ts +40 -11
- package/package.json +1 -1
|
@@ -43,7 +43,7 @@ Core requirements, objectives, technical approach summary (2-3 paragraphs max).
|
|
|
43
43
|
|
|
44
44
|
**Quality Gates**:
|
|
45
45
|
- concept-verify: ✅ Passed (0 ambiguities remaining) | ⏭️ Skipped (user decision) | ⏳ Pending
|
|
46
|
-
-
|
|
46
|
+
- plan-verify: ⏳ Pending (recommended before /workflow:execute)
|
|
47
47
|
|
|
48
48
|
**Context Package Summary**:
|
|
49
49
|
- **Focus Paths**: {list key directories from context-package.json}
|
|
@@ -168,6 +168,10 @@ interface IssueOptions {
|
|
|
168
168
|
limit?: number;
|
|
169
169
|
labels?: string;
|
|
170
170
|
}
|
|
171
|
+
/**
|
|
172
|
+
* Clear cached project root (for testing)
|
|
173
|
+
*/
|
|
174
|
+
export declare function clearProjectRootCache(): void;
|
|
171
175
|
export declare function readIssues(): Issue[];
|
|
172
176
|
export declare function writeIssues(issues: Issue[]): void;
|
|
173
177
|
export declare function readSolutions(issueId: string): Solution[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../../src/commands/issue.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA2BH,UAAU,aAAa;IACrB,IAAI,EAAE,SAAS,GAAG,eAAe,GAAG,WAAW,CAAC;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,KAAK;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC3G,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAGhB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAG/B,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAG3B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAGjC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,QAAQ;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,UAAU,cAAc;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,YAAY;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAGzE,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,cAAc,CAAC;IAC3B,MAAM,EAAE,UAAU,CAAC;IAEnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,QAAQ;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1C,QAAQ,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAGD,UAAU,aAAa;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC/E,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,aAAa,CAAC;IAChC,eAAe,CAAC,EAAE,aAAa,EAAE,CAAC;CACnC;AAED,UAAU,aAAa;IACrB,IAAI,EAAE,eAAe,GAAG,qBAAqB,GAAG,mBAAmB,CAAC;IACpE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,YAAY,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC9C,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,cAAc;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,GAAG,YAAY,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,UAAU,KAAK;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAC;IACvD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC;IACxB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,gBAAgB,CAAC,EAAE,cAAc,EAAE,CAAC;IACpC,SAAS,EAAE;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,MAAM,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAmBD,UAAU,YAAY;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../../src/commands/issue.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,25 @@ process.stdout.on('error', (err) => {
|
|
|
26
26
|
});
|
|
27
27
|
const ISSUES_DIR = '.workflow/issues';
|
|
28
28
|
// ============ Storage Layer (JSONL) ============
|
|
29
|
+
/**
|
|
30
|
+
* Cached project root to avoid repeated git command execution
|
|
31
|
+
*/
|
|
32
|
+
let cachedProjectRoot = null;
|
|
33
|
+
/**
|
|
34
|
+
* Clear cached project root (for testing)
|
|
35
|
+
*/
|
|
36
|
+
export function clearProjectRootCache() {
|
|
37
|
+
cachedProjectRoot = null;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Debug logging helper (enabled via CCW_DEBUG=true)
|
|
41
|
+
*/
|
|
42
|
+
const DEBUG = process.env.CCW_DEBUG === 'true';
|
|
43
|
+
function debugLog(msg) {
|
|
44
|
+
if (DEBUG) {
|
|
45
|
+
console.log(`[ccw:worktree] ${msg}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
29
48
|
/**
|
|
30
49
|
* Normalize path for comparison (handles Windows case sensitivity)
|
|
31
50
|
*/
|
|
@@ -63,7 +82,29 @@ function resolveMainRepoFromGitFile(gitFilePath) {
|
|
|
63
82
|
* This ensures .workflow/issues/ is always accessed from the main repo.
|
|
64
83
|
*/
|
|
65
84
|
function getProjectRoot() {
|
|
66
|
-
//
|
|
85
|
+
// Return cached result if available
|
|
86
|
+
if (cachedProjectRoot) {
|
|
87
|
+
debugLog(`Using cached project root: ${cachedProjectRoot}`);
|
|
88
|
+
return cachedProjectRoot;
|
|
89
|
+
}
|
|
90
|
+
debugLog(`Detecting project root from cwd: ${process.cwd()}`);
|
|
91
|
+
// Priority 1: Check CCW_MAIN_REPO environment variable
|
|
92
|
+
const envMainRepo = process.env.CCW_MAIN_REPO;
|
|
93
|
+
if (envMainRepo) {
|
|
94
|
+
debugLog(`Found CCW_MAIN_REPO env: ${envMainRepo}`);
|
|
95
|
+
const hasWorkflow = existsSync(join(envMainRepo, '.workflow'));
|
|
96
|
+
const hasGit = existsSync(join(envMainRepo, '.git'));
|
|
97
|
+
if (hasWorkflow || hasGit) {
|
|
98
|
+
debugLog(`CCW_MAIN_REPO validated (workflow=${hasWorkflow}, git=${hasGit})`);
|
|
99
|
+
cachedProjectRoot = envMainRepo;
|
|
100
|
+
return envMainRepo;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
console.warn('[ccw] CCW_MAIN_REPO is set but path is invalid (no .workflow or .git)');
|
|
104
|
+
console.warn(`[ccw] Path: ${envMainRepo}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Priority 2: Try to detect if we're in a git worktree using git commands
|
|
67
108
|
try {
|
|
68
109
|
// Get the common git directory (points to main repo's .git)
|
|
69
110
|
const gitCommonDir = execSync('git rev-parse --git-common-dir', {
|
|
@@ -77,6 +118,8 @@ function getProjectRoot() {
|
|
|
77
118
|
stdio: ['pipe', 'pipe', 'pipe'],
|
|
78
119
|
timeout: EXEC_TIMEOUTS.GIT_QUICK,
|
|
79
120
|
}).trim();
|
|
121
|
+
debugLog(`Git common dir: ${gitCommonDir}`);
|
|
122
|
+
debugLog(`Git dir: ${gitDir}`);
|
|
80
123
|
// Normalize paths for comparison (Windows case insensitive)
|
|
81
124
|
const normalizedCommon = normalizePath(gitCommonDir);
|
|
82
125
|
const normalizedGit = normalizePath(gitDir);
|
|
@@ -86,8 +129,11 @@ function getProjectRoot() {
|
|
|
86
129
|
const absoluteCommonDir = resolve(process.cwd(), gitCommonDir);
|
|
87
130
|
// .git directory's parent is the repo root
|
|
88
131
|
const mainRepoRoot = resolve(absoluteCommonDir, '..');
|
|
132
|
+
debugLog(`Detected worktree, main repo: ${mainRepoRoot}`);
|
|
89
133
|
// Verify .workflow or .git exists in main repo
|
|
90
134
|
if (existsSync(join(mainRepoRoot, '.workflow')) || existsSync(join(mainRepoRoot, '.git'))) {
|
|
135
|
+
debugLog(`Main repo validated, returning: ${mainRepoRoot}`);
|
|
136
|
+
cachedProjectRoot = mainRepoRoot;
|
|
91
137
|
return mainRepoRoot;
|
|
92
138
|
}
|
|
93
139
|
}
|
|
@@ -96,9 +142,10 @@ function getProjectRoot() {
|
|
|
96
142
|
if (isExecTimeoutError(err)) {
|
|
97
143
|
console.warn(`[issue] git rev-parse timed out after ${EXEC_TIMEOUTS.GIT_QUICK}ms; falling back to filesystem detection`);
|
|
98
144
|
}
|
|
145
|
+
debugLog(`Git command failed, falling back to filesystem detection`);
|
|
99
146
|
// Git command failed - fall through to manual detection
|
|
100
147
|
}
|
|
101
|
-
// Standard detection with worktree file support: walk up to find .workflow or .git
|
|
148
|
+
// Priority 3: Standard detection with worktree file support: walk up to find .workflow or .git
|
|
102
149
|
let dir = process.cwd();
|
|
103
150
|
while (dir !== resolve(dir, '..')) {
|
|
104
151
|
const gitPath = join(dir, '.git');
|
|
@@ -109,22 +156,42 @@ function getProjectRoot() {
|
|
|
109
156
|
if (gitStat.isFile()) {
|
|
110
157
|
// .git is a file - this is a worktree, try to resolve main repo
|
|
111
158
|
const mainRepo = resolveMainRepoFromGitFile(gitPath);
|
|
112
|
-
|
|
113
|
-
|
|
159
|
+
debugLog(`Parsed .git file, main repo: ${mainRepo}`);
|
|
160
|
+
if (mainRepo) {
|
|
161
|
+
// Verify main repo has .git directory (always true for main repo)
|
|
162
|
+
// Don't require .workflow - it may not exist yet in a new repo
|
|
163
|
+
const hasGit = existsSync(join(mainRepo, '.git'));
|
|
164
|
+
const hasWorkflow = existsSync(join(mainRepo, '.workflow'));
|
|
165
|
+
if (hasGit || hasWorkflow) {
|
|
166
|
+
if (!hasWorkflow) {
|
|
167
|
+
console.warn('[ccw] Worktree detected but main repo has no .workflow directory');
|
|
168
|
+
console.warn(`[ccw] Main repo: ${mainRepo}`);
|
|
169
|
+
console.warn('[ccw] Issue commands may fail until .workflow is created');
|
|
170
|
+
console.warn('[ccw] Set CCW_MAIN_REPO environment variable to override detection');
|
|
171
|
+
}
|
|
172
|
+
debugLog(`Main repo validated via .git file (git=${hasGit}, workflow=${hasWorkflow})`);
|
|
173
|
+
cachedProjectRoot = mainRepo;
|
|
174
|
+
return mainRepo;
|
|
175
|
+
}
|
|
114
176
|
}
|
|
115
|
-
// If main repo doesn't have .workflow, fall back to current worktree
|
|
116
177
|
}
|
|
117
178
|
}
|
|
118
179
|
catch {
|
|
119
180
|
// stat failed, continue with normal logic
|
|
181
|
+
debugLog(`Failed to stat ${gitPath}, continuing`);
|
|
120
182
|
}
|
|
121
183
|
}
|
|
122
184
|
if (existsSync(join(dir, '.workflow')) || existsSync(gitPath)) {
|
|
185
|
+
debugLog(`Found project root at: ${dir}`);
|
|
186
|
+
cachedProjectRoot = dir;
|
|
123
187
|
return dir;
|
|
124
188
|
}
|
|
125
189
|
dir = resolve(dir, '..');
|
|
126
190
|
}
|
|
127
|
-
|
|
191
|
+
debugLog(`No project root found, using cwd: ${process.cwd()}`);
|
|
192
|
+
const fallback = process.cwd();
|
|
193
|
+
cachedProjectRoot = fallback;
|
|
194
|
+
return fallback;
|
|
128
195
|
}
|
|
129
196
|
function getIssuesDir() {
|
|
130
197
|
return join(getProjectRoot(), ISSUES_DIR);
|