@aligndottech/cli 0.66.1 → 0.67.0

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 (65) hide show
  1. package/README.md +7 -3
  2. package/dist/commands/check.d.ts +19 -1
  3. package/dist/commands/check.d.ts.map +1 -1
  4. package/dist/commands/check.js +132 -22
  5. package/dist/commands/check.js.map +1 -1
  6. package/dist/commands/import/docs.js +2 -2
  7. package/dist/commands/import/docs.js.map +1 -1
  8. package/dist/commands/registry.d.ts.map +1 -1
  9. package/dist/commands/registry.js +3 -0
  10. package/dist/commands/registry.js.map +1 -1
  11. package/dist/commands/rule.d.ts +28 -0
  12. package/dist/commands/rule.d.ts.map +1 -0
  13. package/dist/commands/rule.js +100 -0
  14. package/dist/commands/rule.js.map +1 -0
  15. package/dist/lib/co-change-check.d.ts +33 -0
  16. package/dist/lib/co-change-check.d.ts.map +1 -0
  17. package/dist/lib/co-change-check.js +95 -0
  18. package/dist/lib/co-change-check.js.map +1 -0
  19. package/dist/lib/co-change-rule.d.ts +11 -0
  20. package/dist/lib/co-change-rule.d.ts.map +1 -0
  21. package/dist/lib/co-change-rule.js +2 -0
  22. package/dist/lib/co-change-rule.js.map +1 -0
  23. package/dist/lib/co-change-store.d.ts +25 -0
  24. package/dist/lib/co-change-store.d.ts.map +1 -0
  25. package/dist/lib/co-change-store.js +142 -0
  26. package/dist/lib/co-change-store.js.map +1 -0
  27. package/dist/lib/co-change.d.ts +54 -0
  28. package/dist/lib/co-change.d.ts.map +1 -0
  29. package/dist/lib/co-change.js +120 -0
  30. package/dist/lib/co-change.js.map +1 -0
  31. package/dist/lib/commit-shape.d.ts +16 -0
  32. package/dist/lib/commit-shape.d.ts.map +1 -1
  33. package/dist/lib/commit-shape.js +34 -2
  34. package/dist/lib/commit-shape.js.map +1 -1
  35. package/dist/lib/fetchers/docs-conventions.d.ts +29 -0
  36. package/dist/lib/fetchers/docs-conventions.d.ts.map +1 -0
  37. package/dist/lib/fetchers/docs-conventions.js +95 -0
  38. package/dist/lib/fetchers/docs-conventions.js.map +1 -0
  39. package/dist/lib/fetchers/docs.d.ts +6 -0
  40. package/dist/lib/fetchers/docs.d.ts.map +1 -1
  41. package/dist/lib/fetchers/docs.js +79 -11
  42. package/dist/lib/fetchers/docs.js.map +1 -1
  43. package/dist/lib/git.d.ts.map +1 -1
  44. package/dist/lib/git.js +36 -10
  45. package/dist/lib/git.js.map +1 -1
  46. package/dist/lib/local-db-cochange.d.ts +17 -0
  47. package/dist/lib/local-db-cochange.d.ts.map +1 -0
  48. package/dist/lib/local-db-cochange.js +23 -0
  49. package/dist/lib/local-db-cochange.js.map +1 -0
  50. package/dist/lib/local-db-migrate.d.ts.map +1 -1
  51. package/dist/lib/local-db-migrate.js +19 -0
  52. package/dist/lib/local-db-migrate.js.map +1 -1
  53. package/dist/lib/local-db.js +1 -1
  54. package/dist/lib/local-db.js.map +1 -1
  55. package/dist/lib/local-gateway-client.d.ts.map +1 -1
  56. package/dist/lib/local-gateway-client.js +20 -0
  57. package/dist/lib/local-gateway-client.js.map +1 -1
  58. package/dist/lib/local-ingest.d.ts +2 -0
  59. package/dist/lib/local-ingest.d.ts.map +1 -1
  60. package/dist/lib/local-ingest.js.map +1 -1
  61. package/dist/lib/mcp-instructions.shared.d.ts +1 -1
  62. package/dist/lib/mcp-instructions.shared.d.ts.map +1 -1
  63. package/dist/lib/mcp-instructions.shared.js +3 -3
  64. package/dist/lib/mcp-instructions.shared.js.map +1 -1
  65. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"co-change.js","sourceRoot":"","sources":["../../src/lib/co-change.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,8 @@ export declare const MIN_DECISION_SUBJECT_CHARS = 20;
15
15
  * Anchored and case-insensitive, as the hand-written literal it replaced was.
16
16
  */
17
17
  export declare function mechanicalSubjectRegex(prefixes: readonly string[]): RegExp;
18
+ export declare const CONVENTIONAL_PREFIX: RegExp;
19
+ export declare const STATED_WHY: RegExp;
18
20
  /**
19
21
  * A release or version-bump subject with no stated reason. In words, after any `type(scope):` and
20
22
  * `(#N)` are removed it is housekeeping when it is only a version ("v5.9.0"), or the word
@@ -37,4 +39,18 @@ export declare function isCutTitle(title: string): boolean;
37
39
  * feeds the first-run box and starter prompts and must not start hiding refactors there.
38
40
  */
39
41
  export declare function isNonBehaviouralType(title: string): boolean;
42
+ /**
43
+ * Is this a title-only change note: it leads with a one-off verb (add, fix, rename, update,
44
+ * remove, bump, refactor, document, typo, tidy), or a one-off conventional type (fix, test,
45
+ * refactor, chore, ci, docs, style, build), and carries nothing that makes it a decision? A PR
46
+ * title taken from a merge commit has no body to say why, so this is the only thing standing
47
+ * between a "rename abandonment endpoint" and the graph.
48
+ *
49
+ * Anything that does not lead like that is NOT one-off: decision verbs (use, switch, migrate,
50
+ * replace, drop, stop, move, change, make), `feat`, an `RFC:` prefix, and any title in a language
51
+ * whose verbs this list does not know. A one-off lead is rescued by a stated purpose
52
+ * (STATED_WHY: "so that", "to keep", "because" ...), a policy word or modal (adopt, require,
53
+ * never, should not ...), or a sweeping quantifier (all, every).
54
+ */
55
+ export declare function isOneOffChangeTitle(title: string): boolean;
40
56
  //# sourceMappingURL=commit-shape.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"commit-shape.d.ts","sourceRoot":"","sources":["../../src/lib/commit-shape.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,wFAE9B,CAAC;AAEX,uEAAuE;AACvE,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAG1E;AAeD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAI/D;AASD,kFAAkF;AAClF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,0HAA0H;AAC1H,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEjD;AAID;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3D"}
1
+ {"version":3,"file":"commit-shape.d.ts","sourceRoot":"","sources":["../../src/lib/commit-shape.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,wFAE9B,CAAC;AAEX,uEAAuE;AACvE,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAG1E;AAED,eAAO,MAAM,mBAAmB,QAAiC,CAAC;AAWlE,eAAO,MAAM,UAAU,QAA+J,CAAC;AAEvL;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAI/D;AASD,kFAAkF;AAClF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,0HAA0H;AAC1H,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEjD;AAID;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3D;AASD;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAS1D"}
@@ -20,7 +20,7 @@ export function mechanicalSubjectRegex(prefixes) {
20
20
  const escaped = prefixes.map((p) => p.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
21
21
  return new RegExp(`^(${escaped.join('|')})`, 'i');
22
22
  }
23
- const CONVENTIONAL_PREFIX = /^[a-z]+(?:\([^)]*\))?!?:\s*/i;
23
+ export const CONVENTIONAL_PREFIX = /^[a-z]+(?:\([^)]*\))?!?:\s*/i;
24
24
  const PR_REFERENCE = /\s*\(#\d+[^)]*\)/g;
25
25
  // "v5.9.0", "5.11.2", "Version 6.0.0-alpha.1": a subject that is only a version.
26
26
  const VERSION_ONLY = /^(?:v(?:ersion)?\s*)?\d+\.\d+(?:\.\d+)?(?:[-+.][\w.-]+)?$/i;
@@ -31,7 +31,7 @@ const BARE_BUMP_OR_RELEASE = /^(?:bump\w*|releas\w*)(?:\s*$|\s+v?\d+\.\d)/i;
31
31
  const DEPENDENCY_MOVE = /^(?:bump\w*|updat\w*|upgrad\w*)\s+(?:dependency\s+)?[@\w./-]+\s+(?:from\s+v?\d[\w.-]*\s+)?(?:to\s+v?\d[\w.-]*)(?:\s+in\s.*|\s*\(.*\))?[.]?$/i;
32
32
  // A subject that says why is a decision whatever its shape: "bump timeout ... because the upstream is slow",
33
33
  // "bump minimum Node to 20, drops 18", "bump lodash to 4.17.21 (CVE-2021-23337)".
34
- const STATED_WHY = /\b(?:because|so that|in order to|to avoid|to prevent|due to|since|cve-\d+|drops?|dropping|security|breaking)\b/i;
34
+ export const STATED_WHY = /\b(?:because|so that|so we|so it|in order to|to keep|to avoid|to prevent|to ensure|to make sure|due to|since|cve-\d+|drops?|dropping|security|breaking)\b/i;
35
35
  /**
36
36
  * A release or version-bump subject with no stated reason. In words, after any `type(scope):` and
37
37
  * `(#N)` are removed it is housekeeping when it is only a version ("v5.9.0"), or the word
@@ -72,4 +72,36 @@ const NON_BEHAVIOURAL_TYPE = /^(?:docs|style|test|chore|ci|build|release|refacto
72
72
  export function isNonBehaviouralType(title) {
73
73
  return NON_BEHAVIOURAL_TYPE.test(title.trim());
74
74
  }
75
+ const POLICY_WORD = /\b(?:adopt|requires?|standardi[sz]e[sd]?|enforce[sd]?|mandate[sd]?|deprecate[sd]?|always|never|must|only|all|every|no longer|should(?: not)?|should(?:n't)?|do not|don't)\b/i;
76
+ const ONE_OFF_VERBS = /^(?:add|fix|rename|update|remove|bump|refactor|document|extend|post|put|modify|typo|tidy)\b/i;
77
+ const ONE_OFF_TYPES = new Set(['fix', 'test', 'refactor', 'chore', 'ci', 'docs', 'style', 'build']);
78
+ const TYPO = /\btypos?\b/i;
79
+ const SWEEPING_QUANTIFIER = /\b(?:all|every)\b/i;
80
+ const TYPE_PREFIX = /^([a-z]+)(?:\([^)]*\))?!?:\s*/i;
81
+ /**
82
+ * Is this a title-only change note: it leads with a one-off verb (add, fix, rename, update,
83
+ * remove, bump, refactor, document, typo, tidy), or a one-off conventional type (fix, test,
84
+ * refactor, chore, ci, docs, style, build), and carries nothing that makes it a decision? A PR
85
+ * title taken from a merge commit has no body to say why, so this is the only thing standing
86
+ * between a "rename abandonment endpoint" and the graph.
87
+ *
88
+ * Anything that does not lead like that is NOT one-off: decision verbs (use, switch, migrate,
89
+ * replace, drop, stop, move, change, make), `feat`, an `RFC:` prefix, and any title in a language
90
+ * whose verbs this list does not know. A one-off lead is rescued by a stated purpose
91
+ * (STATED_WHY: "so that", "to keep", "because" ...), a policy word or modal (adopt, require,
92
+ * never, should not ...), or a sweeping quantifier (all, every).
93
+ */
94
+ export function isOneOffChangeTitle(title) {
95
+ const t = title.trim().replace(PR_REFERENCE, '').trim();
96
+ const prefix = t.match(TYPE_PREFIX);
97
+ let oneOff;
98
+ if (prefix)
99
+ oneOff = ONE_OFF_TYPES.has(prefix[1].toLowerCase()) || TYPO.test(t);
100
+ else
101
+ oneOff = ONE_OFF_VERBS.test(t) || TYPO.test(t);
102
+ if (!oneOff)
103
+ return false;
104
+ const body = prefix ? t.slice(prefix[0].length) : t;
105
+ return !(STATED_WHY.test(body) || POLICY_WORD.test(body) || SWEEPING_QUANTIFIER.test(body));
106
+ }
75
107
  //# sourceMappingURL=commit-shape.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"commit-shape.js","sourceRoot":"","sources":["../../src/lib/commit-shape.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM;CACnE,CAAC;AAEX,uEAAuE;AACvE,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAE7C;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAA2B;IAChE,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9E,OAAO,IAAI,MAAM,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,mBAAmB,GAAG,8BAA8B,CAAC;AAC3D,MAAM,YAAY,GAAG,mBAAmB,CAAC;AACzC,iFAAiF;AACjF,MAAM,YAAY,GAAG,4DAA4D,CAAC;AAClF,8FAA8F;AAC9F,MAAM,oBAAoB,GAAG,8CAA8C,CAAC;AAC5E,yHAAyH;AACzH,kIAAkI;AAClI,MAAM,eAAe,GAAG,8IAA8I,CAAC;AACvK,6GAA6G;AAC7G,kFAAkF;AAClF,MAAM,UAAU,GAAG,iHAAiH,CAAC;AAErI;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9F,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClG,CAAC;AAED;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,4IAA4I,CAAC;AAExK,kFAAkF;AAClF,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,sBAAsB,CAAC,KAAK,CAAC,CAAC;AAChF,CAAC;AAED,0HAA0H;AAC1H,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAC/B,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,YAAY,CAAC;AAC7C,CAAC;AAED,MAAM,oBAAoB,GAAG,wEAAwE,CAAC;AAEtG;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,OAAO,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"commit-shape.js","sourceRoot":"","sources":["../../src/lib/commit-shape.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { CoChangeRule } from '../co-change-rule.js';
2
+ /**
3
+ * Where a repo writes its working rules when it has no ADRs and no CLAUDE.md. Measured on
4
+ * recart/openapi: the rule "every notable API change adds an entry to docs/changelog.md in the
5
+ * same PR" lived in README.md, and the versioning policy in the changelog's own Versioning
6
+ * section, so `connect docs` imported nothing.
7
+ *
8
+ * Only rule-bearing SECTIONS are taken. A README is mostly install and usage steps, and a
9
+ * changelog is mostly release entries ("what changed in 1.2.0"), which are history and not
10
+ * decisions about how to work. Both are left out.
11
+ */
12
+ export declare const README_FILES: string[];
13
+ export declare const CONTRIBUTING_FILES: string[];
14
+ export declare const CHANGELOG_FILES: string[];
15
+ export type DocKind = 'readme' | 'contributing' | 'changelog';
16
+ /** A changelog that uses `# 1.2.0` as a release heading puts the whole release inside the
17
+ * previous section's text: cut the body where the next top-level heading starts. */
18
+ export declare function sectionBody(kind: DocKind, body: string): string;
19
+ export declare function isRuleSection(kind: DocKind, heading: string, body: string): boolean;
20
+ /**
21
+ * The structured form of "add an entry to <changelog> in the same PR", when the text says
22
+ * both halves. `require_paths` is the changelog the text names. `when_paths` is a directory
23
+ * named in backticks in the SAME sentence as the "same PR" clause, else - when the rule is
24
+ * about "the API" - the repo's top-level openapi/api/swagger directory that actually holds a
25
+ * spec file. When neither is clear there is NO rule: an empty or guessed trigger would demand
26
+ * the file on PRs the text never mentioned. The prose decision is still imported.
27
+ */
28
+ export declare function inferCoChangeRule(body: string, repoRoot: string): Promise<CoChangeRule | undefined>;
29
+ //# sourceMappingURL=docs-conventions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-conventions.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/docs-conventions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD;;;;;;;;;GASG;AAEH,eAAO,MAAM,YAAY,UAAgB,CAAC;AAC1C,eAAO,MAAM,kBAAkB,UAAyE,CAAC;AACzG,eAAO,MAAM,eAAe,UAA6E,CAAC;AAkB1G,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,cAAc,GAAG,WAAW,CAAC;AAE9D;qFACqF;AACrF,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CASnF;AA0BD;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAezG"}
@@ -0,0 +1,95 @@
1
+ import { readdir, readFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ /**
4
+ * Where a repo writes its working rules when it has no ADRs and no CLAUDE.md. Measured on
5
+ * recart/openapi: the rule "every notable API change adds an entry to docs/changelog.md in the
6
+ * same PR" lived in README.md, and the versioning policy in the changelog's own Versioning
7
+ * section, so `connect docs` imported nothing.
8
+ *
9
+ * Only rule-bearing SECTIONS are taken. A README is mostly install and usage steps, and a
10
+ * changelog is mostly release entries ("what changed in 1.2.0"), which are history and not
11
+ * decisions about how to work. Both are left out.
12
+ */
13
+ export const README_FILES = ['README.md'];
14
+ export const CONTRIBUTING_FILES = ['CONTRIBUTING.md', '.github/CONTRIBUTING.md', 'docs/CONTRIBUTING.md'];
15
+ export const CHANGELOG_FILES = ['CHANGELOG.md', 'docs/changelog.md', 'docs/CHANGELOG.md', 'changelog.md'];
16
+ /** A line that states an obligation or prohibition. */
17
+ const RULE_MARKER = /\b(?:must(?: not)?|never|always|every|do not|don't|required?|ensure|make sure|should)\b/i;
18
+ /** Headings under which a README section can be a rule. CONTRIBUTING needs no heading, but still needs a RULE_MARKER line. */
19
+ const CONVENTION_HEADING = /changelog|contribut|convention|guideline|\brules?\b|policy|versioning|release process|commit|pull request|branch|review|style|deprecat|workflow|development|process|branching|how to|standards?/i;
20
+ /** Headings a changelog uses for policy rather than history. */
21
+ const CHANGELOG_POLICY_HEADING = /versioning|convention|policy|deprecat|contribut|guideline|\brules?\b|how to/i;
22
+ /** Keep a Changelog's category headings: entries of one release, never policy. */
23
+ const CHANGELOG_CATEGORY = /^(?:added|changed|deprecated|removed|fixed|security)$/i;
24
+ /** `[1.2.0] - 2026-01-01`, `2026-07-07`, `v2`, `Unreleased`: a release entry, never a rule. */
25
+ const RELEASE_HEADING = /^\[?v?\d+(?:\.\d+)|^\[?unreleased\b|\d{4}-\d{2}(?:-\d{2})?/i;
26
+ /** A changelog that uses `# 1.2.0` as a release heading puts the whole release inside the
27
+ * previous section's text: cut the body where the next top-level heading starts. */
28
+ export function sectionBody(kind, body) {
29
+ return kind === 'changelog' ? body.split(/\n(?=#\s)/)[0].trim() : body;
30
+ }
31
+ export function isRuleSection(kind, heading, body) {
32
+ // A changelog policy section is a rule by its heading: a versioning policy is often written
33
+ // as plain description ("breaking changes create a new dated version") with no "must" in it.
34
+ if (kind === 'changelog') {
35
+ const h = heading.trim();
36
+ return !RELEASE_HEADING.test(h) && !CHANGELOG_CATEGORY.test(h) && CHANGELOG_POLICY_HEADING.test(h);
37
+ }
38
+ if (!RULE_MARKER.test(body))
39
+ return false;
40
+ return kind === 'contributing' || CONVENTION_HEADING.test(heading);
41
+ }
42
+ const SAME_PR = /\bsame (?:PR|pull request)\b/i;
43
+ const CHANGELOG_PATH = /[\w./-]*changelog[\w.-]*\.md/i;
44
+ const BACKTICKED_DIR = /`((?:[\w.-]+\/)+)(?:\*\*)?`/g;
45
+ /** Not `spec`/`specs`: in most repos that is rspec or a test dir, not an API description. */
46
+ const SPEC_DIRS = ['openapi', 'api', 'swagger'];
47
+ /** A sentence, or a list item, so "same PR" and a directory can be required to sit together. */
48
+ function sentences(text) {
49
+ return text.split(/(?<=[.!?])\s+|\n+/).filter(Boolean);
50
+ }
51
+ /** Does this directory hold an OpenAPI/Swagger description: a yaml/yml/json file named for one, or
52
+ * whose top-level key is `openapi:` / `swagger:` (read from the first 4 KB). */
53
+ async function holdsApiSpec(dir) {
54
+ const entries = await readdir(dir, { withFileTypes: true }).catch(() => []);
55
+ for (const e of entries) {
56
+ if (!e.isFile() || !/\.(?:ya?ml|json)$/i.test(e.name))
57
+ continue;
58
+ if (/openapi|swagger/i.test(e.name))
59
+ return true;
60
+ const head = (await readFile(path.join(dir, e.name), 'utf8').catch(() => '')).slice(0, 4096);
61
+ if (/^["']?(?:openapi|swagger)["']?\s*:/m.test(head))
62
+ return true;
63
+ }
64
+ return false;
65
+ }
66
+ /**
67
+ * The structured form of "add an entry to <changelog> in the same PR", when the text says
68
+ * both halves. `require_paths` is the changelog the text names. `when_paths` is a directory
69
+ * named in backticks in the SAME sentence as the "same PR" clause, else - when the rule is
70
+ * about "the API" - the repo's top-level openapi/api/swagger directory that actually holds a
71
+ * spec file. When neither is clear there is NO rule: an empty or guessed trigger would demand
72
+ * the file on PRs the text never mentioned. The prose decision is still imported.
73
+ */
74
+ export async function inferCoChangeRule(body, repoRoot) {
75
+ const clause = sentences(body).filter((s) => SAME_PR.test(s));
76
+ if (clause.length === 0)
77
+ return undefined;
78
+ const required = clause.join(' ').match(CHANGELOG_PATH)?.[0] ?? body.match(CHANGELOG_PATH)?.[0];
79
+ if (!required)
80
+ return undefined;
81
+ const named = clause.flatMap((s) => [...s.matchAll(BACKTICKED_DIR)].map((m) => `${m[1]}**`));
82
+ let when = [...new Set(named)];
83
+ if (when.length === 0 && /\bAPI\b/.test(body)) {
84
+ for (const d of SPEC_DIRS) {
85
+ if (await holdsApiSpec(path.join(repoRoot, d))) {
86
+ when = [`${d}/**`];
87
+ break;
88
+ }
89
+ }
90
+ }
91
+ if (when.length === 0)
92
+ return undefined;
93
+ return { when_paths: when, require_paths: [path.posix.normalize(required)], scope: 'same_pr' };
94
+ }
95
+ //# sourceMappingURL=docs-conventions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-conventions.js","sourceRoot":"","sources":["../../../src/lib/fetchers/docs-conventions.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,10 @@
1
+ import type { PersonalImportItem } from '../personal-import.js';
1
2
  import type { CaptureFetchResult } from './capture.js';
3
+ import type { CoChangeRule } from '../co-change-rule.js';
4
+ /** An imported doc item, plus the structured co-change rule when its text states one. */
5
+ export type DocsItem = PersonalImportItem & {
6
+ co_change_rule?: CoChangeRule;
7
+ };
2
8
  /**
3
9
  * The same read, plus its capture report. A local read has no page size to fall
4
10
  * off and no access to lack, so the one thing it drops is a headed section under the
@@ -1 +1 @@
1
- {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/docs.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAqNvD;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAYvG"}
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/docs.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AA0LzD,yFAAyF;AACzF,MAAM,MAAM,QAAQ,GAAG,kBAAkB,GAAG;IAAE,cAAc,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC;AA8F9E;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAiBvG"}
@@ -3,8 +3,9 @@ import path from 'node:path';
3
3
  import { buildBlobUrl, getCurrentBranch, getRemoteUrl } from '../git.js';
4
4
  import { ALIGN_NUDGE_END, ALIGN_NUDGE_START } from '../agent-rules.js';
5
5
  import { ALIGN_IMPORT_LINE } from '../decisions-context.js';
6
+ import { CHANGELOG_FILES, CONTRIBUTING_FILES, inferCoChangeRule, isRuleSection, README_FILES, sectionBody, } from './docs-conventions.js';
6
7
  /**
7
- * Read what the repo already wrote down, credential-free. Two sources:
8
+ * Read what the repo already wrote down, credential-free. Three sources:
8
9
  *
9
10
  * - ADR directories, the common naming conventions. ADRs are decision-shaped by
10
11
  * construction (title, status, context, decision) - highest precision, lowest
@@ -12,8 +13,10 @@ import { ALIGN_IMPORT_LINE } from '../decisions-context.js';
12
13
  * - CLAUDE.md / AGENTS.md content the user wrote themselves, minus the block and
13
14
  * import line Align itself put there (align-cli#116: Align owns `.align/`
14
15
  * outright and must never re-ingest its own output - that is a feedback loop).
16
+ * - The rule-bearing sections of README.md, CONTRIBUTING.md and the changelog's policy
17
+ * sections (docs-conventions.ts). Never a changelog's release entries: those are history.
15
18
  *
16
- * Both are filed under platform: 'docs', a value distinct from 'git'. a measurement of
19
+ * All are filed under platform: 'docs', a value distinct from 'git'. a measurement of
17
20
  * a git-only import at 1,484 rows of "what changed and almost no why"; an ADR is exactly
18
21
  * the "why" a commit subject cannot carry, and collapsing the two under one platform
19
22
  * would destroy the only cheap way to select on that distinction later.
@@ -165,6 +168,64 @@ async function readAgentRulesItems(repoRoot, remoteUrl, branch) {
165
168
  }
166
169
  return { items, droppedShort };
167
170
  }
171
+ const CONVENTION_SOURCES = [
172
+ { kind: 'readme', files: README_FILES },
173
+ { kind: 'contributing', files: CONTRIBUTING_FILES },
174
+ { kind: 'changelog', files: CHANGELOG_FILES },
175
+ ];
176
+ /**
177
+ * README / CONTRIBUTING / changelog: only the sections that state a rule (see
178
+ * docs-conventions.ts). A headed section that does not is counted, so the capture report can
179
+ * say how many were left out; the headingless preamble is not, as in readAgentRulesItems.
180
+ */
181
+ async function readConventionItems(repoRoot, remoteUrl, branch) {
182
+ const items = [];
183
+ let droppedNonRule = 0;
184
+ let droppedShort = 0;
185
+ const seenFiles = new Set();
186
+ for (const { kind, files } of CONVENTION_SOURCES) {
187
+ for (const file of files) {
188
+ // A case-insensitive filesystem answers CHANGELOG.md and changelog.md with one file.
189
+ const key = file.toLowerCase();
190
+ if (seenFiles.has(key))
191
+ continue;
192
+ let raw;
193
+ try {
194
+ raw = await readFile(path.join(repoRoot, file), 'utf8');
195
+ }
196
+ catch {
197
+ continue;
198
+ }
199
+ seenFiles.add(key);
200
+ const seenSlugs = new Map();
201
+ for (const section of splitIntoSections(stripAlignOwnedContent(raw))) {
202
+ if (!section.heading)
203
+ continue;
204
+ const body = sectionBody(kind, section.body).replace(/\n+---+\s*$/, '').trim();
205
+ if (!isRuleSection(kind, section.heading, body)) {
206
+ droppedNonRule++;
207
+ continue;
208
+ }
209
+ if (body.length < MIN_CHUNK_CHARS) {
210
+ droppedShort++;
211
+ continue;
212
+ }
213
+ const slug = slugify(section.heading);
214
+ const seen = seenSlugs.get(slug) ?? 0;
215
+ seenSlugs.set(slug, seen + 1);
216
+ const rule = await inferCoChangeRule(body, repoRoot);
217
+ items.push({
218
+ source_url: `${buildBlobUrl(remoteUrl, branch, file)}#${slug}${seen > 0 ? `-${seen + 1}` : ''}`,
219
+ platform: 'docs',
220
+ raw_text: body,
221
+ title: section.heading,
222
+ ...(rule ? { co_change_rule: rule } : {}),
223
+ });
224
+ }
225
+ }
226
+ }
227
+ return { items, droppedNonRule, droppedShort };
228
+ }
168
229
  async function readDocsItems(opts) {
169
230
  const repoRoot = opts.cwd ?? process.cwd();
170
231
  const gitOpts = opts.cwd ? { cwd: opts.cwd } : undefined;
@@ -182,16 +243,18 @@ async function readDocsItems(opts) {
182
243
  // Capped even at exact equality: the agent-rules files were never opened BECAUSE the
183
244
  // limit was already full, so something may have been left out and nobody counted it.
184
245
  if (remaining <= 0)
185
- return { items: adrItems, scanned: adrFiles.length, capped: true, droppedShort: 0 };
246
+ return { items: adrItems, scanned: adrFiles.length, capped: true, droppedShort: 0, droppedNonRule: 0 };
186
247
  const { items: agentRulesItems, droppedShort } = await readAgentRulesItems(repoRoot, remoteUrl, branch);
187
- const candidates = adrFiles.length + agentRulesItems.length;
248
+ const conventions = await readConventionItems(repoRoot, remoteUrl, branch);
249
+ const candidates = adrFiles.length + agentRulesItems.length + conventions.items.length;
188
250
  return {
189
- items: [...adrItems, ...agentRulesItems].slice(0, opts.limit),
190
- scanned: candidates + droppedShort,
251
+ items: [...adrItems, ...agentRulesItems, ...conventions.items].slice(0, opts.limit),
252
+ scanned: candidates + droppedShort + conventions.droppedShort + conventions.droppedNonRule,
191
253
  // Strictly more than the limit: everything was read, so the cap bound the read only
192
254
  // if the slice actually cut something.
193
255
  capped: candidates > opts.limit,
194
- droppedShort,
256
+ droppedShort: droppedShort + conventions.droppedShort,
257
+ droppedNonRule: conventions.droppedNonRule,
195
258
  };
196
259
  }
197
260
  /**
@@ -205,15 +268,20 @@ async function readDocsItems(opts) {
205
268
  * ADRs alone fill the limit, so no count is invented for it.
206
269
  */
207
270
  export async function fetchDocsItems(opts) {
208
- const { items, scanned, capped, droppedShort } = await readDocsItems(opts);
271
+ const { items, scanned, capped, droppedShort, droppedNonRule } = await readDocsItems(opts);
209
272
  return {
210
273
  items,
211
274
  report: {
212
275
  scanned,
213
276
  ...(capped ? { requested: opts.limit } : {}),
214
- skips: droppedShort > 0
215
- ? [{ count: droppedShort, detail: `sections under ${MIN_CHUNK_CHARS} characters (a bare heading or a one-line pointer)` }]
216
- : [],
277
+ skips: [
278
+ ...(droppedShort > 0
279
+ ? [{ count: droppedShort, detail: `sections under ${MIN_CHUNK_CHARS} characters (a bare heading or a one-line pointer)` }]
280
+ : []),
281
+ ...(droppedNonRule > 0
282
+ ? [{ count: droppedNonRule, detail: 'README, CONTRIBUTING and changelog sections that state no rule (install steps, release entries)' }]
283
+ : []),
284
+ ],
217
285
  },
218
286
  };
219
287
  }
@@ -1 +1 @@
1
- {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../../src/lib/fetchers/docs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../../src/lib/fetchers/docs.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"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"}
package/dist/lib/git.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { execa } from 'execa';
2
2
  import os from 'node:os';
3
- import { isReleaseOrBumpSubject, MECHANICAL_SUBJECT_PREFIXES, mechanicalSubjectRegex, MIN_DECISION_SUBJECT_CHARS } from './commit-shape.js';
3
+ import { CONVENTIONAL_PREFIX, isOneOffChangeTitle, isReleaseOrBumpSubject, MECHANICAL_SUBJECT_PREFIXES, mechanicalSubjectRegex, MIN_DECISION_SUBJECT_CHARS, STATED_WHY } from './commit-shape.js';
4
4
  /**
5
5
  * Same as {@link getCommitHistory}, plus the raw scanned count. A separate export
6
6
  * because {@link getCommitHistory}'s `Promise<GitCommit[]>` signature is the
@@ -70,14 +70,15 @@ export async function getCommitHistoryDetailed(opts) {
70
70
  const shaped = resolveCommitShape(subject, bodyLines.join('\n').trimEnd());
71
71
  if (!isDecisionCommit(shaped.subject))
72
72
  return;
73
- // A promoted merge already cleared an extra bar: its subject came from the
74
- // body's own first line via isDecisionCommit, and its body always retains the original
75
- // "Merge pull request #N from x/y" line for the PR ref - so it never needs to ALSO
76
- // clear the rationale bar below. A plain commit gets no such head start: its subject
77
- // is unvetted prose, so the body has to state why, or it is pure "what changed"
78
- // (the whole complaint this filter exists to answer).
73
+ // A promoted merge's subject is the PR title, and its body always starts with the original
74
+ // "Merge pull request #N from x/y" line for the PR ref. That line is not a reason, so it is
75
+ // left out of the rationale check. The PR is kept when the rest of the body states a reason,
76
+ // or when the title is not a one-off change note (a title names a change, not why).
79
77
  const wasPromotedMerge = shaped.subject !== subject;
80
- if (!wasPromotedMerge && !hasStatedRationale(shaped.subject, shaped.body)) {
78
+ const bodyForRationale = wasPromotedMerge
79
+ ? shaped.body.split('\n').filter(l => !/^merge (?:pull request|branch)\b/i.test(l.trim())).join('\n')
80
+ : shaped.body;
81
+ if (!hasStatedRationale(shaped.subject, bodyForRationale) && !(wasPromotedMerge && !isOneOffChangeTitle(shaped.subject))) {
81
82
  rejectedByRationale++;
82
83
  return;
83
84
  }
@@ -173,7 +174,8 @@ export function isDecisionCommit(subject) {
173
174
  const trimmed = subject.trim();
174
175
  if (trimmed.length < MIN_DECISION_SUBJECT_CHARS)
175
176
  return false;
176
- return !MECHANICAL_SUBJECT_RE.test(trimmed) && !isReleaseOrBumpSubject(trimmed);
177
+ return !MECHANICAL_SUBJECT_RE.test(trimmed) && !isReleaseOrBumpSubject(trimmed)
178
+ && !FILE_ACTION_LINE_RE.test(trimmed.replace(/\s*\(#\d+\)\s*$/, ''));
177
179
  }
178
180
  // A line that IS a git trailer (key: value at the start of the line), not merely a
179
181
  // sentence that happens to mention one of these words mid-line - "Refs APP-123 and
@@ -206,9 +208,33 @@ export function hasStatedRationale(subject, body) {
206
208
  .map(l => l.trim())
207
209
  .filter(Boolean)
208
210
  .filter(l => !TRAILER_LINE_RE.test(l) && !GENERATED_WITH_RE.test(l))
209
- .filter(l => normalizeForEcho(l) !== subjectNorm);
211
+ .filter(l => normalizeForEcho(l) !== subjectNorm)
212
+ .filter(l => !SEPARATOR_LINE_RE.test(l) && !FILE_ACTION_LINE_RE.test(l))
213
+ .filter(isReasonBearingLine);
210
214
  return remaining.length > 0;
211
215
  }
216
+ // GitHub's squash-merge body is the PR's own commit list: a bullet per commit subject,
217
+ // a `---------` rule before the trailers, and (for web-editor commits) lines like
218
+ // "Modified 2 files". All of it says WHAT changed; none of it is a reason.
219
+ const SEPARATOR_LINE_RE = /^-{3,}$/;
220
+ const FILE_ACTION_LINE_RE = /^(?:[*-]\s+)?(?:added|modified|deleted|renamed|removed)\s+(?:\d+\s+files?|\S*[/.]\S*)\s*$/i;
221
+ const BULLET_RE = /^[*-]\s+(.*)$/;
222
+ /** A bullet with no stated why only counts as prose from this many words up. */
223
+ const MIN_BULLET_WORDS = 8;
224
+ /** A plain line is evidence of a reason. A squash bullet is evidence only when it says why
225
+ * ("because", "to avoid", ...) or is long enough to be a sentence rather than a commit
226
+ * subject; a bullet in `type(scope): ...` form is a subject however long it is. */
227
+ function isReasonBearingLine(line) {
228
+ const bullet = line.match(BULLET_RE);
229
+ if (!bullet)
230
+ return true;
231
+ const text = bullet[1];
232
+ if (STATED_WHY.test(text))
233
+ return true;
234
+ if (CONVENTIONAL_PREFIX.test(text))
235
+ return false;
236
+ return text.split(/\s+/).length >= MIN_BULLET_WORDS;
237
+ }
212
238
  export async function getRemoteUrl(opts = {}) {
213
239
  try {
214
240
  const { stdout } = await execa('git', ['remote', 'get-url', 'origin'], opts.cwd ? { cwd: opts.cwd } : {});