specweave 1.0.586 → 1.0.587

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 (63) hide show
  1. package/bin/specweave.js +30 -0
  2. package/dist/plugins/specweave/lib/integrations/github/github-access-error.d.ts +48 -0
  3. package/dist/plugins/specweave/lib/integrations/github/github-access-error.d.ts.map +1 -0
  4. package/dist/plugins/specweave/lib/integrations/github/github-access-error.js +69 -0
  5. package/dist/plugins/specweave/lib/integrations/github/github-access-error.js.map +1 -0
  6. package/dist/plugins/specweave/lib/integrations/github/github-client-v2.d.ts +8 -0
  7. package/dist/plugins/specweave/lib/integrations/github/github-client-v2.d.ts.map +1 -1
  8. package/dist/plugins/specweave/lib/integrations/github/github-client-v2.js +22 -2
  9. package/dist/plugins/specweave/lib/integrations/github/github-client-v2.js.map +1 -1
  10. package/dist/plugins/specweave/lib/vendor/generators/spec/task-parser.js +38 -16
  11. package/dist/plugins/specweave/lib/vendor/generators/spec/task-parser.js.map +1 -1
  12. package/dist/src/cli/commands/handoff.d.ts +54 -0
  13. package/dist/src/cli/commands/handoff.d.ts.map +1 -0
  14. package/dist/src/cli/commands/handoff.js +82 -0
  15. package/dist/src/cli/commands/handoff.js.map +1 -0
  16. package/dist/src/cli/helpers/init/gitignore-generator.d.ts.map +1 -1
  17. package/dist/src/cli/helpers/init/gitignore-generator.js +3 -0
  18. package/dist/src/cli/helpers/init/gitignore-generator.js.map +1 -1
  19. package/dist/src/core/hooks/handlers/hook-router.d.ts.map +1 -1
  20. package/dist/src/core/hooks/handlers/hook-router.js +5 -0
  21. package/dist/src/core/hooks/handlers/hook-router.js.map +1 -1
  22. package/dist/src/core/hooks/handlers/pre-compact.d.ts +33 -0
  23. package/dist/src/core/hooks/handlers/pre-compact.d.ts.map +1 -0
  24. package/dist/src/core/hooks/handlers/pre-compact.js +109 -0
  25. package/dist/src/core/hooks/handlers/pre-compact.js.map +1 -0
  26. package/dist/src/core/hooks/handlers/types.d.ts +1 -1
  27. package/dist/src/core/hooks/handlers/types.d.ts.map +1 -1
  28. package/dist/src/core/hooks/handlers/types.js +3 -0
  29. package/dist/src/core/hooks/handlers/types.js.map +1 -1
  30. package/dist/src/core/session/handoff-doc-format.d.ts +164 -0
  31. package/dist/src/core/session/handoff-doc-format.d.ts.map +1 -0
  32. package/dist/src/core/session/handoff-doc-format.js +292 -0
  33. package/dist/src/core/session/handoff-doc-format.js.map +1 -0
  34. package/dist/src/core/session/handoff-git-state.d.ts +49 -0
  35. package/dist/src/core/session/handoff-git-state.d.ts.map +1 -0
  36. package/dist/src/core/session/handoff-git-state.js +164 -0
  37. package/dist/src/core/session/handoff-git-state.js.map +1 -0
  38. package/dist/src/core/session/handoff-secret-scrub.d.ts +59 -0
  39. package/dist/src/core/session/handoff-secret-scrub.d.ts.map +1 -0
  40. package/dist/src/core/session/handoff-secret-scrub.js +72 -0
  41. package/dist/src/core/session/handoff-secret-scrub.js.map +1 -0
  42. package/dist/src/core/session/{handoff-context.d.ts → install-handoff-context.d.ts} +7 -3
  43. package/dist/src/core/session/install-handoff-context.d.ts.map +1 -0
  44. package/dist/src/core/session/{handoff-context.js → install-handoff-context.js} +7 -3
  45. package/dist/src/core/session/install-handoff-context.js.map +1 -0
  46. package/dist/src/core/session/work-handoff.d.ts +88 -0
  47. package/dist/src/core/session/work-handoff.d.ts.map +1 -0
  48. package/dist/src/core/session/work-handoff.js +412 -0
  49. package/dist/src/core/session/work-handoff.js.map +1 -0
  50. package/dist/src/generators/spec/task-parser.d.ts.map +1 -1
  51. package/dist/src/generators/spec/task-parser.js +38 -16
  52. package/dist/src/generators/spec/task-parser.js.map +1 -1
  53. package/package.json +1 -1
  54. package/plugins/specweave/commands/handoff.md +54 -0
  55. package/plugins/specweave/lib/integrations/github/github-access-error.js +43 -0
  56. package/plugins/specweave/lib/integrations/github/github-access-error.ts +103 -0
  57. package/plugins/specweave/lib/integrations/github/github-client-v2.js +24 -4
  58. package/plugins/specweave/lib/integrations/github/github-client-v2.ts +26 -4
  59. package/plugins/specweave/lib/vendor/generators/spec/task-parser.js +38 -16
  60. package/plugins/specweave/lib/vendor/generators/spec/task-parser.js.map +1 -1
  61. package/plugins/specweave/skills/handoff/SKILL.md +59 -0
  62. package/dist/src/core/session/handoff-context.d.ts.map +0 -1
  63. package/dist/src/core/session/handoff-context.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-handoff.js","sourceRoot":"","sources":["../../../../src/core/session/work-handoff.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"task-parser.d.ts","sourceRoot":"","sources":["../../../../src/generators/spec/task-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IAEX,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IAEd,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,6BAA6B;IAC7B,MAAM,EAAE,UAAU,CAAC;IAEnB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,mDAAmD;IACnD,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,kCAAkC;IAClC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,aAAa,GAAG,UAAU,CAAC;AAE9F;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,GAAG,cAAc,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAaD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CA0IzE;AAoBD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,MAAM,EAAE,EACpB,UAAU,EAAE,MAAM,EAAE,GACnB,gBAAgB,EAAE,CAyEpB;AAkBD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI,EAAE,CAE/D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAc1F;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM,CAMjF"}
1
+ {"version":3,"file":"task-parser.d.ts","sourceRoot":"","sources":["../../../../src/generators/spec/task-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IAEX,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IAEd,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,6BAA6B;IAC7B,MAAM,EAAE,UAAU,CAAC;IAEnB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,mDAAmD;IACnD,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,kCAAkC;IAClC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,aAAa,GAAG,UAAU,CAAC;AAE9F;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,GAAG,cAAc,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAaD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAiKzE;AAoBD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,MAAM,EAAE,EACpB,UAAU,EAAE,MAAM,EAAE,GACnB,gBAAgB,EAAE,CAyEpB;AAkBD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI,EAAE,CAE/D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAc1F;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM,CAMjF"}
@@ -37,13 +37,27 @@ export function parseTasksWithUSLinks(tasksPath) {
37
37
  const lines = content.split('\n');
38
38
  // Regex patterns for task parsing (T-029: Support E suffix for external IDs)
39
39
  // Updated: Support 3+ digits for T-XXX and US-XXX (Y2K fix)
40
+ //
41
+ // 0867: These field regexes are NOT `^`-anchored. The canonical task format
42
+ // combines several fields on ONE line separated by `|`:
43
+ // **User Story**: US-001 | **Satisfies ACs**: AC-US1-01 | **Status**: [x] completed
44
+ // The line is split on `|` and each segment matched independently (see
45
+ // below). Previously these were `^`-anchored and the userStory match
46
+ // early-`continue`d, silently dropping same-line `Satisfies ACs`/`Status` —
47
+ // making every combined-format task read as `pending` (whole-codebase bug).
48
+ // The multi-line format (each `**Field**:` on its own line) still parses
49
+ // because each line is a single segment.
40
50
  const taskHeaderRegex = /^###\s+(T-\d{3,}E?):\s*(.+)$/;
41
- const userStoryRegex = /^\*\*User Story\*\*:\s*(US-\d{3,}E?)/;
42
- const satisfiesACsRegex = /^\*\*Satisfies ACs\*\*:\s*(AC-US\d+E?-\d{2}(?:,\s*AC-US\d+E?-\d{2})*)/;
43
- const statusRegex = /^\*\*Status\*\*:\s*\[([x ])\]\s*(\w+)/;
44
- const priorityRegex = /^\*\*Priority\*\*:\s*(.+)/;
45
- const estimatedEffortRegex = /^\*\*Estimated Effort\*\*:\s*(.+)/;
46
- const dependenciesRegex = /^\*\*Dependencies\*\*:\s*(.+)/;
51
+ const userStoryRegex = /\*\*User Story\*\*:\s*(US-\d{3,}E?)/;
52
+ const satisfiesACsRegex = /\*\*Satisfies ACs\*\*:\s*(AC-US\d+E?-\d{2}(?:,\s*AC-US\d+E?-\d{2})*)/;
53
+ // Trailing status word is OPTIONAL: a checkbox-only `**Status**: [x]` is a
54
+ // valid completed task. The checkbox is the source of truth (see
55
+ // parseTaskStatus), so requiring `(\w+)` here would silently under-report a
56
+ // bare-checkbox task as pending — the same drop-class T-019 fixed.
57
+ const statusRegex = /\*\*Status\*\*:\s*\[([x ])\]\s*(\w+)?/;
58
+ const priorityRegex = /\*\*Priority\*\*:\s*([^|]+)/;
59
+ const estimatedEffortRegex = /\*\*Estimated Effort\*\*:\s*([^|]+)/;
60
+ const dependenciesRegex = /\*\*Dependencies\*\*:\s*([^|]+)/;
47
61
  let currentTask = null;
48
62
  let currentDescription = [];
49
63
  let currentSection = 'none';
@@ -71,11 +85,16 @@ export function parseTasksWithUSLinks(tasksPath) {
71
85
  // Skip if no current task
72
86
  if (!currentTask)
73
87
  continue;
74
- // Parse task fields
88
+ // Parse task fields. A single line may carry MULTIPLE `**Field**:`
89
+ // segments separated by `|`, so we extract EVERY recognized field from
90
+ // the line instead of early-`continue`ing after the first match. The
91
+ // regexes are unanchored (above), and value-capturing fields stop at `|`
92
+ // so a later segment's value isn't swallowed.
93
+ let matchedAnyField = false;
75
94
  const userStoryMatch = line.match(userStoryRegex);
76
95
  if (userStoryMatch) {
77
96
  currentTask.userStory = userStoryMatch[1];
78
- continue;
97
+ matchedAnyField = true;
79
98
  }
80
99
  const satisfiesACsMatch = line.match(satisfiesACsRegex);
81
100
  if (satisfiesACsMatch) {
@@ -83,24 +102,25 @@ export function parseTasksWithUSLinks(tasksPath) {
83
102
  currentTask.satisfiesACs = satisfiesACsMatch[1]
84
103
  .split(',')
85
104
  .map(ac => ac.trim());
86
- continue;
105
+ matchedAnyField = true;
87
106
  }
88
107
  const statusMatch = line.match(statusRegex);
89
108
  if (statusMatch) {
90
109
  const checkbox = statusMatch[1];
91
- const statusText = statusMatch[2].toLowerCase();
110
+ // statusMatch[2] is optional (bare `[x]` has no trailing word).
111
+ const statusText = (statusMatch[2] ?? '').toLowerCase();
92
112
  currentTask.status = parseTaskStatus(checkbox, statusText);
93
- continue;
113
+ matchedAnyField = true;
94
114
  }
95
115
  const priorityMatch = line.match(priorityRegex);
96
116
  if (priorityMatch) {
97
- currentTask.priority = priorityMatch[1];
98
- continue;
117
+ currentTask.priority = priorityMatch[1].trim();
118
+ matchedAnyField = true;
99
119
  }
100
120
  const estimatedEffortMatch = line.match(estimatedEffortRegex);
101
121
  if (estimatedEffortMatch) {
102
- currentTask.estimatedEffort = estimatedEffortMatch[1];
103
- continue;
122
+ currentTask.estimatedEffort = estimatedEffortMatch[1].trim();
123
+ matchedAnyField = true;
104
124
  }
105
125
  const dependenciesMatch = line.match(dependenciesRegex);
106
126
  if (dependenciesMatch) {
@@ -109,8 +129,10 @@ export function parseTasksWithUSLinks(tasksPath) {
109
129
  .split(',')
110
130
  .map(dep => dep.trim())
111
131
  .filter(dep => dep.match(/^T-\d{3,}$/));
112
- continue;
132
+ matchedAnyField = true;
113
133
  }
134
+ if (matchedAnyField)
135
+ continue;
114
136
  // Track sections for description parsing
115
137
  if (line.startsWith('**Description**:')) {
116
138
  currentSection = 'description';
@@ -1 +1 @@
1
- {"version":3,"file":"task-parser.js","sourceRoot":"","sources":["../../../../src/generators/spec/task-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-parser.js","sourceRoot":"","sources":["../../../../src/generators/spec/task-parser.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "specweave",
3
- "version": "1.0.586",
3
+ "version": "1.0.587",
4
4
  "description": "100+ domain-expert AI skills — PM, Architect, Frontend, QA, Security and more. Skills learn your team's patterns permanently. Spec-first planning, autonomous execution, multi-agent teams, synced to GitHub/JIRA. Claude Code, Cursor, Copilot & more.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -0,0 +1,54 @@
1
+ ---
2
+ description: Write a portable, secret-scrubbed work handoff doc so you can continue this work in any AI tool. Use when saying "handoff", "running out of tokens", "switch to Codex/OpenCode/Gemini/Cursor", "continue elsewhere", or "continue on another machine".
3
+ argument-hint: "[incrementId] [--reason ...] [--summary ...] [--next ...] [--gotcha ...] [--decision ...] [--inline]"
4
+ ---
5
+
6
+ # Work Handoff (Cross-Tool)
7
+
8
+ Assemble the current work state into one portable, self-contained handoff document so the work can be picked up in another AI coding tool — Claude Code, Codex, OpenCode, Gemini, Antigravity, Cursor, Aider — picking up exactly where you left off, uncommitted edits and all.
9
+
10
+ The expensive, deterministic work (workspace detection, task/AC parsing, git capture, full-diff dump, secret scrub, rendering) is done by the `specweave handoff` CLI subcommand. This command is a thin wrapper that runs it and surfaces the output.
11
+
12
+ ## When to use
13
+
14
+ - You are low on subscription tokens and want to continue in another tool.
15
+ - You want a durable artifact that survives a context crash.
16
+ - You are moving to another machine (`--inline` embeds the full doc in the paste-prompt).
17
+
18
+ ## Workflow
19
+
20
+ ### Step 1: Run the CLI
21
+
22
+ Pass through whatever short context the agent can supply cheaply. All flags are optional — the CLI derives everything it can from disk.
23
+
24
+ ```bash
25
+ specweave handoff $ARGUMENTS
26
+ ```
27
+
28
+ `$ARGUMENTS` forwards `[incrementId]` plus any `--reason`, `--summary`, `--next`, `--gotcha`, `--decision`, and `--inline` flags the user (or agent) provided.
29
+
30
+ - No `incrementId` and exactly one active increment → it is used automatically.
31
+ - No active increment → a git + interview handoff is written (still portable).
32
+ - 2+ active increments and no `incrementId` → the CLI errors listing the candidate ids; re-run with the chosen id.
33
+
34
+ ### Step 2: Surface the output VERBATIM, in order
35
+
36
+ The CLI prints, in this exact order — present it to the user without reordering:
37
+
38
+ 1. **The absolute doc path as plain text** (so it is copyable/clickable in any terminal).
39
+ 2. A clickable markdown link to the doc.
40
+ 3. The `.diff` path holding the exact uncommitted edits.
41
+ 4. A fenced copy-paste **resume prompt** to drop into the next tool.
42
+ 5. Per-tool "find your source session" tips (Claude `claude -r <uuid>`, Codex `codex resume <uuid>`, OpenCode `opencode -s <id>`, etc.).
43
+
44
+ Do NOT re-summarize or reformat the resume prompt — the user copies it as-is.
45
+
46
+ ### Step 3: Note the safety defaults
47
+
48
+ The doc and diff are **secret-scrubbed and gitignored by default** (`.handoff/` or `.specweave/state/handoff-latest.*`). Scrubbing is heuristic — remind the user to review before sharing. Nothing is committed and no `git add` hint is printed.
49
+
50
+ ## Related
51
+
52
+ - `sw:progress` — check increment status without writing a handoff.
53
+ - `sw:next` — close the current increment and suggest next work.
54
+ - The portable doc format and cross-tool resume matrix: see the `handoff` skill and `docs/guides/cross-tool-handoff.md`.
@@ -0,0 +1,43 @@
1
+ function isLikelyAccessError(raw) {
2
+ if (!raw) return false;
3
+ return /\bHTTP 4(0[134])\b|\b4(0[134])\b|not found|forbidden|resource not accessible|must have admin|permission/i.test(
4
+ raw
5
+ );
6
+ }
7
+ function explainGitHubAccessError(rawError, facts) {
8
+ if (!isLikelyAccessError(rawError)) return null;
9
+ const { login, canPush, owner, repo } = facts;
10
+ if (canPush === true) return null;
11
+ const who = login ? `The GitHub token in .env belongs to account '${login}', which has no write access to ${owner}/${repo}.` : `The GitHub token in .env is invalid or expired \u2014 its account could not be resolved.`;
12
+ return [
13
+ who,
14
+ `GitHub returns 404 (not 403) when a token's account cannot see a repo, which is why this looked like "Not Found".`,
15
+ `Fix: point GITHUB_TOKEN / GH_TOKEN in .env at a token whose account can write ${owner}/${repo}, or run \`gh auth login\` with the right account.`,
16
+ `Original error: ${rawError.trim()}`
17
+ ].join("\n");
18
+ }
19
+ async function resolveGitHubAccessFacts(exec, env, owner, repo) {
20
+ let login = null;
21
+ try {
22
+ const u = await exec("gh", ["api", "user", "--jq", ".login"], { env });
23
+ if (u.exitCode === 0) login = u.stdout.trim() || null;
24
+ } catch {
25
+ }
26
+ let canPush = null;
27
+ try {
28
+ const r = await exec(
29
+ "gh",
30
+ ["api", `repos/${owner}/${repo}`, "--jq", ".permissions.push // false"],
31
+ { env }
32
+ );
33
+ if (r.exitCode === 0) canPush = r.stdout.trim() === "true";
34
+ else canPush = false;
35
+ } catch {
36
+ }
37
+ return { login, canPush };
38
+ }
39
+ export {
40
+ explainGitHubAccessError,
41
+ isLikelyAccessError,
42
+ resolveGitHubAccessFacts
43
+ };
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Diagnose GitHub "create" failures that are really auth/access problems.
3
+ *
4
+ * GitHub returns **404 Not Found** (not 403) when a token's account cannot even
5
+ * SEE a repo — so a token in `.env` whose account lacks write access to the
6
+ * target repo surfaces as a confusing `gh: Not Found (HTTP 404)` at
7
+ * issue/milestone create. This module turns that into a clear, actionable error
8
+ * naming the token's account and the repo it can't write.
9
+ */
10
+
11
+ export interface GitHubAccessFacts {
12
+ /** Login of the account the token belongs to, or null if the token is invalid. */
13
+ login: string | null;
14
+ /** Whether that account can push to owner/repo; null when it couldn't be determined. */
15
+ canPush: boolean | null;
16
+ owner: string;
17
+ repo: string;
18
+ }
19
+
20
+ /** Minimal exec-result shape (matches execFileNoThrow / execWithBudget). */
21
+ export interface ExecResult {
22
+ stdout: string;
23
+ stderr: string;
24
+ exitCode: number;
25
+ }
26
+
27
+ export type ExecFn = (
28
+ command: string,
29
+ args: string[],
30
+ options?: { env?: NodeJS.ProcessEnv },
31
+ ) => Promise<ExecResult>;
32
+
33
+ /**
34
+ * True if a gh CLI error string looks like an access/permission failure.
35
+ * 404 Not Found is included on purpose: GitHub masks "no access" as 404.
36
+ */
37
+ export function isLikelyAccessError(raw: string | undefined): boolean {
38
+ if (!raw) return false;
39
+ return /\bHTTP 4(0[134])\b|\b4(0[134])\b|not found|forbidden|resource not accessible|must have admin|permission/i.test(
40
+ raw,
41
+ );
42
+ }
43
+
44
+ /**
45
+ * Build a clear, actionable error message for a failed GitHub create, or null
46
+ * when the failure is not an auth/access problem (callers then fall back to the
47
+ * raw error). Returns null when the token's account demonstrably CAN push, so a
48
+ * genuine missing resource isn't misreported as an auth issue.
49
+ */
50
+ export function explainGitHubAccessError(
51
+ rawError: string,
52
+ facts: GitHubAccessFacts,
53
+ ): string | null {
54
+ if (!isLikelyAccessError(rawError)) return null;
55
+ const { login, canPush, owner, repo } = facts;
56
+ if (canPush === true) return null;
57
+
58
+ const who = login
59
+ ? `The GitHub token in .env belongs to account '${login}', which has no write access to ${owner}/${repo}.`
60
+ : `The GitHub token in .env is invalid or expired — its account could not be resolved.`;
61
+
62
+ return [
63
+ who,
64
+ `GitHub returns 404 (not 403) when a token's account cannot see a repo, which is why this looked like "Not Found".`,
65
+ `Fix: point GITHUB_TOKEN / GH_TOKEN in .env at a token whose account can write ${owner}/${repo}, or run \`gh auth login\` with the right account.`,
66
+ `Original error: ${rawError.trim()}`,
67
+ ].join('\n');
68
+ }
69
+
70
+ /**
71
+ * Resolve the token account's login + whether it can push to owner/repo, using
72
+ * the gh CLI with the same token env the failing call used. Best-effort: any
73
+ * probe that fails leaves its field null/false instead of throwing.
74
+ */
75
+ export async function resolveGitHubAccessFacts(
76
+ exec: ExecFn,
77
+ env: NodeJS.ProcessEnv | undefined,
78
+ owner: string,
79
+ repo: string,
80
+ ): Promise<{ login: string | null; canPush: boolean | null }> {
81
+ let login: string | null = null;
82
+ try {
83
+ const u = await exec('gh', ['api', 'user', '--jq', '.login'], { env });
84
+ if (u.exitCode === 0) login = u.stdout.trim() || null;
85
+ } catch {
86
+ /* leave login null */
87
+ }
88
+
89
+ let canPush: boolean | null = null;
90
+ try {
91
+ const r = await exec(
92
+ 'gh',
93
+ ['api', `repos/${owner}/${repo}`, '--jq', '.permissions.push // false'],
94
+ { env },
95
+ );
96
+ if (r.exitCode === 0) canPush = r.stdout.trim() === 'true';
97
+ else canPush = false; // 404/403 on the repo itself → no access
98
+ } catch {
99
+ /* leave canPush null */
100
+ }
101
+
102
+ return { login, canPush };
103
+ }
@@ -1,4 +1,5 @@
1
1
  import { execFileNoThrow } from "../../vendor/utils/execFileNoThrow.js";
2
+ import { explainGitHubAccessError, resolveGitHubAccessFacts } from "./github-access-error.js";
2
3
  import { checkAndDecrement } from "../../../../../src/sync/github-rate-limit-budget.js";
3
4
  import { findProjectRoot } from "../../../../../src/utils/find-project-root.js";
4
5
  const _GitHubClientV2 = class _GitHubClientV2 {
@@ -29,6 +30,27 @@ const _GitHubClientV2 = class _GitHubClientV2 {
29
30
  getGhEnv() {
30
31
  return this.token ? { ...process.env, GH_TOKEN: this.token } : process.env;
31
32
  }
33
+ /**
34
+ * Turn a failed `gh` create result into a clear error.
35
+ *
36
+ * When the failure looks like an auth/access problem (notably a 404 masking a
37
+ * wrong-account token in .env), resolve the token's account + write access and
38
+ * explain exactly what to fix; otherwise fall back to the raw gh error.
39
+ */
40
+ async buildCreateError(action, rawError) {
41
+ try {
42
+ const facts = await resolveGitHubAccessFacts(
43
+ execFileNoThrow,
44
+ this.getGhEnv(),
45
+ this.owner,
46
+ this.repo
47
+ );
48
+ const explained = explainGitHubAccessError(rawError, { ...facts, owner: this.owner, repo: this.repo });
49
+ if (explained) return new Error(`Failed to ${action}: ${explained}`);
50
+ } catch {
51
+ }
52
+ return new Error(`Failed to ${action}: ${rawError}`);
53
+ }
32
54
  /**
33
55
  * Set the project root for rate-limit budget tracking.
34
56
  * When set, all API calls check the shared budget before executing.
@@ -153,7 +175,7 @@ const _GitHubClientV2 = class _GitHubClientV2 {
153
175
  }
154
176
  const result = await this.execWithBudget("gh", args, { env: this.getGhEnv() });
155
177
  if (result.exitCode !== 0) {
156
- throw new Error(`Failed to create milestone: ${result.stderr || result.stdout}`);
178
+ throw await this.buildCreateError("create milestone", result.stderr || result.stdout);
157
179
  }
158
180
  return JSON.parse(result.stdout);
159
181
  }
@@ -324,9 +346,7 @@ FIX:
324
346
  }
325
347
  const createResult = await this.execWithBudget("gh", args, { env: this.getGhEnv() });
326
348
  if (createResult.exitCode !== 0) {
327
- throw new Error(
328
- `Failed to create epic issue: ${createResult.stderr || createResult.stdout}`
329
- );
349
+ throw await this.buildCreateError("create issue", createResult.stderr || createResult.stdout);
330
350
  }
331
351
  const issueUrl = createResult.stdout.trim();
332
352
  const issueNumber = parseInt(issueUrl.split("/").pop() || "0", 10);
@@ -9,6 +9,7 @@
9
9
  */
10
10
 
11
11
  import { execFileNoThrow } from '../../vendor/utils/execFileNoThrow.js';
12
+ import { explainGitHubAccessError, resolveGitHubAccessFacts } from './github-access-error.js';
12
13
  import { GitHubIssue, GitHubMilestone, GitHubExternalChange } from './types';
13
14
  import { SyncProfile, GitHubConfig, TimeRangePreset } from '../../../../../src/core/types/sync-profile';
14
15
  import { checkAndDecrement } from '../../../../../src/sync/github-rate-limit-budget.js';
@@ -58,6 +59,29 @@ export class GitHubClientV2 {
58
59
  : process.env;
59
60
  }
60
61
 
62
+ /**
63
+ * Turn a failed `gh` create result into a clear error.
64
+ *
65
+ * When the failure looks like an auth/access problem (notably a 404 masking a
66
+ * wrong-account token in .env), resolve the token's account + write access and
67
+ * explain exactly what to fix; otherwise fall back to the raw gh error.
68
+ */
69
+ private async buildCreateError(action: string, rawError: string): Promise<Error> {
70
+ try {
71
+ const facts = await resolveGitHubAccessFacts(
72
+ execFileNoThrow,
73
+ this.getGhEnv(),
74
+ this.owner,
75
+ this.repo,
76
+ );
77
+ const explained = explainGitHubAccessError(rawError, { ...facts, owner: this.owner, repo: this.repo });
78
+ if (explained) return new Error(`Failed to ${action}: ${explained}`);
79
+ } catch {
80
+ /* fall through to the raw error */
81
+ }
82
+ return new Error(`Failed to ${action}: ${rawError}`);
83
+ }
84
+
61
85
  /**
62
86
  * Set the project root for rate-limit budget tracking.
63
87
  * When set, all API calls check the shared budget before executing.
@@ -221,7 +245,7 @@ export class GitHubClientV2 {
221
245
  const result = await this.execWithBudget('gh', args, { env: this.getGhEnv() });
222
246
 
223
247
  if (result.exitCode !== 0) {
224
- throw new Error(`Failed to create milestone: ${result.stderr || result.stdout}`);
248
+ throw await this.buildCreateError('create milestone', result.stderr || result.stdout);
225
249
  }
226
250
 
227
251
  return JSON.parse(result.stdout);
@@ -435,9 +459,7 @@ export class GitHubClientV2 {
435
459
  const createResult = await this.execWithBudget('gh', args, { env: this.getGhEnv() });
436
460
 
437
461
  if (createResult.exitCode !== 0) {
438
- throw new Error(
439
- `Failed to create epic issue: ${createResult.stderr || createResult.stdout}`
440
- );
462
+ throw await this.buildCreateError('create issue', createResult.stderr || createResult.stdout);
441
463
  }
442
464
 
443
465
  const issueUrl = createResult.stdout.trim();
@@ -37,13 +37,27 @@ export function parseTasksWithUSLinks(tasksPath) {
37
37
  const lines = content.split('\n');
38
38
  // Regex patterns for task parsing (T-029: Support E suffix for external IDs)
39
39
  // Updated: Support 3+ digits for T-XXX and US-XXX (Y2K fix)
40
+ //
41
+ // 0867: These field regexes are NOT `^`-anchored. The canonical task format
42
+ // combines several fields on ONE line separated by `|`:
43
+ // **User Story**: US-001 | **Satisfies ACs**: AC-US1-01 | **Status**: [x] completed
44
+ // The line is split on `|` and each segment matched independently (see
45
+ // below). Previously these were `^`-anchored and the userStory match
46
+ // early-`continue`d, silently dropping same-line `Satisfies ACs`/`Status` —
47
+ // making every combined-format task read as `pending` (whole-codebase bug).
48
+ // The multi-line format (each `**Field**:` on its own line) still parses
49
+ // because each line is a single segment.
40
50
  const taskHeaderRegex = /^###\s+(T-\d{3,}E?):\s*(.+)$/;
41
- const userStoryRegex = /^\*\*User Story\*\*:\s*(US-\d{3,}E?)/;
42
- const satisfiesACsRegex = /^\*\*Satisfies ACs\*\*:\s*(AC-US\d+E?-\d{2}(?:,\s*AC-US\d+E?-\d{2})*)/;
43
- const statusRegex = /^\*\*Status\*\*:\s*\[([x ])\]\s*(\w+)/;
44
- const priorityRegex = /^\*\*Priority\*\*:\s*(.+)/;
45
- const estimatedEffortRegex = /^\*\*Estimated Effort\*\*:\s*(.+)/;
46
- const dependenciesRegex = /^\*\*Dependencies\*\*:\s*(.+)/;
51
+ const userStoryRegex = /\*\*User Story\*\*:\s*(US-\d{3,}E?)/;
52
+ const satisfiesACsRegex = /\*\*Satisfies ACs\*\*:\s*(AC-US\d+E?-\d{2}(?:,\s*AC-US\d+E?-\d{2})*)/;
53
+ // Trailing status word is OPTIONAL: a checkbox-only `**Status**: [x]` is a
54
+ // valid completed task. The checkbox is the source of truth (see
55
+ // parseTaskStatus), so requiring `(\w+)` here would silently under-report a
56
+ // bare-checkbox task as pending — the same drop-class T-019 fixed.
57
+ const statusRegex = /\*\*Status\*\*:\s*\[([x ])\]\s*(\w+)?/;
58
+ const priorityRegex = /\*\*Priority\*\*:\s*([^|]+)/;
59
+ const estimatedEffortRegex = /\*\*Estimated Effort\*\*:\s*([^|]+)/;
60
+ const dependenciesRegex = /\*\*Dependencies\*\*:\s*([^|]+)/;
47
61
  let currentTask = null;
48
62
  let currentDescription = [];
49
63
  let currentSection = 'none';
@@ -71,11 +85,16 @@ export function parseTasksWithUSLinks(tasksPath) {
71
85
  // Skip if no current task
72
86
  if (!currentTask)
73
87
  continue;
74
- // Parse task fields
88
+ // Parse task fields. A single line may carry MULTIPLE `**Field**:`
89
+ // segments separated by `|`, so we extract EVERY recognized field from
90
+ // the line instead of early-`continue`ing after the first match. The
91
+ // regexes are unanchored (above), and value-capturing fields stop at `|`
92
+ // so a later segment's value isn't swallowed.
93
+ let matchedAnyField = false;
75
94
  const userStoryMatch = line.match(userStoryRegex);
76
95
  if (userStoryMatch) {
77
96
  currentTask.userStory = userStoryMatch[1];
78
- continue;
97
+ matchedAnyField = true;
79
98
  }
80
99
  const satisfiesACsMatch = line.match(satisfiesACsRegex);
81
100
  if (satisfiesACsMatch) {
@@ -83,24 +102,25 @@ export function parseTasksWithUSLinks(tasksPath) {
83
102
  currentTask.satisfiesACs = satisfiesACsMatch[1]
84
103
  .split(',')
85
104
  .map(ac => ac.trim());
86
- continue;
105
+ matchedAnyField = true;
87
106
  }
88
107
  const statusMatch = line.match(statusRegex);
89
108
  if (statusMatch) {
90
109
  const checkbox = statusMatch[1];
91
- const statusText = statusMatch[2].toLowerCase();
110
+ // statusMatch[2] is optional (bare `[x]` has no trailing word).
111
+ const statusText = (statusMatch[2] ?? '').toLowerCase();
92
112
  currentTask.status = parseTaskStatus(checkbox, statusText);
93
- continue;
113
+ matchedAnyField = true;
94
114
  }
95
115
  const priorityMatch = line.match(priorityRegex);
96
116
  if (priorityMatch) {
97
- currentTask.priority = priorityMatch[1];
98
- continue;
117
+ currentTask.priority = priorityMatch[1].trim();
118
+ matchedAnyField = true;
99
119
  }
100
120
  const estimatedEffortMatch = line.match(estimatedEffortRegex);
101
121
  if (estimatedEffortMatch) {
102
- currentTask.estimatedEffort = estimatedEffortMatch[1];
103
- continue;
122
+ currentTask.estimatedEffort = estimatedEffortMatch[1].trim();
123
+ matchedAnyField = true;
104
124
  }
105
125
  const dependenciesMatch = line.match(dependenciesRegex);
106
126
  if (dependenciesMatch) {
@@ -109,8 +129,10 @@ export function parseTasksWithUSLinks(tasksPath) {
109
129
  .split(',')
110
130
  .map(dep => dep.trim())
111
131
  .filter(dep => dep.match(/^T-\d{3,}$/));
112
- continue;
132
+ matchedAnyField = true;
113
133
  }
134
+ if (matchedAnyField)
135
+ continue;
114
136
  // Track sections for description parsing
115
137
  if (line.startsWith('**Description**:')) {
116
138
  currentSection = 'description';