@renaiss-shipflow/cli 0.10.0 → 0.12.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.
Files changed (59) hide show
  1. package/dist/client.d.ts +27 -0
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +5 -0
  4. package/dist/client.js.map +1 -1
  5. package/dist/commands/config.d.ts.map +1 -1
  6. package/dist/commands/config.js +3 -1
  7. package/dist/commands/config.js.map +1 -1
  8. package/dist/commands/git-identity.d.ts +3 -0
  9. package/dist/commands/git-identity.d.ts.map +1 -0
  10. package/dist/commands/git-identity.js +77 -0
  11. package/dist/commands/git-identity.js.map +1 -0
  12. package/dist/commands/issue.d.ts.map +1 -1
  13. package/dist/commands/issue.js +49 -6
  14. package/dist/commands/issue.js.map +1 -1
  15. package/dist/commands/login.d.ts.map +1 -1
  16. package/dist/commands/login.js +16 -2
  17. package/dist/commands/login.js.map +1 -1
  18. package/dist/commands/pr.d.ts.map +1 -1
  19. package/dist/commands/pr.js +107 -3
  20. package/dist/commands/pr.js.map +1 -1
  21. package/dist/commands/stats.d.ts +7 -0
  22. package/dist/commands/stats.d.ts.map +1 -1
  23. package/dist/commands/stats.js +72 -1
  24. package/dist/commands/stats.js.map +1 -1
  25. package/dist/commands/test.d.ts +10 -0
  26. package/dist/commands/test.d.ts.map +1 -1
  27. package/dist/commands/test.js +52 -14
  28. package/dist/commands/test.js.map +1 -1
  29. package/dist/config.d.ts +7 -0
  30. package/dist/config.d.ts.map +1 -1
  31. package/dist/config.js +9 -0
  32. package/dist/config.js.map +1 -1
  33. package/dist/escalation-format.d.ts +35 -2
  34. package/dist/escalation-format.d.ts.map +1 -1
  35. package/dist/escalation-format.js +81 -4
  36. package/dist/escalation-format.js.map +1 -1
  37. package/dist/gh.d.ts +40 -1
  38. package/dist/gh.d.ts.map +1 -1
  39. package/dist/gh.js +88 -3
  40. package/dist/gh.js.map +1 -1
  41. package/dist/git-local.d.ts +4 -0
  42. package/dist/git-local.d.ts.map +1 -1
  43. package/dist/git-local.js +37 -0
  44. package/dist/git-local.js.map +1 -1
  45. package/dist/index.js +2 -0
  46. package/dist/index.js.map +1 -1
  47. package/dist/packet.d.ts +43 -3
  48. package/dist/packet.d.ts.map +1 -1
  49. package/dist/packet.js +124 -17
  50. package/dist/packet.js.map +1 -1
  51. package/dist/review-contract-data.d.ts +91 -0
  52. package/dist/review-contract-data.d.ts.map +1 -0
  53. package/dist/review-contract-data.js +111 -0
  54. package/dist/review-contract-data.js.map +1 -0
  55. package/dist/review-contract.d.ts +66 -0
  56. package/dist/review-contract.d.ts.map +1 -0
  57. package/dist/review-contract.js +139 -0
  58. package/dist/review-contract.js.map +1 -0
  59. package/package.json +1 -1
package/dist/packet.js CHANGED
@@ -6,26 +6,36 @@
6
6
  // packet tempts a reviewer into confidently redefining "spec" as whatever the
7
7
  // diff implies — the exact failure family Superpowers 6 measured (0/5 flagged
8
8
  // a missing brief). When no linked issue exists, the packet says so loudly.
9
- // Budgets mirror the server-side pr_review runner so both reviewers see
10
- // comparably sized diffs.
11
- export const PACKET_PER_FILE_CAP = 6000;
12
- export const PACKET_TOTAL_CAP = 60000;
13
- export const PACKET_BRIEF_CAP = 4000;
9
+ import { REVIEW_CONTRACT } from "./review-contract-data.js";
10
+ // Budgets come from the canonical review contract (contracts/review-contract.json,
11
+ // epic #96 slice 2) — the SAME values the server-side pr_review runner loads, so
12
+ // both reviewers see identically sized diffs.
13
+ export const PACKET_PER_FILE_CAP = REVIEW_CONTRACT.budgets.perFileDiffCap;
14
+ export const PACKET_TOTAL_CAP = REVIEW_CONTRACT.budgets.packetTotalCap;
15
+ export const PACKET_BRIEF_CAP = REVIEW_CONTRACT.budgets.briefCap; // acceptance criteria sit at the BOTTOM of issue bodies — a tight cap silently drops the spec's checklist
14
16
  // Noise paths excluded from the packet diff — lockfiles, generated output,
15
- // vendored deps, binary-adjacent assets. Kept in sync (by convention) with the
16
- // server's featuremap noise lists.
17
- const NOISE_SUBSTRINGS = [
18
- "node_modules/", "vendor/", "dist/", "build/", ".next/", "__generated__/",
19
- "__snapshots__/", "coverage/", "storybook-static/", ".turbo/", "out/",
20
- ];
17
+ // vendored deps, binary-adjacent assets. Loaded from the shared contract's
18
+ // review-filter scope (the union of both reviewers' pre-contract lists).
19
+ // The contract's `noise.featuremapOnly` scope (.claude/ — tracked plugin
20
+ // source) is deliberately NOT consumed here: the server reviewer drops those
21
+ // paths (featuremap.IsNoisePath), so this packet is the only reviewer that
22
+ // sees them — filtering them here would blind review entirely.
23
+ // Matching: substrings contains-match; suffixes/extensions match as trailing
24
+ // patterns; basenames match the path's base name EXACTLY (parity with the Go
25
+ // side's filepath.Base — `notbun.lockb` must not match `bun.lockb`). All
26
+ // matching is case-insensitive (this side's pre-contract semantics).
27
+ const NOISE_SUBSTRINGS = REVIEW_CONTRACT.noise.substrings.map((s) => s.toLowerCase());
21
28
  const NOISE_SUFFIXES = [
22
- ".lock", ".sum", "package-lock.json", "bun.lockb", ".min.js", ".min.css",
23
- ".map", ".snap", ".png", ".jpg", ".jpeg", ".gif", ".ico", ".svg",
24
- ".woff", ".woff2", ".ttf", ".eot", ".pb.go", "_generated.go", ".gen.go",
25
- ];
29
+ ...REVIEW_CONTRACT.noise.suffixes,
30
+ ...REVIEW_CONTRACT.noise.extensions,
31
+ ].map((s) => s.toLowerCase());
32
+ const NOISE_BASENAMES = REVIEW_CONTRACT.noise.basenames.map((s) => s.toLowerCase());
26
33
  export function isNoiseDiffPath(path) {
27
- const p = path.toLowerCase();
28
- return (NOISE_SUBSTRINGS.some((s) => p.includes(s)) ||
34
+ // Normalize: forward slashes, no leading "./" — diff paths are repo-relative.
35
+ const p = path.replace(/\\/g, "/").replace(/^\.\//, "").toLowerCase();
36
+ const base = p.slice(p.lastIndexOf("/") + 1);
37
+ return (NOISE_BASENAMES.includes(base) ||
38
+ NOISE_SUBSTRINGS.some((s) => p.includes(s)) ||
29
39
  NOISE_SUFFIXES.some((s) => p.endsWith(s)));
30
40
  }
31
41
  /** Split a unified `gh pr diff` output into per-file sections. */
@@ -91,6 +101,63 @@ export function extractEvidenceLines(comments) {
91
101
  }
92
102
  return lines.slice(0, 12);
93
103
  }
104
+ /** Directory-boundary ownership: "src/app/admin" owns "src/app/admin/…" and
105
+ * the exact path itself, but never "src/app/admin-shop/…". A leading "./" on
106
+ * the prefix is ignored; an empty prefix owns nothing. Keep in lockstep with
107
+ * the server's reviewcontract.OwnsPath — both must pass the canonical
108
+ * contract's ownsTestVectors (contract-parity.test.ts). */
109
+ export function ownsPath(prefix, path) {
110
+ const p = prefix.replace(/^\.\//, "");
111
+ if (!p)
112
+ return false;
113
+ return path === p || path.startsWith(p.endsWith("/") ? p : p + "/");
114
+ }
115
+ /** Names of the features whose path prefixes match any non-noise diff path,
116
+ * in feature-map order, deduped. */
117
+ export function touchedFeatures(diffPaths, features) {
118
+ const changed = diffPaths.filter((p) => !isNoiseDiffPath(p));
119
+ const out = [];
120
+ for (const f of features) {
121
+ if ((f.paths ?? []).some((prefix) => changed.some((path) => ownsPath(prefix, path)))) {
122
+ out.push(f.name || f.key);
123
+ }
124
+ }
125
+ return out;
126
+ }
127
+ /** The deterministic layer under the per-feature evidence rule: a PR that
128
+ * touches more than one feature needs at least one proof per feature. The
129
+ * semantic judgment (which proof covers which feature) stays with the
130
+ * reviewer; this only counts — conservatively, by comment. */
131
+ export function assessEvidenceCoverage(touched, comments) {
132
+ const evidenceItems = comments.filter((c) => {
133
+ const body = c.body ?? "";
134
+ // Anchored: a structured caption line ("- Verified: …") or the 🧪 bundle
135
+ // header at line start. A bare substring match would count prose like
136
+ // "not yet verified:" or quoted captions and silently suppress the warning.
137
+ return /^\s*🧪.*Test evidence/m.test(body) || /^\s*-?\s*\*{0,2}verified:/im.test(body);
138
+ }).length;
139
+ if (touched.length <= 1 || evidenceItems >= touched.length) {
140
+ return { evidenceItems, warning: null };
141
+ }
142
+ return {
143
+ evidenceItems,
144
+ warning: `⚠️ ${touched.length} features touched, ${evidenceItems} evidence item(s) — ` +
145
+ `need ≥1 proof per feature on a multi-feature PR; treat each unproven feature ` +
146
+ `as an unresolved thread (request_changes) unless every touched feature maps ` +
147
+ `to a proof.`,
148
+ };
149
+ }
150
+ /** The "### Deviations from brief" section of a PR body — where the worker
151
+ * logs off-brief pivots (field-guide pattern: deviations must be visible to
152
+ * review, not buried in commit messages). Empty string when absent. */
153
+ export function extractDeviations(prBody) {
154
+ const m = /^###\s*Deviations from brief\s*$/im.exec(prBody);
155
+ if (!m)
156
+ return "";
157
+ const rest = prBody.slice(m.index + m[0].length);
158
+ const end = rest.search(/^#{1,3}\s/m);
159
+ return (end >= 0 ? rest.slice(0, end) : rest).trim();
160
+ }
94
161
  /** Render the full review packet as markdown. */
95
162
  export function buildReviewPacket(input) {
96
163
  const { pr, threads, diff, issue } = input;
@@ -122,6 +189,12 @@ export function buildReviewPacket(input) {
122
189
  b.push("\n## PR description");
123
190
  b.push(prBody.length > PACKET_BRIEF_CAP ? prBody.slice(0, PACKET_BRIEF_CAP) + "\n… (truncated)" : prBody);
124
191
  }
192
+ const deviations = extractDeviations(pr.body ?? "");
193
+ if (deviations) {
194
+ b.push("\n## Deviations from brief");
195
+ b.push(deviations);
196
+ b.push("_Verify each deviation: conservative? justified? does the spec still hold?_");
197
+ }
125
198
  b.push("\n## CI");
126
199
  const checks = pr.statusCheckRollup ?? [];
127
200
  if (checks.length === 0) {
@@ -156,7 +229,41 @@ export function buildReviewPacket(input) {
156
229
  }
157
230
  const evidence = extractEvidenceLines(pr.comments ?? []);
158
231
  b.push("\n## Evidence / health");
232
+ if (input.features?.length) {
233
+ const touched = touchedFeatures(splitUnifiedDiff(diff).map((s) => s.path), input.features);
234
+ if (touched.length) {
235
+ b.push(`Features touched (${touched.length}): ${touched.join(", ")}`);
236
+ const cov = assessEvidenceCoverage(touched, pr.comments ?? []);
237
+ if (cov.warning)
238
+ b.push(cov.warning);
239
+ }
240
+ }
159
241
  b.push(evidence.length ? evidence.join("\n") : "no evidence caption posted");
242
+ // Features (relevant slice) — kills the reviewer's mandatory full-map pull:
243
+ // touched features in detail, same-layer neighbors by name, full map only
244
+ // on demand (issue #83).
245
+ if (input.features?.length) {
246
+ const diffPaths = splitUnifiedDiff(diff).map((s) => s.path);
247
+ const touchedNames = new Set(touchedFeatures(diffPaths, input.features));
248
+ if (touchedNames.size) {
249
+ const touched = input.features.filter((f) => touchedNames.has(f.name || f.key)).slice(0, 12);
250
+ b.push("\n## Features (relevant slice)");
251
+ for (const f of touched) {
252
+ const layer = f.layer ? ` [${f.layer}]` : "";
253
+ const tp = f.testPriority ? ` · test_priority: ${f.testPriority}` : "";
254
+ const desc = f.description ? ` — ${f.description}` : "";
255
+ b.push(`- ${f.name || f.key}${layer}${tp}${desc}`);
256
+ }
257
+ const layers = new Set(touched.map((f) => f.layer).filter(Boolean));
258
+ const neighbors = input.features
259
+ .filter((f) => !touchedNames.has(f.name || f.key) && f.layer && layers.has(f.layer))
260
+ .map((f) => f.name || f.key)
261
+ .slice(0, 15);
262
+ if (neighbors.length)
263
+ b.push(`Same-layer neighbors: ${neighbors.join(", ")}`);
264
+ b.push("_This slice replaces the full map for most reviews — run `renaiss-shipflow features --json` only if you need beyond it._");
265
+ }
266
+ }
160
267
  const filtered = filterDiffForPacket(diff);
161
268
  b.push(`\n## Diff (${filtered.shown} file(s) shown` +
162
269
  (filtered.omittedNoise ? `, ${filtered.omittedNoise} noise file(s) omitted` : "") +
@@ -1 +1 @@
1
- {"version":3,"file":"packet.js","sourceRoot":"","sources":["../src/packet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"packet.js","sourceRoot":"","sources":["../src/packet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ export declare const REVIEW_CONTRACT: {
2
+ readonly $comment: "Canonical review contract (epic #96, Option B): the single source of truth for constants BOTH reviewers share — the Go server's pr_review runner and the TS CLI's loop review packet. Mirrors: apps/renaissshipflow-server/internal/reviewcontract/review-contract.json (go:embed, byte-identical) and apps/renaissshipflow-cli/src/review-contract-data.ts (generated). Regenerate mirrors with `node scripts/sync-review-contract.mjs`; parity tests on both sides fail on drift. Noise lists are the UNION of the two pre-contract lists (never narrow), split into scopes: the lists under `noise` are shared review-filter noise; `noise.featuremapOnly` is feature-map-only (tracked, reviewable source the loop packet must keep showing). Verdict vocabularies are carried per side AS-IS — reconciliation is a later slice. `ownsTestVectors` pins the directory-boundary `owns` matcher, which stays implemented per language.";
3
+ readonly version: 1;
4
+ readonly budgets: {
5
+ readonly $comment: "perFileDiffCap/packetTotalCap bound each reviewer's diff; briefCap bounds the linked-issue spec + PR body (acceptance criteria sit at the BOTTOM of issue bodies — a tight cap silently drops the checklist).";
6
+ readonly perFileDiffCap: 6000;
7
+ readonly packetTotalCap: 60000;
8
+ readonly briefCap: 8000;
9
+ };
10
+ readonly noise: {
11
+ readonly $comment: "Paths excluded from review diffs / the feature map, in two scopes. The lists directly under `noise` are SHARED review-filter noise: excluded from both reviewers' diffs and from the feature map. `featuremapOnly` entries are excluded from the feature map only — and, transitively, from the Go server's review filter, which shares featuremap.IsNoisePath (its pre-contract behavior) — but they are tracked, reviewable source the loop packet MUST keep showing (pre-contract it was the only reviewer that saw them). Matching: substrings contains-match anywhere in the path (TS case-insensitively, Go case-sensitively — each side keeps its pre-contract semantics). suffixes: trailing patterns filepath.Ext can't express. basenames: exact filenames (matched against the path's base name, never as a suffix). extensions: final-dot file extensions.";
12
+ readonly substrings: readonly ["node_modules/", ".git/", "vendor/", "dist/", "build/", ".next/", "__pycache__/", ".mypy_cache/", ".tox/", ".venv/", ".cache/", "coverage/", ".nyc_output/", ".turbo/", "__generated__/", "__snapshots__/", "__mocks__/", "storybook-static/", ".pytest_cache/", ".gradle/", "DerivedData/", "Pods/", "target/", ".rush/", "out/", ".swc/", ".expo/"];
13
+ readonly suffixes: readonly [".pb.go", "_pb2.py", "_pb2_grpc.py", "_gen.go", "_generated.go", ".gen.go", ".generated.ts", ".generated.tsx", ".gen.ts", ".min.js", ".min.css", ".tsbuildinfo"];
14
+ readonly basenames: readonly ["package-lock.json", "bun.lockb"];
15
+ readonly extensions: readonly [".map", ".lock", ".sum", ".png", ".jpg", ".jpeg", ".gif", ".ico", ".svg", ".woff", ".woff2", ".ttf", ".eot", ".snap"];
16
+ readonly featuremapOnly: {
17
+ readonly $comment: ".claude/ is tracked, reviewable source in this repo (63 files incl. plugin-shipped .claude/commands/shipflow-*.md and .claude/skills TS source) — noise for the feature map (and the server reviewer, per its pre-contract IsNoisePath), never for the loop packet.";
18
+ readonly substrings: readonly [".claude/"];
19
+ };
20
+ };
21
+ readonly verdicts: {
22
+ readonly $comment: "Carried AS-IS per side; unifying the vocabulary is a later slice of #96. Do not gate on the server enum — the server review is advisory.";
23
+ readonly loop: readonly ["approve", "comment", "request_changes", "reject"];
24
+ readonly server: readonly ["looks_good", "comment", "request_changes"];
25
+ };
26
+ readonly severities: readonly ["critical", "high", "medium", "low"];
27
+ readonly defaultSeverity: "medium";
28
+ readonly ownsTestVectors: readonly [{
29
+ readonly $comment: "Directory-boundary match: a prefix owns itself and everything under it, never a sibling that merely shares the string.";
30
+ readonly prefix: "src/app/admin";
31
+ readonly path: "src/app/admin";
32
+ readonly owns: true;
33
+ }, {
34
+ readonly prefix: "src/app/admin";
35
+ readonly path: "src/app/admin/page.tsx";
36
+ readonly owns: true;
37
+ }, {
38
+ readonly prefix: "src/app/admin";
39
+ readonly path: "src/app/admin/nested/deep/file.ts";
40
+ readonly owns: true;
41
+ }, {
42
+ readonly prefix: "src/app/admin";
43
+ readonly path: "src/app/admin-shop/page.tsx";
44
+ readonly owns: false;
45
+ }, {
46
+ readonly prefix: "src/app/admin";
47
+ readonly path: "src/app/adminx";
48
+ readonly owns: false;
49
+ }, {
50
+ readonly prefix: "./src/app/admin";
51
+ readonly path: "src/app/admin/page.tsx";
52
+ readonly owns: true;
53
+ }, {
54
+ readonly prefix: "src/app/admin/";
55
+ readonly path: "src/app/admin/page.tsx";
56
+ readonly owns: true;
57
+ }, {
58
+ readonly prefix: "src/app/admin/";
59
+ readonly path: "src/app/admin/";
60
+ readonly owns: true;
61
+ }, {
62
+ readonly prefix: "src/app/admin/";
63
+ readonly path: "src/app/admin";
64
+ readonly owns: false;
65
+ }, {
66
+ readonly prefix: "";
67
+ readonly path: "src/anything.ts";
68
+ readonly owns: false;
69
+ }, {
70
+ readonly prefix: "./";
71
+ readonly path: "src/anything.ts";
72
+ readonly owns: false;
73
+ }, {
74
+ readonly prefix: "apps";
75
+ readonly path: "apps/renaissshipflow-cli/src/index.ts";
76
+ readonly owns: true;
77
+ }, {
78
+ readonly prefix: "src/app/admin";
79
+ readonly path: "src";
80
+ readonly owns: false;
81
+ }, {
82
+ readonly prefix: "app";
83
+ readonly path: "src/app/x.ts";
84
+ readonly owns: false;
85
+ }, {
86
+ readonly prefix: "SRC/App";
87
+ readonly path: "src/app/x.ts";
88
+ readonly owns: false;
89
+ }];
90
+ };
91
+ //# sourceMappingURL=review-contract-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-contract-data.d.ts","sourceRoot":"","sources":["../src/review-contract-data.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyGlB,CAAC"}
@@ -0,0 +1,111 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Mirror of contracts/review-contract.json (the canonical review contract,
3
+ // epic #96). Regenerate with: node scripts/sync-review-contract.mjs
4
+ // The contract-parity test fails if this file drifts from the canonical one.
5
+ export const REVIEW_CONTRACT = {
6
+ "$comment": "Canonical review contract (epic #96, Option B): the single source of truth for constants BOTH reviewers share — the Go server's pr_review runner and the TS CLI's loop review packet. Mirrors: apps/renaissshipflow-server/internal/reviewcontract/review-contract.json (go:embed, byte-identical) and apps/renaissshipflow-cli/src/review-contract-data.ts (generated). Regenerate mirrors with `node scripts/sync-review-contract.mjs`; parity tests on both sides fail on drift. Noise lists are the UNION of the two pre-contract lists (never narrow), split into scopes: the lists under `noise` are shared review-filter noise; `noise.featuremapOnly` is feature-map-only (tracked, reviewable source the loop packet must keep showing). Verdict vocabularies are carried per side AS-IS — reconciliation is a later slice. `ownsTestVectors` pins the directory-boundary `owns` matcher, which stays implemented per language.",
7
+ "version": 1,
8
+ "budgets": {
9
+ "$comment": "perFileDiffCap/packetTotalCap bound each reviewer's diff; briefCap bounds the linked-issue spec + PR body (acceptance criteria sit at the BOTTOM of issue bodies — a tight cap silently drops the checklist).",
10
+ "perFileDiffCap": 6000,
11
+ "packetTotalCap": 60000,
12
+ "briefCap": 8000
13
+ },
14
+ "noise": {
15
+ "$comment": "Paths excluded from review diffs / the feature map, in two scopes. The lists directly under `noise` are SHARED review-filter noise: excluded from both reviewers' diffs and from the feature map. `featuremapOnly` entries are excluded from the feature map only — and, transitively, from the Go server's review filter, which shares featuremap.IsNoisePath (its pre-contract behavior) — but they are tracked, reviewable source the loop packet MUST keep showing (pre-contract it was the only reviewer that saw them). Matching: substrings contains-match anywhere in the path (TS case-insensitively, Go case-sensitively — each side keeps its pre-contract semantics). suffixes: trailing patterns filepath.Ext can't express. basenames: exact filenames (matched against the path's base name, never as a suffix). extensions: final-dot file extensions.",
16
+ "substrings": [
17
+ "node_modules/",
18
+ ".git/",
19
+ "vendor/",
20
+ "dist/",
21
+ "build/",
22
+ ".next/",
23
+ "__pycache__/",
24
+ ".mypy_cache/",
25
+ ".tox/",
26
+ ".venv/",
27
+ ".cache/",
28
+ "coverage/",
29
+ ".nyc_output/",
30
+ ".turbo/",
31
+ "__generated__/",
32
+ "__snapshots__/",
33
+ "__mocks__/",
34
+ "storybook-static/",
35
+ ".pytest_cache/",
36
+ ".gradle/",
37
+ "DerivedData/",
38
+ "Pods/",
39
+ "target/",
40
+ ".rush/",
41
+ "out/",
42
+ ".swc/",
43
+ ".expo/"
44
+ ],
45
+ "suffixes": [
46
+ ".pb.go",
47
+ "_pb2.py",
48
+ "_pb2_grpc.py",
49
+ "_gen.go",
50
+ "_generated.go",
51
+ ".gen.go",
52
+ ".generated.ts",
53
+ ".generated.tsx",
54
+ ".gen.ts",
55
+ ".min.js",
56
+ ".min.css",
57
+ ".tsbuildinfo"
58
+ ],
59
+ "basenames": [
60
+ "package-lock.json",
61
+ "bun.lockb"
62
+ ],
63
+ "extensions": [
64
+ ".map",
65
+ ".lock",
66
+ ".sum",
67
+ ".png",
68
+ ".jpg",
69
+ ".jpeg",
70
+ ".gif",
71
+ ".ico",
72
+ ".svg",
73
+ ".woff",
74
+ ".woff2",
75
+ ".ttf",
76
+ ".eot",
77
+ ".snap"
78
+ ],
79
+ "featuremapOnly": {
80
+ "$comment": ".claude/ is tracked, reviewable source in this repo (63 files incl. plugin-shipped .claude/commands/shipflow-*.md and .claude/skills TS source) — noise for the feature map (and the server reviewer, per its pre-contract IsNoisePath), never for the loop packet.",
81
+ "substrings": [
82
+ ".claude/"
83
+ ]
84
+ }
85
+ },
86
+ "verdicts": {
87
+ "$comment": "Carried AS-IS per side; unifying the vocabulary is a later slice of #96. Do not gate on the server enum — the server review is advisory.",
88
+ "loop": ["approve", "comment", "request_changes", "reject"],
89
+ "server": ["looks_good", "comment", "request_changes"]
90
+ },
91
+ "severities": ["critical", "high", "medium", "low"],
92
+ "defaultSeverity": "medium",
93
+ "ownsTestVectors": [
94
+ { "$comment": "Directory-boundary match: a prefix owns itself and everything under it, never a sibling that merely shares the string.", "prefix": "src/app/admin", "path": "src/app/admin", "owns": true },
95
+ { "prefix": "src/app/admin", "path": "src/app/admin/page.tsx", "owns": true },
96
+ { "prefix": "src/app/admin", "path": "src/app/admin/nested/deep/file.ts", "owns": true },
97
+ { "prefix": "src/app/admin", "path": "src/app/admin-shop/page.tsx", "owns": false },
98
+ { "prefix": "src/app/admin", "path": "src/app/adminx", "owns": false },
99
+ { "prefix": "./src/app/admin", "path": "src/app/admin/page.tsx", "owns": true },
100
+ { "prefix": "src/app/admin/", "path": "src/app/admin/page.tsx", "owns": true },
101
+ { "prefix": "src/app/admin/", "path": "src/app/admin/", "owns": true },
102
+ { "prefix": "src/app/admin/", "path": "src/app/admin", "owns": false },
103
+ { "prefix": "", "path": "src/anything.ts", "owns": false },
104
+ { "prefix": "./", "path": "src/anything.ts", "owns": false },
105
+ { "prefix": "apps", "path": "apps/renaissshipflow-cli/src/index.ts", "owns": true },
106
+ { "prefix": "src/app/admin", "path": "src", "owns": false },
107
+ { "prefix": "app", "path": "src/app/x.ts", "owns": false },
108
+ { "prefix": "SRC/App", "path": "src/app/x.ts", "owns": false }
109
+ ]
110
+ };
111
+ //# sourceMappingURL=review-contract-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-contract-data.js","sourceRoot":"","sources":["../src/review-contract-data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /** The loop reviewer's verdict vocabulary — from the canonical contract
2
+ * (contracts/review-contract.json): `approve`/`comment`/`request_changes`/
3
+ * `reject`. The server's advisory vocabulary lives beside it in the contract;
4
+ * reconciling the two is a later slice of epic #96. */
5
+ export declare const LOOP_VERDICTS: readonly ["approve", "comment", "request_changes", "reject"];
6
+ export type Verdict = (typeof LOOP_VERDICTS)[number];
7
+ /** Severity scale (highest first) + the default applied to blank severities —
8
+ * from the canonical contract, matching the server's normalisation. */
9
+ export declare const SEVERITIES: readonly ["critical", "high", "medium", "low"];
10
+ export declare const DEFAULT_SEVERITY: "medium";
11
+ /** Severity badge — byte-identical to the server's severityBadge(). */
12
+ export declare function severityBadge(severity: string): string;
13
+ /** CodeRabbit-style fix-size tag after the badge — mirrors the server. */
14
+ export declare function effortTag(effort?: string): string;
15
+ /** Verdict header, shared by the inline review body and any fallback comment. */
16
+ export declare function verdictHeader(verdict: Verdict): string;
17
+ export interface ReviewFinding {
18
+ path: string;
19
+ line: number;
20
+ severity: string;
21
+ issue: string;
22
+ why?: string;
23
+ fix?: string;
24
+ effort?: string;
25
+ suggestion?: string;
26
+ code?: string;
27
+ }
28
+ /** One finding's comment body — mirrors renderInlineFinding(): badge + effort +
29
+ * issue, why, fix, and a committable ```suggestion block when present. */
30
+ export declare function renderFindingBody(f: ReviewFinding): string;
31
+ /** Repo-relative path in one canonical shape: forward slashes, no leading
32
+ * "./". Applied to both diff keys and finding paths so `./src/x` / `src\\x`
33
+ * still anchor. NOT a filesystem realpath — diff paths aren't fs paths. */
34
+ export declare function normPath(p: string): string;
35
+ /** Map of path → set of new-file line numbers that GitHub will accept a
36
+ * RIGHT-side inline comment on (context + added lines). Mirrors the server's
37
+ * annotatePatch line numbering so a bad anchor can't 422 the whole review. */
38
+ export declare function diffAnchors(diff: string): Map<string, Set<number>>;
39
+ /** Partition findings into ones that anchor to a real diff line (postable
40
+ * inline) and ones that must fold into the summary body (bad line / file). */
41
+ export declare function splitAnchorable(findings: ReviewFinding[], anchors: Map<string, Set<number>>): {
42
+ inline: ReviewFinding[];
43
+ body: ReviewFinding[];
44
+ };
45
+ export interface ReviewComment {
46
+ path: string;
47
+ line: number;
48
+ side: "RIGHT";
49
+ body: string;
50
+ }
51
+ export interface ReviewPayload {
52
+ event: "COMMENT";
53
+ body: string;
54
+ comments: ReviewComment[];
55
+ }
56
+ /** Build the GitHub "create review" payload: a COMMENT-event review (ShipFlow
57
+ * reviews are advisory — approval authority stays with the label gate, so the
58
+ * event is never APPROVE/REQUEST_CHANGES; the verdict lives in the header),
59
+ * with on-diff findings as inline comments and the rest folded into the body. */
60
+ export declare function buildReviewPayload(opts: {
61
+ summary: string;
62
+ verdict: Verdict;
63
+ findings: ReviewFinding[];
64
+ anchors: Map<string, Set<number>>;
65
+ }): ReviewPayload;
66
+ //# sourceMappingURL=review-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-contract.d.ts","sourceRoot":"","sources":["../src/review-contract.ts"],"names":[],"mappings":"AAOA;;;wDAGwD;AACxD,eAAO,MAAM,aAAa,8DAAgC,CAAC;AAC3D,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD;wEACwE;AACxE,eAAO,MAAM,UAAU,gDAA6B,CAAC;AACrD,eAAO,MAAM,gBAAgB,UAAkC,CAAC;AAEhE,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOtD;AAED,0EAA0E;AAC1E,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAOtD;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAID;2EAC2E;AAC3E,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAS1D;AAED;;4EAE4E;AAC5E,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1C;AAKD;;+EAE+E;AAC/E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAkBlE;AAED;+EAC+E;AAC/E,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,aAAa,EAAE,EACzB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAChC;IAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAAC,IAAI,EAAE,aAAa,EAAE,CAAA;CAAE,CAQpD;AAED,MAAM,WAAW,aAAa;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;CAAE;AAC3F,MAAM,WAAW,aAAa;IAAG,KAAK,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAC;CAAE;AAE7F;;;kFAGkF;AAClF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;CACnC,GAAG,aAAa,CAqBhB"}