beth-copilot 1.0.4 → 1.0.6

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 (72) hide show
  1. package/README.md +0 -0
  2. package/bin/cli.js +151 -9
  3. package/package.json +1 -1
  4. package/templates/.github/agents/beth.agent.md +0 -0
  5. package/templates/.github/agents/developer.agent.md +0 -0
  6. package/templates/.github/agents/product-manager.agent.md +0 -0
  7. package/templates/.github/agents/researcher.agent.md +0 -0
  8. package/templates/.github/agents/security-reviewer.agent.md +0 -0
  9. package/templates/.github/agents/tester.agent.md +0 -0
  10. package/templates/.github/agents/ux-designer.agent.md +0 -0
  11. package/templates/.github/copilot-instructions.md +0 -0
  12. package/templates/.github/skills/framer-components/SKILL.md +0 -0
  13. package/templates/.github/skills/prd/SKILL.md +0 -0
  14. package/templates/.github/skills/security-analysis/SKILL.md +0 -0
  15. package/templates/.github/skills/shadcn-ui/SKILL.md +0 -0
  16. package/templates/.github/skills/vercel-react-best-practices/AGENTS.md +0 -0
  17. package/templates/.github/skills/vercel-react-best-practices/SKILL.md +0 -0
  18. package/templates/.github/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -0
  19. package/templates/.github/skills/vercel-react-best-practices/rules/advanced-use-latest.md +0 -0
  20. package/templates/.github/skills/vercel-react-best-practices/rules/async-api-routes.md +0 -0
  21. package/templates/.github/skills/vercel-react-best-practices/rules/async-defer-await.md +0 -0
  22. package/templates/.github/skills/vercel-react-best-practices/rules/async-dependencies.md +0 -0
  23. package/templates/.github/skills/vercel-react-best-practices/rules/async-parallel.md +0 -0
  24. package/templates/.github/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -0
  25. package/templates/.github/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -0
  26. package/templates/.github/skills/vercel-react-best-practices/rules/bundle-conditional.md +0 -0
  27. package/templates/.github/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -0
  28. package/templates/.github/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -0
  29. package/templates/.github/skills/vercel-react-best-practices/rules/bundle-preload.md +0 -0
  30. package/templates/.github/skills/vercel-react-best-practices/rules/client-event-listeners.md +0 -0
  31. package/templates/.github/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -0
  32. package/templates/.github/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -0
  33. package/templates/.github/skills/vercel-react-best-practices/rules/client-swr-dedup.md +0 -0
  34. package/templates/.github/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -0
  35. package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-function-results.md +0 -0
  36. package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-property-access.md +0 -0
  37. package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-storage.md +0 -0
  38. package/templates/.github/skills/vercel-react-best-practices/rules/js-combine-iterations.md +0 -0
  39. package/templates/.github/skills/vercel-react-best-practices/rules/js-early-exit.md +0 -0
  40. package/templates/.github/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -0
  41. package/templates/.github/skills/vercel-react-best-practices/rules/js-index-maps.md +0 -0
  42. package/templates/.github/skills/vercel-react-best-practices/rules/js-length-check-first.md +0 -0
  43. package/templates/.github/skills/vercel-react-best-practices/rules/js-min-max-loop.md +0 -0
  44. package/templates/.github/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -0
  45. package/templates/.github/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -0
  46. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-activity.md +0 -0
  47. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -0
  48. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -0
  49. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -0
  50. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -0
  51. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -0
  52. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -0
  53. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -0
  54. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-dependencies.md +0 -0
  55. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-derived-state.md +0 -0
  56. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -0
  57. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -0
  58. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-memo.md +0 -0
  59. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -0
  60. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-transitions.md +0 -0
  61. package/templates/.github/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -0
  62. package/templates/.github/skills/vercel-react-best-practices/rules/server-auth-actions.md +0 -0
  63. package/templates/.github/skills/vercel-react-best-practices/rules/server-cache-lru.md +0 -0
  64. package/templates/.github/skills/vercel-react-best-practices/rules/server-cache-react.md +0 -0
  65. package/templates/.github/skills/vercel-react-best-practices/rules/server-dedup-props.md +0 -0
  66. package/templates/.github/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -0
  67. package/templates/.github/skills/vercel-react-best-practices/rules/server-serialization.md +0 -0
  68. package/templates/.github/skills/web-design-guidelines/SKILL.md +0 -0
  69. package/templates/.vscode/settings.json +16 -0
  70. package/templates/AGENTS.md +95 -70
  71. package/templates/Backlog.md +0 -0
  72. package/templates/mcp.json.example +0 -0
package/README.md CHANGED
File without changes
package/bin/cli.js CHANGED
@@ -84,6 +84,20 @@ function isBacklogCliInstalled() {
84
84
  }
85
85
  }
86
86
 
87
+ function isBeadsInstalled() {
88
+ try {
89
+ execSync('bd --version', { stdio: 'ignore' });
90
+ return true;
91
+ } catch {
92
+ return false;
93
+ }
94
+ }
95
+
96
+ function isBeadsInitialized(cwd) {
97
+ // Check if .beads directory exists in the project
98
+ return existsSync(join(cwd, '.beads'));
99
+ }
100
+
87
101
  async function promptYesNo(question) {
88
102
  const readline = await import('readline');
89
103
  const rl = readline.createInterface({
@@ -129,6 +143,63 @@ async function installBacklogCli() {
129
143
  });
130
144
  }
131
145
 
146
+ async function installBeads() {
147
+ log('\nInstalling beads CLI...', COLORS.cyan);
148
+ logInfo('curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash');
149
+
150
+ return new Promise((resolve) => {
151
+ const child = spawn('bash', ['-c', 'curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash'], {
152
+ stdio: 'inherit',
153
+ shell: true
154
+ });
155
+
156
+ child.on('close', (code) => {
157
+ if (code === 0) {
158
+ logSuccess('beads CLI installed successfully!');
159
+ resolve(true);
160
+ } else {
161
+ logError('Failed to install beads CLI.');
162
+ logInfo('Install manually: curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash');
163
+ logInfo('Learn more: https://github.com/steveyegge/beads');
164
+ resolve(false);
165
+ }
166
+ });
167
+
168
+ child.on('error', () => {
169
+ logError('Failed to install beads CLI.');
170
+ logInfo('Install manually: curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash');
171
+ resolve(false);
172
+ });
173
+ });
174
+ }
175
+
176
+ async function initializeBeads(cwd) {
177
+ log('\nInitializing beads in project...', COLORS.cyan);
178
+
179
+ return new Promise((resolve) => {
180
+ const child = spawn('bd', ['init'], {
181
+ stdio: 'inherit',
182
+ shell: true,
183
+ cwd
184
+ });
185
+
186
+ child.on('close', (code) => {
187
+ if (code === 0) {
188
+ logSuccess('beads initialized successfully!');
189
+ resolve(true);
190
+ } else {
191
+ logWarning('Failed to initialize beads. Run manually: bd init');
192
+ resolve(false);
193
+ }
194
+ });
195
+
196
+ child.on('error', () => {
197
+ logWarning('Failed to initialize beads. Run manually: bd init');
198
+ resolve(false);
199
+ });
200
+ });
201
+ }
202
+
132
203
  function showHelp() {
133
204
  console.log(`
134
205
  ${COLORS.bright}Beth${COLORS.reset} - AI Orchestrator for GitHub Copilot
@@ -141,6 +212,7 @@ ${COLORS.bright}Options:${COLORS.reset}
141
212
  --force Overwrite existing files
142
213
  --skip-backlog Don't create Backlog.md
143
214
  --skip-mcp Don't create mcp.json.example
215
+ --skip-beads Skip beads check (not recommended)
144
216
 
145
217
  ${COLORS.bright}Examples:${COLORS.reset}
146
218
  npx beth-copilot init Set up Beth in current project
@@ -150,14 +222,15 @@ ${COLORS.bright}What gets installed:${COLORS.reset}
150
222
  .github/agents/ 8 specialized AI agents
151
223
  .github/skills/ 6 domain knowledge modules
152
224
  .github/copilot-instructions.md Copilot configuration
225
+ .vscode/settings.json Recommended VS Code settings
153
226
  AGENTS.md Workflow documentation
154
227
  Backlog.md Task tracking file
155
228
  mcp.json.example Optional MCP server config
156
229
 
157
230
  ${COLORS.bright}After installation:${COLORS.reset}
158
231
  1. Open project in VS Code
159
- 2. Enable Agent mode in Copilot Chat
160
- 3. Type @Beth and tell her what you need
232
+ 2. Open Copilot Chat (Ctrl+Alt+I / Cmd+Alt+I)
233
+ 3. Type @Beth to start working
161
234
 
162
235
  ${COLORS.bright}Documentation:${COLORS.reset}
163
236
  https://github.com/stephschofield/beth
@@ -194,7 +267,7 @@ function copyDirRecursive(src, dest, options = {}) {
194
267
  }
195
268
 
196
269
  async function init(options = {}) {
197
- const { force = false, skipBacklog = false, skipMcp = false } = options;
270
+ const { force = false, skipBacklog = false, skipMcp = false, skipBeads = false } = options;
198
271
  const cwd = process.cwd();
199
272
 
200
273
  // Check for updates
@@ -273,6 +346,28 @@ ${COLORS.cyan}"I don't do excuses. I do results."${COLORS.reset}
273
346
  }
274
347
  }
275
348
 
349
+ // Copy .vscode/settings.json (recommended settings for agent mode)
350
+ const vscodeSrc = join(TEMPLATES_DIR, '.vscode');
351
+ const vscodeDest = join(cwd, '.vscode');
352
+
353
+ if (existsSync(vscodeSrc)) {
354
+ if (!existsSync(vscodeDest)) {
355
+ mkdirSync(vscodeDest, { recursive: true });
356
+ }
357
+
358
+ const settingsSrc = join(vscodeSrc, 'settings.json');
359
+ const settingsDest = join(vscodeDest, 'settings.json');
360
+
361
+ if (existsSync(settingsSrc)) {
362
+ if (existsSync(settingsDest) && !force) {
363
+ logWarning('Skipped (exists): .vscode/settings.json');
364
+ } else {
365
+ copyFileSync(settingsSrc, settingsDest);
366
+ copiedFiles.push('.vscode/settings.json');
367
+ }
368
+ }
369
+ }
370
+
276
371
  // Summary
277
372
  console.log('');
278
373
  if (copiedFiles.length > 0) {
@@ -282,10 +377,55 @@ ${COLORS.cyan}"I don't do excuses. I do results."${COLORS.reset}
282
377
  logWarning('No files were copied. Use --force to overwrite existing files.');
283
378
  }
284
379
 
285
- // Check for backlog.md CLI
380
+ // Check for beads CLI (REQUIRED for Beth)
381
+ if (!skipBeads) {
382
+ console.log('');
383
+ log('Checking beads (required for task tracking)...', COLORS.cyan);
384
+
385
+ if (!isBeadsInstalled()) {
386
+ logWarning('beads CLI is not installed.');
387
+ logInfo('Beth requires beads for task tracking. Agents use it to coordinate work.');
388
+ logInfo('Learn more: https://github.com/steveyegge/beads');
389
+ console.log('');
390
+
391
+ const shouldInstallBeads = await promptYesNo('Install beads CLI now? (required)');
392
+ if (shouldInstallBeads) {
393
+ const installed = await installBeads();
394
+ if (!installed) {
395
+ logError('beads installation failed. Beth requires beads to function.');
396
+ logInfo('Install manually and run "beth init" again.');
397
+ process.exit(1);
398
+ }
399
+ } else {
400
+ logError('beads is required for Beth to function.');
401
+ logInfo('Install beads and run "beth init" again:');
402
+ logInfo(' curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash');
403
+ process.exit(1);
404
+ }
405
+ } else {
406
+ logSuccess('beads CLI is installed');
407
+ }
408
+
409
+ // Initialize beads in the project if not already done
410
+ if (!isBeadsInitialized(cwd)) {
411
+ logInfo('beads not initialized in this project.');
412
+ const shouldInitBeads = await promptYesNo('Initialize beads now?');
413
+ if (shouldInitBeads) {
414
+ await initializeBeads(cwd);
415
+ } else {
416
+ logWarning('Remember to run "bd init" before using Beth.');
417
+ }
418
+ } else {
419
+ logSuccess('beads is initialized in this project');
420
+ }
421
+ } else {
422
+ logWarning('Skipped beads check (--skip-beads). Beth may not function correctly.');
423
+ }
424
+
425
+ // Check for backlog.md CLI (optional)
286
426
  if (!skipBacklog && !isBacklogCliInstalled()) {
287
427
  console.log('');
288
- logWarning('backlog.md CLI is not installed.');
428
+ logWarning('backlog.md CLI is not installed (optional).');
289
429
  logInfo('The CLI provides TUI boards, web UI, and task management commands.');
290
430
  logInfo('Learn more: https://github.com/MrLesk/Backlog.md');
291
431
  console.log('');
@@ -304,9 +444,10 @@ ${COLORS.cyan}"I don't do excuses. I do results."${COLORS.reset}
304
444
  console.log(`
305
445
  ${COLORS.bright}Next steps:${COLORS.reset}
306
446
  1. Open this project in VS Code
307
- 2. Ensure GitHub Copilot + Copilot Chat are installed
308
- 3. Switch to ${COLORS.cyan}Agent mode${COLORS.reset} in Copilot Chat
309
- 4. Type ${COLORS.cyan}@Beth${COLORS.reset} and tell her what you need
447
+ 2. Open Copilot Chat (${COLORS.cyan}Ctrl+Alt+I${COLORS.reset} / ${COLORS.cyan}Cmd+Alt+I${COLORS.reset})
448
+ 3. Type ${COLORS.cyan}@Beth${COLORS.reset} to start - she's your orchestrator
449
+
450
+ ${COLORS.bright}Pro tip:${COLORS.reset} Start every session with ${COLORS.cyan}@Beth${COLORS.reset} and let her route work to the right specialists.
310
451
 
311
452
  ${COLORS.bright}Documentation:${COLORS.reset}
312
453
  https://github.com/stephschofield/beth
@@ -317,7 +458,7 @@ ${COLORS.cyan}"They broke my wings and forgot I had claws."${COLORS.reset}
317
458
 
318
459
  // Input validation constants
319
460
  const ALLOWED_COMMANDS = ['init', 'help', '--help', '-h'];
320
- const ALLOWED_FLAGS = ['--force', '--skip-backlog', '--skip-mcp'];
461
+ const ALLOWED_FLAGS = ['--force', '--skip-backlog', '--skip-mcp', '--skip-beads'];
321
462
  const MAX_ARG_LENGTH = 50;
322
463
 
323
464
  // Validate and sanitize input
@@ -346,6 +487,7 @@ const options = {
346
487
  force: args.includes('--force'),
347
488
  skipBacklog: args.includes('--skip-backlog'),
348
489
  skipMcp: args.includes('--skip-mcp'),
490
+ skipBeads: args.includes('--skip-beads'),
349
491
  };
350
492
 
351
493
  // Validate unknown flags
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "beth-copilot",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "description": "Beth - A ruthless, hyper-competent AI orchestrator for GitHub Copilot multi-agent workflows",
5
5
  "keywords": [
6
6
  "github-copilot",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,16 @@
1
+ {
2
+ // Beth Agent System - Recommended Settings
3
+ // These settings enable full agent orchestration capabilities
4
+
5
+ // Required: Allow Beth to delegate work to specialist agents
6
+ "chat.customAgentInSubagent.enabled": true,
7
+
8
+ // Enable agent mode in Copilot Chat
9
+ "chat.agent.enabled": true,
10
+
11
+ // Enable thinking/reasoning for complex tasks
12
+ "github.copilot.chat.agent.thinkingTool": true,
13
+
14
+ // Consistent locale for agent responses
15
+ "github.copilot.chat.localeOverride": "en"
16
+ }
@@ -1,70 +1,95 @@
1
- # Agent Instructions
2
-
3
- This project uses [Backlog.md](https://github.com/MrLesk/Backlog.md) for issue tracking.
4
-
5
- ## Quick Setup
6
-
7
- ```bash
8
- # Install (choose one)
9
- bun i -g backlog.md
10
- npm i -g backlog.md
11
- brew install backlog-md
12
-
13
- # Initialize in your project
14
- backlog init "Project Name"
15
-
16
- # Shell completion (optional)
17
- backlog completion install
18
- ```
19
-
20
- ## Quick Reference
21
-
22
- ```bash
23
- # Create a task
24
- backlog task create "Task title" -d "Description"
25
-
26
- # List tasks
27
- backlog task list --plain
28
-
29
- # View Kanban board (TUI)
30
- backlog board
31
-
32
- # Web UI
33
- backlog browser
34
-
35
- # Configure settings
36
- backlog config
37
- ```
38
-
39
- ## Workflow
40
-
41
- 1. Check available work: `backlog task list`
42
- 2. Claim work: `backlog task edit <id> --status "In Progress"`
43
- 3. Do the work
44
- 4. Complete: `backlog task edit <id> --status "Done"`
45
- 5. Commit and push
46
-
47
- ## Landing the Plane (Session Completion)
48
-
49
- **When ending a work session**, you MUST complete ALL steps below. Work is NOT complete until `git push` succeeds.
50
-
51
- **MANDATORY WORKFLOW:**
52
-
53
- 1. **Update Backlog.md** - Move completed tasks, add new items for follow-up work
54
- 2. **Run quality gates** (if code changed) - Tests, linters, builds
55
- 3. **PUSH TO REMOTE** - This is MANDATORY:
56
- ```bash
57
- git add -A
58
- git commit -m "description of work"
59
- git pull --rebase
60
- git push
61
- git status # MUST show "up to date with origin"
62
- ```
63
- 4. **Verify** - All changes committed AND pushed
64
- 5. **Hand off** - Provide context for next session
65
-
66
- **CRITICAL RULES:**
67
- - Work is NOT complete until `git push` succeeds
68
- - NEVER stop before pushing - that leaves work stranded locally
69
- - NEVER say "ready to push when you are" - YOU must push
70
- - If push fails, resolve and retry until it succeeds
1
+ # Agent Instructions
2
+
3
+ This project uses a **dual tracking system**:
4
+
5
+ | Tool | Audience | Purpose |
6
+ |------|----------|---------|
7
+ | [beads](https://github.com/steveyegge/beads) (`bd`) | Agents | Active work, dependencies, blockers, structured memory |
8
+ | [Backlog.md](Backlog.md) | Humans | Completed work archive, decisions, readable changelog |
9
+
10
+ **The rule:** beads is always current. Backlog.md gets updated when work completes.
11
+
12
+ ## Quick Setup
13
+
14
+ ```bash
15
+ # Install beads
16
+ curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash
17
+
18
+ # Initialize in your project
19
+ bd init
20
+
21
+ # Run doctor to verify setup
22
+ bd doctor
23
+ ```
24
+
25
+ ## Quick Reference
26
+
27
+ ```bash
28
+ # Simple task
29
+ bd create "Issue title" --description="What needs to be done" -l in_progress
30
+
31
+ # Epic for complex work
32
+ bd create "Feature name" --type epic -p 1
33
+
34
+ # Subtask with parent
35
+ bd create "Subtask" --parent <epic-id>
36
+
37
+ # Task with dependency
38
+ bd create "Blocked task" --deps "<blocker-id>"
39
+
40
+ # List issues / see what's ready
41
+ bd list
42
+ bd ready
43
+
44
+ # View dependencies
45
+ bd dep tree <id>
46
+
47
+ # Close an issue
48
+ bd close <id>
49
+ ```
50
+
51
+ ## Workflow
52
+
53
+ ### Simple Tasks
54
+ 1. `bd create "Task" -l in_progress`
55
+ 2. Do the work
56
+ 3. `bd close <id>`
57
+ 4. Update Backlog.md if significant
58
+ 5. Commit and push
59
+
60
+ ### Complex Work (Multi-Agent)
61
+ 1. `bd create "Feature" --type epic -p 1`
62
+ 2. Break into subtasks with `--parent` and `--deps`
63
+ 3. `bd ready` to find unblocked work
64
+ 4. Route to specialists with issue IDs
65
+ 5. Close subtasks as they complete
66
+ 6. `bd epic close-eligible` when all children done
67
+ 7. Update Backlog.md with summary
68
+ 8. Commit and push
69
+
70
+ ## Landing the Plane (Session Completion)
71
+
72
+ **When ending a work session**, you MUST complete ALL steps below. Work is NOT complete until `git push` succeeds.
73
+
74
+ **MANDATORY WORKFLOW:**
75
+
76
+ 1. **Close beads issues** - `bd close <id>` for completed work
77
+ 2. **Create follow-up issues** - `bd create` for any remaining work
78
+ 3. **Update Backlog.md** - Add summary to Completed section for significant work
79
+ 4. **Run quality gates** (if code changed) - Tests, linters, builds
80
+ 5. **PUSH TO REMOTE** - This is MANDATORY:
81
+ ```bash
82
+ git add -A
83
+ git commit -m "description of work"
84
+ git pull --rebase
85
+ git push
86
+ git status # MUST show "up to date with origin"
87
+ ```
88
+ 6. **Verify** - All changes committed AND pushed
89
+ 7. **Hand off** - Provide context for next session
90
+
91
+ **CRITICAL RULES:**
92
+ - Work is NOT complete until `git push` succeeds
93
+ - NEVER stop before pushing - that leaves work stranded locally
94
+ - NEVER say "ready to push when you are" - YOU must push
95
+ - If push fails, resolve and retry until it succeeds
File without changes
File without changes