github-delivery-os 1.3.0 → 1.3.1

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 CHANGED
@@ -168,28 +168,28 @@ See [How To](docs/how-to.md) for the underlying workflows this drives, field by
168
168
 
169
169
  ### Example: filing a bug and a task, step by step
170
170
 
171
- Worked against `jkaweesi22/klero`, a repo with Delivery OS installed. The bug part of this was actually run — that issue really exists at [jkaweesi22/klero#1](https://github.com/jkaweesi22/klero/issues/1); the task part follows the identical steps but wasn't actually created, shown for the field shape only.
171
+ Illustrative walkthrough against `acme/storefront`, a repo with Delivery OS installed (same example repo used in the full walkthrough below).
172
172
 
173
173
  **Filing the bug:**
174
174
 
175
175
  1. In Claude Code, inside (or pointed at, via `--repo`) the target repo, describe the bug in plain language:
176
- > *File a bug on jkaweesi22/klero — the order request form submits with an empty phone number, severity high. Steps: fill in the form, leave phone blank, submit. Expected: should block submission. Actual: submits anyway, so there's no way to contact the customer. Tested on Chrome, desktop, production.*
176
+ > *File a bug on acme/storefront — the order request form submits with an empty phone number, severity high. Steps: fill in the form, leave phone blank, submit. Expected: should block submission. Actual: submits anyway, so there's no way to contact the customer. Tested on Chrome, desktop, production.*
177
177
  2. Claude pre-flights the repo — confirms Delivery OS is installed and the `bug`/`qa` labels exist.
178
178
  3. Claude shows the exact issue it's about to create before doing anything:
179
179
  - Title: `[BUG] Order request form submits with empty phone number`
180
180
  - Labels: `bug`, `qa`
181
181
  - Body, field by field: `Platform(s) Affected` → Web, `Severity` → High, `Build / Version` → main (as deployed), `Bug Summary`, `Steps to Reproduce` (numbered), `Expected Result`, `Actual Result`, `Test Environment` → Chrome, desktop, production.
182
182
  4. Confirm ("yes") when asked to create it.
183
- 5. Claude runs `gh issue create` and reports back the issue — [jkaweesi22/klero#1](https://github.com/jkaweesi22/klero/issues/1). Nothing else happens automatically; bug reports don't trigger a workflow, they're just labeled and tracked.
183
+ 5. Claude runs `gh issue create` and reports back the issue — e.g. `acme/storefront#42`. Nothing else happens automatically; bug reports don't trigger a workflow, they're just labeled and tracked.
184
184
 
185
185
  **Filing the follow-up task:**
186
186
 
187
187
  1. Ask Claude to turn the bug into tracked work, referencing the bug's issue number:
188
- > *Create a task to add phone number validation to the order form, owner @jkaweesi22, priority P1, status Backlog, acceptance: form blocks submission until a valid phone number is entered. Link it to #1.*
188
+ > *Create a task to add phone number validation to the order form, owner @alex, priority P1, status Backlog, acceptance: form blocks submission until a valid phone number is entered. Link it to #42.*
189
189
  2. Claude shows the constructed issue:
190
190
  - Title: `TASK - Add phone number validation to order form`
191
191
  - Labels: `task`
192
- - Body: `Task Summary`, `Description` (references #1), `Owner` → @jkaweesi22, `Priority` → P1 - High, `Status` → Backlog, `Acceptance Criteria`, `Artifacts / Links` → Related bug: #1.
192
+ - Body: `Task Summary`, `Description` (references #42), `Owner` → @alex, `Priority` → P1 - High, `Status` → Backlog, `Acceptance Criteria`, `Artifacts / Links` → Related bug: #42.
193
193
  3. Confirm ("yes") to create it.
194
194
  4. Claude runs `gh issue create`. Same as the bug — no workflow trigger, just labeled and tracked, now linked back to the bug it addresses.
195
195
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "github-delivery-os",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
4
4
  "description": "A GitHub-native Delivery Governance Framework for structured sprint execution, QA review, and collaborative production release control.",
5
5
  "main": "src/install.js",
6
6
  "bin": {
package/src/install.js CHANGED
@@ -460,6 +460,20 @@ function runInstall(options) {
460
460
  console.log('=== Installation complete ===');
461
461
  }
462
462
 
463
+ // runInstall only records a new manifest version when everything already
464
+ // installed actually gets touched this run (see the cleanInstall check
465
+ // there) — so a repo with templates and/or the skill already on disk needs
466
+ // --with-templates/--with-skill passed again on an update, not just
467
+ // --overwrite, or the recorded version never advances and `status` keeps
468
+ // suggesting the same command forever. Build the hint from what's actually
469
+ // on disk so it's never wrong.
470
+ function buildOverwriteCommand({ hasTemplates, hasSkill }) {
471
+ const flags = [hasTemplates ? '--with-templates' : null, hasSkill ? '--with-skill' : null, '--overwrite']
472
+ .filter(Boolean)
473
+ .join(' ');
474
+ return `npx github-delivery-os@latest install ${flags} .`;
475
+ }
476
+
463
477
  const TEMPLATES = [
464
478
  'config.yml',
465
479
  'sprint_planning.yml',
@@ -518,7 +532,9 @@ async function runStatus(options) {
518
532
  console.log(`Installed version: ${manifest.version}${installedOn}`);
519
533
  } else {
520
534
  console.log('Installed version: unknown (installed before version tracking was added)');
521
- console.log(' Run install with --overwrite to record the current version.');
535
+ console.log(
536
+ ` Run: ${buildOverwriteCommand({ hasTemplates: installedTemplates.length > 0, hasSkill: skillInstalled })}`
537
+ );
522
538
  }
523
539
 
524
540
  if (checkUpdates) {
@@ -529,7 +545,9 @@ async function runStatus(options) {
529
545
  console.log(`✓ Up to date (latest is ${latest})`);
530
546
  } else if (manifest && manifest.version) {
531
547
  console.log(`⬆️ Update available: ${manifest.version} → ${latest}`);
532
- console.log(' Run: npx github-delivery-os@latest install --overwrite .');
548
+ console.log(
549
+ ` Run: ${buildOverwriteCommand({ hasTemplates: installedTemplates.length > 0, hasSkill: skillInstalled })}`
550
+ );
533
551
  } else {
534
552
  console.log(`Latest published version: ${latest}`);
535
553
  }
@@ -549,7 +567,9 @@ async function runStatus(options) {
549
567
  console.log(` ${wf}.yml requires .github/scripts/${REQUIRED_SCRIPT_BY_WORKFLOW[wf]}.js, which is missing.`);
550
568
  });
551
569
  console.log(' That workflow will fail with MODULE_NOT_FOUND the next time it runs.');
552
- console.log(' Fix: npx github-delivery-os@latest install --overwrite .');
570
+ console.log(
571
+ ` Fix: ${buildOverwriteCommand({ hasTemplates: installedTemplates.length > 0, hasSkill: skillInstalled })}`
572
+ );
553
573
  console.log('');
554
574
  }
555
575
 
@@ -558,7 +578,9 @@ async function runStatus(options) {
558
578
  console.log(' If this repo\'s own package.json has "type": "module", every workflow that');
559
579
  console.log(' require()s a script under .github/scripts will fail with "module is not');
560
580
  console.log(' defined in ES module scope" the next time it runs.');
561
- console.log(' Fix: npx github-delivery-os@latest install --overwrite .');
581
+ console.log(
582
+ ` Fix: ${buildOverwriteCommand({ hasTemplates: installedTemplates.length > 0, hasSkill: skillInstalled })}`
583
+ );
562
584
  console.log('');
563
585
  }
564
586
 
@@ -746,6 +768,7 @@ module.exports = {
746
768
  readManifest,
747
769
  writeManifest,
748
770
  fetchLatestVersion,
771
+ buildOverwriteCommand,
749
772
  skillPath,
750
773
  SKILL_REL_PATH,
751
774
  WORKFLOWS,