@on-par/factory-core 0.9.7-next.2 → 0.9.7-next.21

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 (127) hide show
  1. package/dist/checkers/index.d.ts +10 -1
  2. package/dist/checkers/index.d.ts.map +1 -1
  3. package/dist/checkers/index.js +14 -22
  4. package/dist/checkers/index.js.map +1 -1
  5. package/dist/checkers/probe.d.ts.map +1 -1
  6. package/dist/checkers/probe.js +5 -3
  7. package/dist/checkers/probe.js.map +1 -1
  8. package/dist/config/repo.js +1 -1
  9. package/dist/config/repo.js.map +1 -1
  10. package/dist/eval/baseline.d.ts.map +1 -1
  11. package/dist/eval/baseline.js +4 -4
  12. package/dist/eval/baseline.js.map +1 -1
  13. package/dist/eval/judge.d.ts.map +1 -1
  14. package/dist/eval/judge.js +9 -7
  15. package/dist/eval/judge.js.map +1 -1
  16. package/dist/eval/regression-report.js +1 -1
  17. package/dist/eval/regression-report.js.map +1 -1
  18. package/dist/harness/catalog.js +1 -1
  19. package/dist/harness/catalog.js.map +1 -1
  20. package/dist/harness/contract.js +4 -4
  21. package/dist/harness/contract.js.map +1 -1
  22. package/dist/hosted/store-contract.js +1 -1
  23. package/dist/hosted/store-contract.js.map +1 -1
  24. package/dist/internal.d.ts +2 -2
  25. package/dist/internal.d.ts.map +1 -1
  26. package/dist/internal.js +1 -0
  27. package/dist/internal.js.map +1 -1
  28. package/dist/kpis/human.d.ts.map +1 -1
  29. package/dist/kpis/human.js +4 -8
  30. package/dist/kpis/human.js.map +1 -1
  31. package/dist/logger/index.d.ts +2 -1
  32. package/dist/logger/index.d.ts.map +1 -1
  33. package/dist/logger/index.js +1 -0
  34. package/dist/logger/index.js.map +1 -1
  35. package/dist/phases/build.d.ts +3 -0
  36. package/dist/phases/build.d.ts.map +1 -1
  37. package/dist/phases/build.js +39 -12
  38. package/dist/phases/build.js.map +1 -1
  39. package/dist/phases/check.d.ts +29 -0
  40. package/dist/phases/check.d.ts.map +1 -1
  41. package/dist/phases/check.js +2 -2
  42. package/dist/phases/check.js.map +1 -1
  43. package/dist/phases/plan-design-retry.d.ts +4 -0
  44. package/dist/phases/plan-design-retry.d.ts.map +1 -1
  45. package/dist/phases/plan-design-retry.js +8 -0
  46. package/dist/phases/plan-design-retry.js.map +1 -1
  47. package/dist/phases/plan.d.ts.map +1 -1
  48. package/dist/phases/plan.js +2 -2
  49. package/dist/phases/plan.js.map +1 -1
  50. package/dist/phases/ship-git.d.ts +52 -0
  51. package/dist/phases/ship-git.d.ts.map +1 -0
  52. package/dist/phases/ship-git.js +104 -0
  53. package/dist/phases/ship-git.js.map +1 -0
  54. package/dist/phases/ship-spec.d.ts +5 -0
  55. package/dist/phases/ship-spec.d.ts.map +1 -0
  56. package/dist/phases/ship-spec.js +26 -0
  57. package/dist/phases/ship-spec.js.map +1 -0
  58. package/dist/phases/ship.d.ts +11 -7
  59. package/dist/phases/ship.d.ts.map +1 -1
  60. package/dist/phases/ship.js +73 -144
  61. package/dist/phases/ship.js.map +1 -1
  62. package/dist/readiness/slice-plan.js +1 -1
  63. package/dist/readiness/slice-plan.js.map +1 -1
  64. package/dist/review/backtest.js +2 -2
  65. package/dist/review/backtest.js.map +1 -1
  66. package/dist/review/containment.js +1 -1
  67. package/dist/review/containment.js.map +1 -1
  68. package/dist/run/ci-rework-loop.d.ts +65 -0
  69. package/dist/run/ci-rework-loop.d.ts.map +1 -0
  70. package/dist/run/ci-rework-loop.js +169 -0
  71. package/dist/run/ci-rework-loop.js.map +1 -0
  72. package/dist/run/ci-rework.d.ts +25 -0
  73. package/dist/run/ci-rework.d.ts.map +1 -0
  74. package/dist/run/ci-rework.js +113 -0
  75. package/dist/run/ci-rework.js.map +1 -0
  76. package/dist/run/ci-suppression-guard.d.ts +11 -0
  77. package/dist/run/ci-suppression-guard.d.ts.map +1 -0
  78. package/dist/run/ci-suppression-guard.js +143 -0
  79. package/dist/run/ci-suppression-guard.js.map +1 -0
  80. package/dist/run/park-comment.d.ts +55 -0
  81. package/dist/run/park-comment.d.ts.map +1 -0
  82. package/dist/run/park-comment.js +157 -0
  83. package/dist/run/park-comment.js.map +1 -0
  84. package/dist/run/phase-snapshot.js +2 -2
  85. package/dist/run/phase-snapshot.js.map +1 -1
  86. package/dist/run/run-issue.d.ts +4 -2
  87. package/dist/run/run-issue.d.ts.map +1 -1
  88. package/dist/run/run-issue.js +43 -49
  89. package/dist/run/run-issue.js.map +1 -1
  90. package/dist/run/ship-park.d.ts +14 -0
  91. package/dist/run/ship-park.d.ts.map +1 -0
  92. package/dist/run/ship-park.js +21 -0
  93. package/dist/run/ship-park.js.map +1 -0
  94. package/dist/sandbox/index.js +1 -1
  95. package/dist/sandbox/index.js.map +1 -1
  96. package/dist/steward/detect.d.ts +5 -2
  97. package/dist/steward/detect.d.ts.map +1 -1
  98. package/dist/steward/detect.js +6 -3
  99. package/dist/steward/detect.js.map +1 -1
  100. package/dist/types/index.d.ts +55 -0
  101. package/dist/types/index.d.ts.map +1 -1
  102. package/dist/utils/ci-evidence.d.ts +21 -0
  103. package/dist/utils/ci-evidence.d.ts.map +1 -0
  104. package/dist/utils/ci-evidence.js +66 -0
  105. package/dist/utils/ci-evidence.js.map +1 -0
  106. package/dist/utils/ci-watch.d.ts +12 -0
  107. package/dist/utils/ci-watch.d.ts.map +1 -1
  108. package/dist/utils/ci-watch.js +1 -1
  109. package/dist/utils/ci-watch.js.map +1 -1
  110. package/dist/utils/command-runner.js +2 -2
  111. package/dist/utils/command-runner.js.map +1 -1
  112. package/dist/utils/index.d.ts +2 -1
  113. package/dist/utils/index.d.ts.map +1 -1
  114. package/dist/utils/index.js +2 -0
  115. package/dist/utils/index.js.map +1 -1
  116. package/dist/utils/worktree-gc.d.ts.map +1 -1
  117. package/dist/utils/worktree-gc.js +5 -5
  118. package/dist/utils/worktree-gc.js.map +1 -1
  119. package/dist/utils/worktree-location.d.ts +2 -2
  120. package/dist/utils/worktree-location.d.ts.map +1 -1
  121. package/dist/utils/worktree-location.js +16 -9
  122. package/dist/utils/worktree-location.js.map +1 -1
  123. package/dist/utils/worktree-name.d.ts +6 -0
  124. package/dist/utils/worktree-name.d.ts.map +1 -1
  125. package/dist/utils/worktree-name.js +16 -1
  126. package/dist/utils/worktree-name.js.map +1 -1
  127. package/package.json +5 -5
@@ -3,7 +3,7 @@ import { existsSync, mkdirSync, readFileSync, appendFileSync } from 'node:fs';
3
3
  import { homedir } from 'node:os';
4
4
  import { basename, dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
5
5
  import { execGit } from './git-exec.js';
6
- import { branchPrefixSlug } from './index.js';
6
+ import { legacyWorktreeDirName, worktreeDirName } from './worktree-name.js';
7
7
  /** Root directory lane worktrees are created under. A `~` or absolute parent is a shared
8
8
  * root and is namespaced `<owner>/<repo>`; a repo-relative parent is used as-is. */
9
9
  export function resolveWorktreeRoot(opts) {
@@ -24,14 +24,21 @@ export function resolveWorktreeRoot(opts) {
24
24
  const [owner, name] = repo.split('/');
25
25
  return owner && name ? join(base, owner, name) : join(base, basename(resolve(repoRoot)));
26
26
  }
27
- /** Absolute lane worktree path. Falls back to the legacy sibling path when only that exists,
28
- * so in-flight lanes keep their checkout. The basename never changes (GC matches on it). */
27
+ /** Absolute lane worktree path. The basename comes from worktreeDirName (#2763); an existing
28
+ * old-name (repeated segment) or legacy-sibling checkout is reused so in-flight lanes keep theirs. */
29
29
  export function laneWorktreePath(opts) {
30
30
  const { repoRoot, parent, repo, issue, prefix, home, exists = existsSync } = opts;
31
- const dirName = `${basename(resolve(repoRoot))}-factory-${branchPrefixSlug(prefix)}-${issue}`;
32
- const primary = join(resolveWorktreeRoot({ repoRoot, parent, repo, home }), dirName);
33
- const legacy = join(dirname(resolve(repoRoot)), dirName);
34
- return !exists(primary) && primary !== legacy && exists(legacy) ? legacy : primary;
31
+ const repoBase = basename(resolve(repoRoot));
32
+ const root = resolveWorktreeRoot({ repoRoot, parent, repo, home });
33
+ const sibling = dirname(resolve(repoRoot));
34
+ const names = [
35
+ ...new Set([worktreeDirName(repoBase, issue, prefix), legacyWorktreeDirName(repoBase, issue, prefix)]),
36
+ ];
37
+ const primary = join(root, names[0]);
38
+ const fallbacks = [...names.slice(1).map((n) => join(root, n)), ...names.map((n) => join(sibling, n))];
39
+ if (exists(primary))
40
+ return primary;
41
+ return fallbacks.find((p) => p !== primary && exists(p)) ?? primary;
35
42
  }
36
43
  /** Adds an in-repo worktree parent to the repo's info/exclude. Returns true when a line was
37
44
  * written; false when the parent is outside the repo or already covered. */
@@ -49,8 +56,8 @@ export async function ensureWorktreeParentExcluded(repoRoot, worktreeParent) {
49
56
  catch {
50
57
  // no exclude file yet
51
58
  }
52
- const lines = existing.split(/\r?\n/).map((l) => l.trim());
53
- if (lines.includes(line) || lines.includes('/.factory/') || lines.includes('.factory/'))
59
+ const lines = new Set(existing.split(/\r?\n/).map((l) => l.trim()));
60
+ if (lines.has(line) || lines.has('/.factory/') || lines.has('.factory/'))
54
61
  return false;
55
62
  mkdirSync(dirname(file), { recursive: true });
56
63
  appendFileSync(file, `${existing === '' || existing.endsWith('\n') ? '' : '\n'}${line}\n`);
@@ -1 +1 @@
1
- {"version":3,"file":"worktree-location.js","sourceRoot":"","sources":["../../src/utils/worktree-location.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worktree-location.js","sourceRoot":"","sources":["../../src/utils/worktree-location.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,10 @@
1
1
  /** Basename of a lane worktree dir: `<repoBase>-factory-<prefixSlug>-<issue>`, skipping a segment
2
2
  * the name already ends with so the default `factory` prefix never yields `factory-factory` (#1709). */
3
3
  export declare function worktreeDirName(repoBase: string, issue: number, prefix?: string): string;
4
+ /** Pre-#2763 lane name, kept only so existing checkouts are still found and reaped. */
5
+ export declare function legacyWorktreeDirName(repoBase: string, issue: number, prefix?: string): string;
6
+ /** GC ownership by basename: the `${repoBase}-factory-` infix, or (#2763) an exact worktreeDirName match, since
7
+ * deduped names can lack the infix (software-factory + factory → software-factory-<n>); that one also needs a
8
+ * detached or lane branch so manual worktrees are never claimed. */
9
+ export declare function isFactoryDirName(repoBase: string, base: string, branch: string | null, branchPrefix?: string): boolean;
4
10
  //# sourceMappingURL=worktree-name.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"worktree-name.d.ts","sourceRoot":"","sources":["../../src/utils/worktree-name.ts"],"names":[],"mappings":"AAMA;yGACyG;AACzG,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAOxF"}
1
+ {"version":3,"file":"worktree-name.d.ts","sourceRoot":"","sources":["../../src/utils/worktree-name.ts"],"names":[],"mappings":"AAMA;yGACyG;AACzG,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAOxF;AAED,uFAAuF;AACvF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9F;AAED;;qEAEqE;AACrE,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAQT"}
@@ -1,5 +1,5 @@
1
1
  // packages/core/src/utils/worktree-name.ts — lane worktree directory naming (#1709).
2
- import { branchPrefixSlug } from './index.js';
2
+ import { branchPrefixSlug, factoryBranchPrefixes } from './index.js';
3
3
  /** Fixed ownership infix; worktree-gc matches it as `${repoBase}-factory-`. */
4
4
  const WORKTREE_MARKER = 'factory';
5
5
  /** Basename of a lane worktree dir: `<repoBase>-factory-<prefixSlug>-<issue>`, skipping a segment
@@ -13,4 +13,19 @@ export function worktreeDirName(repoBase, issue, prefix) {
13
13
  }
14
14
  return `${name}-${issue}`;
15
15
  }
16
+ /** Pre-#2763 lane name, kept only so existing checkouts are still found and reaped. */
17
+ export function legacyWorktreeDirName(repoBase, issue, prefix) {
18
+ return `${repoBase}-${WORKTREE_MARKER}-${branchPrefixSlug(prefix)}-${issue}`;
19
+ }
20
+ /** GC ownership by basename: the `${repoBase}-factory-` infix, or (#2763) an exact worktreeDirName match, since
21
+ * deduped names can lack the infix (software-factory + factory → software-factory-<n>); that one also needs a
22
+ * detached or lane branch so manual worktrees are never claimed. */
23
+ export function isFactoryDirName(repoBase, base, branch, branchPrefix) {
24
+ if (base.startsWith(`${repoBase}-${WORKTREE_MARKER}-`))
25
+ return true;
26
+ const n = base.match(/-(\d+)$/)?.[1];
27
+ if (n === undefined)
28
+ return false;
29
+ return factoryBranchPrefixes(branchPrefix).some((p) => worktreeDirName(repoBase, Number(n), p) === base && (branch === null || new RegExp(`^${p}/\\d+-`).test(branch)));
30
+ }
16
31
  //# sourceMappingURL=worktree-name.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"worktree-name.js","sourceRoot":"","sources":["../../src/utils/worktree-name.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,+EAA+E;AAC/E,MAAM,eAAe,GAAG,SAAS,CAAC;AAElC;yGACyG;AACzG,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,KAAa,EAAE,MAAe;IAC9E,IAAI,IAAI,GAAG,QAAQ,CAAC;IACpB,KAAK,MAAM,OAAO,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAClE,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,EAAE,CAAC;YAAE,SAAS;QAC/D,IAAI,GAAG,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"worktree-name.js","sourceRoot":"","sources":["../../src/utils/worktree-name.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAErE,+EAA+E;AAC/E,MAAM,eAAe,GAAG,SAAS,CAAC;AAElC;yGACyG;AACzG,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,KAAa,EAAE,MAAe;IAC9E,IAAI,IAAI,GAAG,QAAQ,CAAC;IACpB,KAAK,MAAM,OAAO,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAClE,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,EAAE,CAAC;YAAE,SAAS;QAC/D,IAAI,GAAG,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,qBAAqB,CAAC,QAAgB,EAAE,KAAa,EAAE,MAAe;IACpF,OAAO,GAAG,QAAQ,IAAI,eAAe,IAAI,gBAAgB,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;AAC/E,CAAC;AAED;;qEAEqE;AACrE,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,IAAY,EACZ,MAAqB,EACrB,YAAqB;IAErB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,QAAQ,IAAI,eAAe,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACpE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrC,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAClC,OAAO,qBAAqB,CAAC,YAAY,CAAC,CAAC,IAAI,CAC7C,CAAC,CAAC,EAAE,EAAE,CACJ,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAClH,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@on-par/factory-core",
3
- "version": "0.9.7-next.2",
3
+ "version": "0.9.7-next.21",
4
4
  "description": "Core engine: model router, constitutions, checkers, and pipeline phases for the Software Factory.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -54,10 +54,10 @@
54
54
  "prepack": "node ../../scripts/pack-hygiene-cli.ts prepack"
55
55
  },
56
56
  "dependencies": {
57
- "@on-par/adr-kit": "0.9.7-next.2",
58
- "@on-par/contracts": "0.9.7-next.2",
59
- "@on-par/factory-config": "0.9.7-next.2",
60
- "@on-par/repo-context": "0.9.7-next.2",
57
+ "@on-par/adr-kit": "0.9.7-next.21",
58
+ "@on-par/contracts": "0.9.7-next.21",
59
+ "@on-par/factory-config": "0.9.7-next.21",
60
+ "@on-par/repo-context": "0.9.7-next.21",
61
61
  "@octokit/rest": "^22.0.0",
62
62
  "execa": "^10.1.0",
63
63
  "gray-matter": "^4.0.3",