@pome-sh/cli 0.15.0 → 0.17.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 (110) hide show
  1. package/dist/build-info.json +3 -3
  2. package/dist/src/cli/checks-add.d.ts +2 -7
  3. package/dist/src/cli/checks-add.js +10 -24
  4. package/dist/src/cli/checks.d.ts +3 -2
  5. package/dist/src/cli/checks.js +22 -9
  6. package/dist/src/cli/vocabulary-skew.d.ts +64 -0
  7. package/dist/src/cli/vocabulary-skew.js +187 -0
  8. package/dist/src/twin/githubCloneAdapter.d.ts +1 -0
  9. package/node_modules/@pome-sh/twin-github/FIDELITY.md +14 -0
  10. package/node_modules/@pome-sh/twin-github/dist/src/check-pulls.d.ts +4 -0
  11. package/node_modules/@pome-sh/twin-github/dist/src/check-pulls.js +93 -0
  12. package/node_modules/@pome-sh/twin-github/dist/src/check-pulls.js.map +1 -1
  13. package/node_modules/@pome-sh/twin-github/dist/src/check-state.d.ts +1 -0
  14. package/node_modules/@pome-sh/twin-github/dist/src/check-state.js.map +1 -1
  15. package/node_modules/@pome-sh/twin-github/dist/src/checks.d.ts +3 -0
  16. package/node_modules/@pome-sh/twin-github/dist/src/checks.js +2 -1
  17. package/node_modules/@pome-sh/twin-github/dist/src/checks.js.map +1 -1
  18. package/node_modules/@pome-sh/twin-github/dist/src/db.js +46 -4
  19. package/node_modules/@pome-sh/twin-github/dist/src/db.js.map +1 -1
  20. package/node_modules/@pome-sh/twin-github/dist/src/domain/github-domain.d.ts +3 -0
  21. package/node_modules/@pome-sh/twin-github/dist/src/domain/github-domain.js +49 -1
  22. package/node_modules/@pome-sh/twin-github/dist/src/domain/github-domain.js.map +1 -1
  23. package/node_modules/@pome-sh/twin-github/dist/src/domain/issues.js +15 -5
  24. package/node_modules/@pome-sh/twin-github/dist/src/domain/issues.js.map +1 -1
  25. package/node_modules/@pome-sh/twin-github/dist/src/serializers.d.ts +1 -1
  26. package/node_modules/@pome-sh/twin-github/dist/src/serializers.js +8 -2
  27. package/node_modules/@pome-sh/twin-github/dist/src/serializers.js.map +1 -1
  28. package/node_modules/@pome-sh/twin-github/package.json +1 -1
  29. package/node_modules/@pome-sh/twin-linear/CHANGELOG.md +142 -0
  30. package/node_modules/@pome-sh/twin-linear/dist/src/check-comments.d.ts +10 -0
  31. package/node_modules/@pome-sh/twin-linear/dist/src/check-comments.js +117 -0
  32. package/node_modules/@pome-sh/twin-linear/dist/src/check-comments.js.map +1 -0
  33. package/node_modules/@pome-sh/twin-linear/dist/src/check-issues.d.ts +25 -0
  34. package/node_modules/@pome-sh/twin-linear/dist/src/check-issues.js +211 -0
  35. package/node_modules/@pome-sh/twin-linear/dist/src/check-issues.js.map +1 -0
  36. package/node_modules/@pome-sh/twin-linear/dist/src/check-kind.d.ts +3 -0
  37. package/node_modules/@pome-sh/twin-linear/dist/src/check-kind.js +9 -0
  38. package/node_modules/@pome-sh/twin-linear/dist/src/check-kind.js.map +1 -0
  39. package/node_modules/@pome-sh/twin-linear/dist/src/check-params.d.ts +8 -0
  40. package/node_modules/@pome-sh/twin-linear/dist/src/check-params.js +94 -0
  41. package/node_modules/@pome-sh/twin-linear/dist/src/check-params.js.map +1 -0
  42. package/node_modules/@pome-sh/twin-linear/dist/src/check-state.d.ts +98 -0
  43. package/node_modules/@pome-sh/twin-linear/dist/src/check-state.js +131 -0
  44. package/node_modules/@pome-sh/twin-linear/dist/src/check-state.js.map +1 -0
  45. package/node_modules/@pome-sh/twin-linear/dist/src/check-tape.d.ts +2 -0
  46. package/node_modules/@pome-sh/twin-linear/dist/src/check-tape.js +100 -0
  47. package/node_modules/@pome-sh/twin-linear/dist/src/check-tape.js.map +1 -0
  48. package/node_modules/@pome-sh/twin-linear/dist/src/check-worlds.d.ts +44 -0
  49. package/node_modules/@pome-sh/twin-linear/dist/src/check-worlds.js +93 -0
  50. package/node_modules/@pome-sh/twin-linear/dist/src/check-worlds.js.map +1 -0
  51. package/node_modules/@pome-sh/twin-linear/dist/src/checks.d.ts +29 -0
  52. package/node_modules/@pome-sh/twin-linear/dist/src/checks.js +52 -0
  53. package/node_modules/@pome-sh/twin-linear/dist/src/checks.js.map +1 -0
  54. package/node_modules/@pome-sh/twin-linear/dist/src/db.d.ts +6 -0
  55. package/node_modules/@pome-sh/twin-linear/dist/src/db.js +53 -4
  56. package/node_modules/@pome-sh/twin-linear/dist/src/db.js.map +1 -1
  57. package/node_modules/@pome-sh/twin-linear/dist/src/domain/agents.d.ts +16 -13
  58. package/node_modules/@pome-sh/twin-linear/dist/src/domain/agents.js +16 -12
  59. package/node_modules/@pome-sh/twin-linear/dist/src/domain/agents.js.map +1 -1
  60. package/node_modules/@pome-sh/twin-linear/dist/src/domain/comments.js +1 -1
  61. package/node_modules/@pome-sh/twin-linear/dist/src/domain/comments.js.map +1 -1
  62. package/node_modules/@pome-sh/twin-linear/dist/src/domain/documents.js +8 -8
  63. package/node_modules/@pome-sh/twin-linear/dist/src/domain/documents.js.map +1 -1
  64. package/node_modules/@pome-sh/twin-linear/dist/src/domain/issues.js +20 -17
  65. package/node_modules/@pome-sh/twin-linear/dist/src/domain/issues.js.map +1 -1
  66. package/node_modules/@pome-sh/twin-linear/dist/src/domain/labels.js +1 -1
  67. package/node_modules/@pome-sh/twin-linear/dist/src/domain/labels.js.map +1 -1
  68. package/node_modules/@pome-sh/twin-linear/dist/src/domain/linear-domain.d.ts +4 -17
  69. package/node_modules/@pome-sh/twin-linear/dist/src/domain/linear-domain.js.map +1 -1
  70. package/node_modules/@pome-sh/twin-linear/dist/src/domain/normalize.d.ts +12 -2
  71. package/node_modules/@pome-sh/twin-linear/dist/src/domain/normalize.js +28 -5
  72. package/node_modules/@pome-sh/twin-linear/dist/src/domain/normalize.js.map +1 -1
  73. package/node_modules/@pome-sh/twin-linear/dist/src/domain/projects-cycles.js +1 -1
  74. package/node_modules/@pome-sh/twin-linear/dist/src/domain/projects-cycles.js.map +1 -1
  75. package/node_modules/@pome-sh/twin-linear/dist/src/domain/rows.d.ts +3 -3
  76. package/node_modules/@pome-sh/twin-linear/dist/src/domain/rows.js +4 -3
  77. package/node_modules/@pome-sh/twin-linear/dist/src/domain/rows.js.map +1 -1
  78. package/node_modules/@pome-sh/twin-linear/dist/src/graphql/formatters.js +3 -3
  79. package/node_modules/@pome-sh/twin-linear/dist/src/graphql/formatters.js.map +1 -1
  80. package/node_modules/@pome-sh/twin-linear/dist/src/graphql/mutation-inputs.d.ts +30 -12
  81. package/node_modules/@pome-sh/twin-linear/dist/src/graphql/mutation-inputs.js +33 -28
  82. package/node_modules/@pome-sh/twin-linear/dist/src/graphql/mutation-inputs.js.map +1 -1
  83. package/node_modules/@pome-sh/twin-linear/dist/src/graphql/resolvers.js +2 -2
  84. package/node_modules/@pome-sh/twin-linear/dist/src/graphql/resolvers.js.map +1 -1
  85. package/node_modules/@pome-sh/twin-linear/dist/src/graphql/schema.js +31 -13
  86. package/node_modules/@pome-sh/twin-linear/dist/src/graphql/schema.js.map +1 -1
  87. package/node_modules/@pome-sh/twin-linear/dist/src/index.d.ts +2 -0
  88. package/node_modules/@pome-sh/twin-linear/dist/src/index.js +7 -0
  89. package/node_modules/@pome-sh/twin-linear/dist/src/index.js.map +1 -1
  90. package/node_modules/@pome-sh/twin-linear/dist/src/state.js +4 -4
  91. package/node_modules/@pome-sh/twin-linear/dist/src/state.js.map +1 -1
  92. package/node_modules/@pome-sh/twin-linear/dist/src/types.d.ts +10 -4
  93. package/node_modules/@pome-sh/twin-linear/dist/src/types.js.map +1 -1
  94. package/node_modules/@pome-sh/twin-linear/fixtures/README.md +1 -0
  95. package/node_modules/@pome-sh/twin-linear/fixtures/linear-introspection.json +66 -0
  96. package/node_modules/@pome-sh/twin-linear/package.json +2 -1
  97. package/node_modules/@pome-sh/twin-stripe/FIDELITY.md +8 -0
  98. package/node_modules/@pome-sh/twin-stripe/dist/src/idempotency.d.ts +23 -1
  99. package/node_modules/@pome-sh/twin-stripe/dist/src/idempotency.js +40 -6
  100. package/node_modules/@pome-sh/twin-stripe/dist/src/idempotency.js.map +1 -1
  101. package/node_modules/@pome-sh/twin-stripe/dist/src/routes/_helpers.js +5 -0
  102. package/node_modules/@pome-sh/twin-stripe/dist/src/routes/_helpers.js.map +1 -1
  103. package/node_modules/@pome-sh/twin-stripe/dist/src/twin.js +7 -1
  104. package/node_modules/@pome-sh/twin-stripe/dist/src/twin.js.map +1 -1
  105. package/node_modules/@pome-sh/twin-stripe/package.json +1 -1
  106. package/package.json +4 -4
  107. package/tasks/14-stripe-refund-retry.md +17 -14
  108. package/tasks/24-linear-issue-triage.md +2 -2
  109. package/tasks/25-linear-comment-label-triage.md +3 -3
  110. package/tasks/26-github-linear-handoff.md +3 -4
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "package": "pome-sh",
3
- "version": "0.15.0",
4
- "git_sha": "23c22073ad82383b52885ab186b2a0c2dbd4609a",
5
- "build_time": "2026-07-30T22:45:25.611Z"
3
+ "version": "0.17.0",
4
+ "git_sha": "46758262874f65435e8bfcff58f3881be4f731ca",
5
+ "build_time": "2026-08-03T08:56:27.021Z"
6
6
  }
@@ -1,12 +1,7 @@
1
1
  import { type InteractiveSeams } from "./agent-resolver.js";
2
- export interface RemoteChecks {
2
+ import { type RemoteVocabulary } from "./vocabulary-skew.js";
3
+ export interface RemoteChecks extends RemoteVocabulary {
3
4
  twin: string;
4
- digest: string;
5
- checks: Array<{
6
- id: string;
7
- template: string;
8
- substrate: string;
9
- }>;
10
5
  }
11
6
  export type HandshakeResult = {
12
7
  kind: "match";
@@ -8,7 +8,9 @@
8
8
  * the cloud resolves them from a different one. Before writing, ask the cloud
9
9
  * for the vocabulary it GRADES against and compare digests.
10
10
  * equal → write, silently
11
- * different → REFUSE, and name which check moved
11
+ * different → REFUSE, and name what moved (`vocabulary-skew.ts`, F-1137 —
12
+ * a check, a field of one, or the sdk that compiled it, but
13
+ * never an empty list)
12
14
  * unreachable → write from the local pin with a named note on stderr
13
15
  * Offline authoring is real, and the degraded path's worst case is bounded: a
14
16
  * stale sentence that keeps a template's literal segments fails at finalize as
@@ -22,6 +24,7 @@ import { resolveSeams } from "./agent-resolver.js";
22
24
  import { SUBSTRATE_HELP, checksFor, displaySentence, findCheck, localDigest, pinnedVersion, twinOf, } from "./checks.js";
23
25
  import { resolveCredentials } from "./credentials.js";
24
26
  import { auditCodeCriteria, formatBindingReport } from "./criterion-binding.js";
27
+ import { explainSkew, formatSkewRefusal } from "./vocabulary-skew.js";
25
28
  export function parseArgFlags(pairs) {
26
29
  const args = {};
27
30
  for (const pair of pairs) {
@@ -47,29 +50,12 @@ export async function handshake(twin, fetchRemote) {
47
50
  }
48
51
  if (localDigest(twin) === remote.digest)
49
52
  return { kind: "match" };
50
- const here = new Map(checksFor(twin).map((check) => [check.id, check.template]));
51
- const there = new Map(remote.checks.map((check) => [check.id, check.template]));
52
- const moved = [];
53
- for (const [id, template] of here) {
54
- if (!there.has(id))
55
- moved.push(`${id} this CLI has it, the cloud does not`);
56
- else if (there.get(id) !== template) {
57
- moved.push(`${id} — the sentence differs\n here: ${template}\n cloud: ${there.get(id)}`);
58
- }
59
- }
60
- for (const id of there.keys()) {
61
- if (!here.has(id))
62
- moved.push(`${id} — the cloud has it, this CLI does not`);
63
- }
64
- return {
65
- kind: "skew",
66
- message: `Refusing to write: this CLI and the cloud disagree about ${twin}'s vocabulary, so a ` +
67
- `sentence written here might not be graded there.\n` +
68
- moved.map((line) => ` - ${line}`).join("\n") +
69
- `\n\n local @pome-sh/twin-${twin} ${pin}` +
70
- `\n Update with \`npm i -g @pome-sh/cli@latest\`. If this CLI is already current, the ` +
71
- `cloud is behind — that is a deploy, not something you can fix here.`,
72
- };
53
+ // F-1137 the taxonomy lives in `vocabulary-skew.ts` and is NON-EMPTY by
54
+ // construction, so this refusal cannot name the disagreement and then list
55
+ // nothing. Which is what it did whenever the skew was in `substrate` or in the
56
+ // compiled pattern: the two fields `checksDigest` hashes that the old
57
+ // id-and-template diff never looked at.
58
+ return { kind: "skew", message: formatSkewRefusal(twin, explainSkew(twin, remote)) };
73
59
  }
74
60
  async function liveFetch(creds, twin) {
75
61
  const res = await fetch(`${creds.apiBaseUrl}/v1/checks?twin=${encodeURIComponent(twin)}`, {
@@ -11,8 +11,9 @@ export declare function twinsWithChecks(): string[];
11
11
  * assert the behaviour, which is the same defect F-1075 hit with a hard-coded
12
12
  * picker index.
13
13
  *
14
- * A3 empties this list. When it does, the tests reading it should fail loudly
15
- * rather than silently stop covering anything.
14
+ * A3 empties this list, and F-1129 answered the question that raised: the PATH
15
+ * stays, the LITERAL goes. It is now `MOUNTED_TWINS` minus the registry, so an
16
+ * empty result is a fact about the world rather than a list nobody updated.
16
17
  */
17
18
  export declare function twinsWithoutChecks(): string[];
18
19
  export declare function checksFor(twin: string): readonly DeclaredCheck[];
@@ -11,8 +11,10 @@
11
11
  import { readFileSync } from "node:fs";
12
12
  import { join } from "node:path";
13
13
  import { checksDigest, templateSlots } from "@pome-sh/sdk/checks";
14
+ import { MOUNTED_TWINS } from "@pome-sh/shared-types";
14
15
  import { GITHUB_CHECKS } from "@pome-sh/twin-github/checks";
15
16
  import { GMAIL_CHECKS } from "@pome-sh/twin-gmail/checks";
17
+ import { LINEAR_CHECKS } from "@pome-sh/twin-linear/checks";
16
18
  import { SLACK_CHECKS } from "@pome-sh/twin-slack/checks";
17
19
  import { STRIPE_CHECKS } from "@pome-sh/twin-stripe/checks";
18
20
  import { resolvePackageRoot } from "./resolve-package-root.js";
@@ -21,15 +23,25 @@ const REGISTRIES = {
21
23
  slack: SLACK_CHECKS,
22
24
  stripe: STRIPE_CHECKS,
23
25
  gmail: GMAIL_CHECKS,
26
+ linear: LINEAR_CHECKS,
24
27
  };
25
- // Twins that EXIST but declare nothing yet. Listed separately so `pome checks
26
- // linear` answers "not migrated yet" instead of "no such twin" — a typo and an
27
- // empty vocabulary are different facts. F-1126 removed slack; F-1127 removed
28
- // stripe; F-1128 removed gmail, which is the first twin whose migration needed
29
- // a seed loader in pome-cloud before its vocabulary could grade anything.
28
+ // Twins that EXIST but declare nothing yet DERIVED, not listed.
30
29
  //
31
- // One entry left. F-1129 takes linear and empties the list.
32
- const TWINS_WITHOUT_CHECKS = ["linear"];
30
+ // The distinction is still real: `pome checks <twin>` must answer "not migrated
31
+ // yet" for a twin that exists, and "no such twin" for a typo. What is no longer
32
+ // real is the hand-maintained literal. F-1126 removed slack from it, F-1127
33
+ // stripe, F-1128 gmail, and F-1129 would have emptied it — four tickets each
34
+ // editing one line of a list that `MOUNTED_TWINS` already knows.
35
+ //
36
+ // So it is a set difference instead. Today it is EMPTY, which is A3's whole
37
+ // acceptance criterion. The day a sixth twin mounts, it repopulates itself and
38
+ // the "not migrated yet" path comes back live without anyone remembering to add
39
+ // a literal — which is the failure this project is named for, one level down.
40
+ // Annotated `string[]` on purpose: `MOUNTED_TWINS` is a literal-union tuple, so
41
+ // the filtered result keeps that union and `isKnownTwin` cannot ask it about an
42
+ // arbitrary string. Widening here is what keeps the caller's question — "is this
43
+ // user-typed word a twin?" — expressible.
44
+ const TWINS_WITHOUT_CHECKS = MOUNTED_TWINS.filter((twin) => !(twin in REGISTRIES));
33
45
  export function twinsWithChecks() {
34
46
  return Object.keys(REGISTRIES).sort();
35
47
  }
@@ -43,8 +55,9 @@ export function twinsWithChecks() {
43
55
  * assert the behaviour, which is the same defect F-1075 hit with a hard-coded
44
56
  * picker index.
45
57
  *
46
- * A3 empties this list. When it does, the tests reading it should fail loudly
47
- * rather than silently stop covering anything.
58
+ * A3 empties this list, and F-1129 answered the question that raised: the PATH
59
+ * stays, the LITERAL goes. It is now `MOUNTED_TWINS` minus the registry, so an
60
+ * empty result is a fact about the world rather than a list nobody updated.
48
61
  */
49
62
  export function twinsWithoutChecks() {
50
63
  return [...TWINS_WITHOUT_CHECKS];
@@ -0,0 +1,64 @@
1
+ /** One check as `GET /v1/checks` publishes it. */
2
+ export interface RemoteCheck {
3
+ id: string;
4
+ template: string;
5
+ substrate: string;
6
+ /** The compiled regex source. Optional because a control plane that does not
7
+ * publish it must degrade to a named class, never to a crash or to silence. */
8
+ pattern?: string;
9
+ /** Ordered as the template names them — the compiled pattern wraps one group
10
+ * per slot in that order, so the ORDER is part of what the digest sees. */
11
+ params?: Array<{
12
+ name: string;
13
+ pattern: string;
14
+ }>;
15
+ }
16
+ export interface RemoteVocabulary {
17
+ digest: string;
18
+ checks: RemoteCheck[];
19
+ }
20
+ export type SkewFinding = {
21
+ kind: "only_here";
22
+ check: string;
23
+ } | {
24
+ kind: "only_there";
25
+ check: string;
26
+ } | {
27
+ kind: "template";
28
+ check: string;
29
+ here: string;
30
+ there: string;
31
+ } | {
32
+ kind: "substrate";
33
+ check: string;
34
+ here: string;
35
+ there: string;
36
+ } | {
37
+ kind: "params";
38
+ check: string;
39
+ here: string;
40
+ there: string;
41
+ } | {
42
+ kind: "pattern";
43
+ check: string;
44
+ here: string;
45
+ there: string;
46
+ paramsCompared: boolean;
47
+ } | {
48
+ kind: "pattern_generation";
49
+ check: null;
50
+ here: string;
51
+ there: string;
52
+ };
53
+ /**
54
+ * Every way this CLI's vocabulary for `twin` differs from the one the cloud
55
+ * published, as at least one named finding.
56
+ *
57
+ * Ordered by check id, so the readout is a property of the difference rather
58
+ * than of either side's declaration order.
59
+ */
60
+ export declare function explainSkew(twin: string, remote: RemoteVocabulary): [SkewFinding, ...SkewFinding[]];
61
+ /** The refusal an author reads. Names the twin pin always, and the sdk pin only
62
+ * when the sdk is what the findings implicate — a pin nobody needs is noise in a
63
+ * message someone is reading because they are already blocked. */
64
+ export declare function formatSkewRefusal(twin: string, findings: readonly SkewFinding[]): string;
@@ -0,0 +1,187 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ /**
3
+ * F-1137 — WHY do this CLI and the cloud disagree about a twin's vocabulary?
4
+ *
5
+ * `checksDigest` hashes three fields per check: `id`, `substrate`, and the
6
+ * COMPILED pattern (`packages/sdk/src/checks.ts`). The refusal in `checks-add.ts`
7
+ * used to build its "which check moved" list from `id` and `template` — so a skew
8
+ * that moved only `substrate`, or only `buildPattern`'s output while every
9
+ * template was byte-identical, refused correctly and then named NOTHING. A named
10
+ * refusal that names nothing, in exactly the two cases the digest was widened to
11
+ * catch, during a situation that already blocks the author.
12
+ *
13
+ * The fix is a taxonomy with no silent branch: `explainSkew` returns a NON-EMPTY
14
+ * list by construction, and the type says so. The class names are pome-cloud's
15
+ * (`apps/control-plane/src/services/vocabulary-parity.ts`, F-1136) so the two
16
+ * surfaces that explain the same disagreement stay greppable against each other.
17
+ *
18
+ * This side can say more than the cloud-side monitor can. `GET /v1/checks`
19
+ * publishes the compiled `pattern` and the parameter patterns (F-1074 Phase 3),
20
+ * which the CLI's own `checks --json` does not — so a generator-only skew is
21
+ * localisable to a check HERE, and only falls back to the unlocalised
22
+ * `pattern_generation` class when the control plane published nothing to diff.
23
+ *
24
+ * `description` and `params[].example` are compared by nothing here on purpose:
25
+ * `checksDigest` does not hash them, so a difference in either cannot be what
26
+ * moved the digest, and comparing them could only manufacture false findings.
27
+ */
28
+ import { checkPattern, templateSlots } from "@pome-sh/sdk/checks";
29
+ import { checksFor, localDigest, pinnedVersion } from "./checks.js";
30
+ function paramsHere(def) {
31
+ return templateSlots(def.template)
32
+ .params.map((name) => `${name}=${def.params[name].pattern}`)
33
+ .join(", ");
34
+ }
35
+ function paramsThere(check) {
36
+ return (check.params ?? []).map((p) => `${p.name}=${p.pattern}`).join(", ");
37
+ }
38
+ /** The fields BOTH sides always publish. Returns empty when the declarations
39
+ * agree — which is the precondition for reading anything into the compiled
40
+ * pattern, since a moved template moves the pattern too and reporting both
41
+ * would bury the cause under its own consequence. */
42
+ function declarationSkew(def, check) {
43
+ const findings = [];
44
+ if (def.template !== check.template) {
45
+ findings.push({ kind: "template", check: def.id, here: def.template, there: check.template });
46
+ }
47
+ if (def.substrate !== check.substrate) {
48
+ findings.push({
49
+ kind: "substrate",
50
+ check: def.id,
51
+ here: def.substrate,
52
+ there: check.substrate,
53
+ });
54
+ }
55
+ if (check.params !== undefined && paramsHere(def) !== paramsThere(check)) {
56
+ findings.push({
57
+ kind: "params",
58
+ check: def.id,
59
+ here: paramsHere(def),
60
+ there: paramsThere(check),
61
+ });
62
+ }
63
+ return findings;
64
+ }
65
+ /**
66
+ * Every way this CLI's vocabulary for `twin` differs from the one the cloud
67
+ * published, as at least one named finding.
68
+ *
69
+ * Ordered by check id, so the readout is a property of the difference rather
70
+ * than of either side's declaration order.
71
+ */
72
+ export function explainSkew(twin, remote) {
73
+ const here = new Map(checksFor(twin).map((def) => [def.id, def]));
74
+ const there = new Map(remote.checks.map((check) => [check.id, check]));
75
+ const findings = [];
76
+ for (const id of [...new Set([...here.keys(), ...there.keys()])].sort()) {
77
+ const def = here.get(id);
78
+ const check = there.get(id);
79
+ if (!check) {
80
+ findings.push({ kind: "only_here", check: id });
81
+ continue;
82
+ }
83
+ if (!def) {
84
+ findings.push({ kind: "only_there", check: id });
85
+ continue;
86
+ }
87
+ const declaration = declarationSkew(def, check);
88
+ if (declaration.length > 0) {
89
+ findings.push(...declaration);
90
+ continue;
91
+ }
92
+ const compiled = checkPattern(def).source;
93
+ if (check.pattern !== undefined && check.pattern !== compiled) {
94
+ findings.push({
95
+ kind: "pattern",
96
+ check: id,
97
+ here: compiled,
98
+ there: check.pattern,
99
+ paramsCompared: check.params !== undefined,
100
+ });
101
+ }
102
+ }
103
+ const [first, ...rest] = findings;
104
+ if (!first) {
105
+ return [
106
+ {
107
+ kind: "pattern_generation",
108
+ check: null,
109
+ here: localDigest(twin),
110
+ there: remote.digest,
111
+ },
112
+ ];
113
+ }
114
+ return [first, ...rest];
115
+ }
116
+ function pair(here, there) {
117
+ return [` here: ${here}`, ` cloud: ${there}`];
118
+ }
119
+ // One bullet per class, and the compiler holds the line: the annotated return
120
+ // type plus an exhaustive switch means a class added without a bullet is
121
+ // `error TS2366`, not a line that renders `undefined`. Do NOT add a `default:` —
122
+ // it would buy back the silence this module exists to remove.
123
+ function bullet(finding) {
124
+ switch (finding.kind) {
125
+ case "only_here":
126
+ return [` - ${finding.check} — this CLI has it, the cloud does not`];
127
+ case "only_there":
128
+ return [` - ${finding.check} — the cloud has it, this CLI does not`];
129
+ case "template":
130
+ return [
131
+ ` - ${finding.check} — the sentence differs`,
132
+ ...pair(finding.here, finding.there),
133
+ ];
134
+ case "substrate":
135
+ return [
136
+ ` - ${finding.check} — the substrate differs, so the two sides grade it against`,
137
+ ` different evidence`,
138
+ ...pair(finding.here, finding.there),
139
+ ];
140
+ case "params":
141
+ return [
142
+ ` - ${finding.check} — the parameters differ`,
143
+ ...pair(`[${finding.here}]`, `[${finding.there}]`),
144
+ ];
145
+ case "pattern":
146
+ return [
147
+ ...(finding.paramsCompared
148
+ ? [
149
+ ` - ${finding.check} — same sentence and parameters, different compiled`,
150
+ ` pattern: the two sides' @pome-sh/sdk compile one declaration differently,`,
151
+ ` which is a buildPattern change and not a vocabulary change`,
152
+ ]
153
+ : [
154
+ ` - ${finding.check} — same sentence, different compiled pattern, and no`,
155
+ ` parameter patterns published: either a parameter type or @pome-sh/sdk`,
156
+ ` buildPattern moved`,
157
+ ]),
158
+ ...pair(finding.here, finding.there),
159
+ ];
160
+ case "pattern_generation":
161
+ return [
162
+ ` - the digests differ, but every field the cloud published matches this CLI's`,
163
+ ` declarations. That makes it an @pome-sh/sdk difference — buildPattern, or what`,
164
+ ` checksDigest hashes — rather than a vocabulary change`,
165
+ ...pair(finding.here, finding.there),
166
+ ];
167
+ }
168
+ }
169
+ /** The refusal an author reads. Names the twin pin always, and the sdk pin only
170
+ * when the sdk is what the findings implicate — a pin nobody needs is noise in a
171
+ * message someone is reading because they are already blocked. */
172
+ export function formatSkewRefusal(twin, findings) {
173
+ const sdkImplicated = findings.some((f) => f.kind === "pattern" || f.kind === "pattern_generation");
174
+ return [
175
+ `Refusing to write: this CLI and the cloud disagree about ${twin}'s vocabulary, so a ` +
176
+ `sentence written here might not be graded there.`,
177
+ ...findings.flatMap(bullet),
178
+ "",
179
+ ` local @pome-sh/twin-${twin} ${pinnedVersion(`@pome-sh/twin-${twin}`)}` +
180
+ (sdkImplicated ? `, @pome-sh/sdk ${pinnedVersion("@pome-sh/sdk")}` : ""),
181
+ ...(sdkImplicated
182
+ ? [` The cloud publishes no sdk version here, so that is the only pin this CLI can name.`]
183
+ : []),
184
+ ` Update with \`npm i -g @pome-sh/cli@latest\`. If this CLI is already current, the ` +
185
+ `cloud is behind — that is a deploy, not something you can fix here.`,
186
+ ].join("\n");
187
+ }
@@ -32,6 +32,7 @@ export declare function exportGitHubCloneState(db: unknown): Promise<{
32
32
  created_at: string;
33
33
  updated_at: string;
34
34
  }[];
35
+ comments: import("@pome-sh/twin-github/types").IssueCommentRow[];
35
36
  repo_id: number;
36
37
  number: number;
37
38
  title: string;
@@ -287,6 +287,20 @@ upstream so a divergence that upstream "heals" becomes a tier-upgrade signal.
287
287
  out of scope, but the array-aware oracle (FDRS-455) now SEES the item-count
288
288
  divergence: registered as accepted on the collection root so this L1 read surface is
289
289
  INFO, not drift, and flagged as a genuine twin-fidelity gap for follow-up.
290
+
291
+ **Narrowed by F-1151: the COMMENT routes now honour the rule.**
292
+ `GET|POST /repos/:o/:r/issues/:number/comments` accept a pull-request number, which is
293
+ how real GitHub documents commenting on a PR's conversation. Until F-1151 they did
294
+ not — `issue_comments` carried a foreign key to `issues(repo_id, number)` and a PR has
295
+ no row there, so every PR comment failed the constraint and the route answered
296
+ `404 Issue not found`. That was this bullet's write-side face, and it was recorded
297
+ nowhere: the matrix listed the route as `hot`/`semantic` with no caveat, and the only
298
+ comment tool the bundled `pr-summary-*` examples expose 404'd on every run. What
299
+ remains open is the READ half above — the `/issues` COLLECTION still lists issues
300
+ only, and PRs still carry no `pull_request` member — so the divergence stands and
301
+ keeps its registry entry. The number space was never the obstacle: `nextNumber()`
302
+ already draws issue and PR numbers from one per-repo counter, so a number names one
303
+ entity or the other, never both.
290
304
  17. **Issue `assignees`/`labels` arrays reflect the controlled-sandbox seed, not real GitHub.**
291
305
  The plural `assignees` and the `labels` arrays are non-empty on the twin (its seeded
292
306
  fictional assignee/label) but empty on real GitHub for the seeded sandbox — the same
@@ -4,6 +4,10 @@ export declare const pullRequestStateCheck: Check<{
4
4
  repo: string;
5
5
  state: string;
6
6
  }>;
7
+ export declare const pullRequestCommentExists: Check<{
8
+ pr: string;
9
+ repo: string;
10
+ }>;
7
11
  export declare const pullRequestReviewExists: Check<{
8
12
  review: string;
9
13
  pr: string;
@@ -80,6 +80,99 @@ export const pullRequestStateCheck = defineCheck({
80
80
  };
81
81
  },
82
82
  });
83
+ // F-1151 — the fourteenth declaration, and the one whose whole difficulty was
84
+ // deciding WHICH question it answers.
85
+ //
86
+ // Three things on a pull request can be called "a comment", the twin exports all
87
+ // three separately, and F-1075 declined to bind this sentence rather than guess
88
+ // between them:
89
+ //
90
+ // 1. a CONVERSATION comment — `pull_requests[].comments[]` ← this check
91
+ // 2. a REVIEW BODY — `pull_requests[].reviews[].body`
92
+ // 3. an INLINE REVIEW COMMENT — `pull_requests[].review_comments[]`
93
+ //
94
+ // Reading 1, for three reasons that agree. It is what GitHub itself means by a
95
+ // comment on a pull request: its API routes these through the Issue Comments
96
+ // endpoints and names the other two "review comments" and "a review". It is what
97
+ // a summarising agent produces — the `pr-summary-*` tasks that ship these six
98
+ // criteria post a summary to the conversation, they do not open a review to carry
99
+ // it. And it is the only reading whose sentence needs no qualifier: the other two
100
+ // have to say "review" out loud to be true, so they belong in templates that do.
101
+ //
102
+ // The other two are NOT covered here and are not silently folded in. Reading 2
103
+ // already has a neighbour — `github.pr-review-exists` with `COMMENTED` asserts a
104
+ // review exists, and a body check would be a strictly narrower sibling of it.
105
+ // Reading 3 has no declaration at all yet; when something asserts it, it gets its
106
+ // own sentence naming the file it is anchored to.
107
+ //
108
+ // The sentence is deliberately UNCHANGED from the six criteria already written
109
+ // in `examples/pr-summary-agent` and `examples/pr-summary-review`. It could have
110
+ // been re-rendered to say "conversation comment" and remove all doubt from the
111
+ // sentence itself, and that was weighed: the words "a comment on pull request #1" are
112
+ // GitHub's own for this surface, so a template that says them is accurate, and
113
+ // keeping it byte-identical means the corpus binds without six file edits and
114
+ // without moving `CORPUS_SHAPE_BASELINE`. What carries the disambiguation is the
115
+ // `description`, which is what an author reads before picking.
116
+ export const pullRequestCommentExists = defineCheck({
117
+ id: "github.pr-comment-exists",
118
+ description: "Asserts the pull request's CONVERSATION timeline carries at least one comment — the " +
119
+ "surface GitHub's issue-comment endpoints write to. It is not the other two things a " +
120
+ "reader may call a comment on a PR: a review's body is not one (assert that with " +
121
+ "`github.pr-review-exists`), and an inline review comment anchored to a file and line is " +
122
+ "not one either. It says nothing about who commented, how many did, or what any of them " +
123
+ "say — and no declaration reads the TEXT of a pull request's comment yet. " +
124
+ "`github.issue-comment-contains` is the issue-side counterpart and does NOT reach a pull " +
125
+ "request: it resolves its subject among the repository's issues, so pointing it at a PR " +
126
+ "number fails as `issue #N not found`. A pull request whose export carries no comments " +
127
+ "section at all is SKIPPED, because absent is not the same as none.",
128
+ template: "Pull request #{pr} in `{repo}` has at least one comment",
129
+ params: { pr: prNumber, repo: repoRef },
130
+ substrate: "final",
131
+ polarity: () => "positive",
132
+ // A count, not a literal hunted inside prose: no redaction rule can destroy
133
+ // the thing this check compares, so there is no subject to declare.
134
+ subject: () => null,
135
+ // No falsifiable trigger. The PR number only RESOLVES — mutating it
136
+ // early-returns "not found", which moves the verdict on every seed for a reason
137
+ // that never reaches the comment count — and there is no second slot to
138
+ // falsify. Same shape as `pr-review-exists`, and admitted as `no_trigger`
139
+ // rather than buying a false clean bill.
140
+ vacuityMutant: () => null,
141
+ // The failing world names `comments: []`, NOT an absent section: absent SKIPS,
142
+ // because absent is not none — and a skip satisfies no arm.
143
+ discriminatingWorlds: ({ pr }) => ({
144
+ passing: finalWorld(repoState({
145
+ pull_requests: [{ number: Number(pr), comments: [{ body: "Summary: adds an optional discount." }] }],
146
+ })),
147
+ failing: finalWorld(repoState({ pull_requests: [{ number: Number(pr), comments: [] }] })),
148
+ }),
149
+ evaluate({ pr, repo }, { final }) {
150
+ const found = resolvePullRequest(final, repo, pr);
151
+ if ("missing" in found)
152
+ return { passed: false, reason: found.missing };
153
+ // Comments section absent — a snapshot predating PR-comment export. We
154
+ // cannot tell "nobody commented" from "not captured", so safe-skip rather
155
+ // than failing an agent that did comment. An empty array is a real zero and
156
+ // falls through to failed.
157
+ if (found.found.comments == null) {
158
+ return {
159
+ passed: false,
160
+ status: "skipped",
161
+ reason: `pull request #${pr} has no comments section in state_final (state_incomplete)`,
162
+ };
163
+ }
164
+ const count = found.found.comments.length;
165
+ return {
166
+ passed: count > 0,
167
+ // Names the surface, so a failure cannot be misread as "the agent left a
168
+ // review body and this check refused to see it" — which is exactly the
169
+ // wrong-match complaint the three readings invite.
170
+ reason: count > 0
171
+ ? `pull request #${pr} has ${count} conversation comment(s)`
172
+ : `pull request #${pr} has no conversation comments (reviews and inline review comments are not counted)`,
173
+ };
174
+ },
175
+ });
83
176
  export const pullRequestReviewExists = defineCheck({
84
177
  id: "github.pr-review-exists",
85
178
  description: "Asserts at least one submitted review on the pull request carries this state. It does " +
@@ -1 +1 @@
1
- {"version":3,"file":"check-pulls.js","sourceRoot":"","sources":["../../src/check-pulls.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,0EAA0E;AAC1E,EAAE;AACF,+EAA+E;AAC/E,wEAAwE;AAExE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG1D,MAAM,CAAC,MAAM,qBAAqB,GAAuD,WAAW,CAAC;IACnG,EAAE,EAAE,iBAAiB;IACrB,WAAW,EACT,2FAA2F;QAC3F,uFAAuF;QACvF,0FAA0F;QAC1F,yFAAyF;QACzF,yDAAyD;IAC3D,QAAQ,EAAE,2CAA2C;IACrD,MAAM,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE;IAChE,SAAS,EAAE,OAAO;IAClB,0EAA0E;IAC1E,yEAAyE;IACzE,uDAAuD;IACvD,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,YAAY,IAAI,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;IAC/F,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;IACnB,0EAA0E;IAC1E,+DAA+D;IAC/D,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI;IACzB,0EAA0E;IAC1E,yEAAyE;IACzE,yBAAyB;IACzB,oBAAoB,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QACtC,MAAM,WAAW,GAAG,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,YAAY,CAAC;QACjE,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,UAAU,GAAG,KAAK,KAAK,QAAQ,CAAC;YACtC,OAAO;gBACL,OAAO,EAAE,UAAU,CACjB,SAAS,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACnF;gBACD,OAAO,EAAE,UAAU,CACjB,SAAS,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACnF;aACF,CAAC;QACJ,CAAC;QACD,OAAO;YACL,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YAClF,OAAO,EAAE,UAAU,CACjB,SAAS,CAAC;gBACR,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACrF,CAAC,CACH;SACF,CAAC;IACJ,CAAC;IACD,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE;QACrC,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAClD,IAAI,SAAS,IAAI,KAAK;YAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QACxE,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;QACzB,MAAM,WAAW,GAAG,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,YAAY,CAAC;QACjE,sEAAsE;QACtE,4EAA4E;QAC5E,0EAA0E;QAC1E,2EAA2E;QAC3E,yBAAyB;QACzB,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QACvD,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YACpB,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,iBAAiB,EAAE,WACzB,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAC3B,0CAA0C;aAC3C,CAAC;QACJ,CAAC;QACD,sEAAsE;QACtE,0EAA0E;QAC1E,oCAAoC;QACpC,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO;gBACL,MAAM,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM;gBAC7C,MAAM,EAAE,iBAAiB,EAAE,YAAY,MAAM,aAAa,KAAK,IAAI;aACpE,CAAC;QACJ,CAAC;QACD,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,KAAK,KAAK,KAAK;YAC5B,MAAM,EAAE,iBAAiB,EAAE,YAAY,IAAI,CAAC,KAAK,cAAc,KAAK,IAAI;SACzE,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAwD,WAAW,CAAC;IACtG,EAAE,EAAE,yBAAyB;IAC7B,WAAW,EACT,wFAAwF;QACxF,yFAAyF;QACzF,uFAAuF;QACvF,uFAAuF;IACzF,QAAQ,EAAE,4DAA4D;IACtE,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE;IAC5D,SAAS,EAAE,OAAO;IAClB,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU;IAC1B,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;IACnB,0EAA0E;IAC1E,2CAA2C;IAC3C,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI;IACzB,8EAA8E;IAC9E,4DAA4D;IAC5D,oBAAoB,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QACzC,OAAO,EAAE,UAAU,CACjB,SAAS,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CACrF;QACD,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;KACzF,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE;QACtC,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAClD,IAAI,SAAS,IAAI,KAAK;YAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QACxE,2EAA2E;QAC3E,sEAAsE;QACtE,0EAA0E;QAC1E,4CAA4C;QAC5C,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;YAChC,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,iBAAiB,EAAE,2DAA2D;aACvF,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvC,OAAO;YACL,MAAM;YACN,MAAM,EAAE,MAAM;gBACZ,CAAC,CAAC,iBAAiB,EAAE,UAAU,MAAM,SAAS;gBAC9C,CAAC,CAAC,iBAAiB,EAAE,iBAAiB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,MAAM,SAAS;SACzF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"check-pulls.js","sourceRoot":"","sources":["../../src/check-pulls.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,7 @@ export interface GitHubCheckStatePullRequest {
19
19
  state?: string | null;
20
20
  merged?: number | boolean | null;
21
21
  reviews?: GitHubCheckStateReview[] | null;
22
+ comments?: GitHubCheckStateComment[] | null;
22
23
  }
23
24
  export interface GitHubCheckStateCommitStatus {
24
25
  context?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"check-state.js","sourceRoot":"","sources":["../../src/check-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"check-state.js","sourceRoot":"","sources":["../../src/check-state.ts"],"names":[],"mappings":"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"}
@@ -29,6 +29,9 @@ export declare const GITHUB_CHECKS: readonly [import("./check-kind.js").Check<{
29
29
  pr: string;
30
30
  repo: string;
31
31
  state: string;
32
+ }>, import("./check-kind.js").Check<{
33
+ pr: string;
34
+ repo: string;
32
35
  }>, import("./check-kind.js").Check<{
33
36
  review: string;
34
37
  pr: string;
@@ -45,7 +45,7 @@
45
45
  //
46
46
  // So github now has no hand-written predicate left anywhere.
47
47
  import { issueAssignee, issueCommentContains, issueExactlyOneLabel, issueExists, issueHasLabel, issueStateCheck, } from "./check-issues.js";
48
- import { pullRequestReviewExists, pullRequestStateCheck } from "./check-pulls.js";
48
+ import { pullRequestCommentExists, pullRequestReviewExists, pullRequestStateCheck, } from "./check-pulls.js";
49
49
  import { commitStatus, fileExists, noNewLabels } from "./check-repos.js";
50
50
  import { noUnsupportedEndpoint, toolNeverCalled } from "./check-tape.js";
51
51
  // Order is not first-match-wins here — the generated patterns are anchored and
@@ -62,6 +62,7 @@ export const GITHUB_CHECKS = [
62
62
  issueCommentContains,
63
63
  noNewLabels,
64
64
  pullRequestStateCheck,
65
+ pullRequestCommentExists,
65
66
  pullRequestReviewExists,
66
67
  fileExists,
67
68
  commitStatus,
@@ -1 +1 @@
1
- {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../src/checks.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,6EAA6E;AAC7E,EAAE;AACF,2EAA2E;AAC3E,yEAAyE;AACzE,uEAAuE;AACvE,4EAA4E;AAC5E,mBAAmB;AACnB,EAAE;AACF,4EAA4E;AAC5E,kEAAkE;AAClE,+EAA+E;AAC/E,4CAA4C;AAC5C,EAAE;AACF,6DAA6D;AAC7D,6EAA6E;AAC7E,8DAA8D;AAC9D,EAAE;AACF,yEAAyE;AACzE,2EAA2E;AAC3E,2EAA2E;AAC3E,EAAE;AACF,+EAA+E;AAC/E,oEAAoE;AACpE,0EAA0E;AAC1E,8EAA8E;AAC9E,yEAAyE;AACzE,8EAA8E;AAC9E,6EAA6E;AAC7E,2EAA2E;AAC3E,4EAA4E;AAC5E,EAAE;AACF,wEAAwE;AACxE,+EAA+E;AAC/E,4EAA4E;AAC5E,8EAA8E;AAC9E,mCAAmC;AACnC,EAAE;AACF,+EAA+E;AAC/E,gFAAgF;AAChF,8EAA8E;AAC9E,6EAA6E;AAC7E,6EAA6E;AAC7E,EAAE;AACF,6DAA6D;AAE7D,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,WAAW,EACX,aAAa,EACb,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAezE,+EAA+E;AAC/E,0EAA0E;AAC1E,gFAAgF;AAChF,uEAAuE;AACvE,0BAA0B;AAC1B,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,WAAW;IACX,eAAe;IACf,aAAa;IACb,oBAAoB;IACpB,aAAa;IACb,oBAAoB;IACpB,WAAW;IACX,qBAAqB;IACrB,uBAAuB;IACvB,UAAU;IACV,YAAY;IACZ,4EAA4E;IAC5E,+EAA+E;IAC/E,kEAAkE;IAClE,qBAAqB;IACrB,eAAe;CACP,CAAC"}
1
+ {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../src/checks.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,6EAA6E;AAC7E,EAAE;AACF,2EAA2E;AAC3E,yEAAyE;AACzE,uEAAuE;AACvE,4EAA4E;AAC5E,mBAAmB;AACnB,EAAE;AACF,4EAA4E;AAC5E,kEAAkE;AAClE,+EAA+E;AAC/E,4CAA4C;AAC5C,EAAE;AACF,6DAA6D;AAC7D,6EAA6E;AAC7E,8DAA8D;AAC9D,EAAE;AACF,yEAAyE;AACzE,2EAA2E;AAC3E,2EAA2E;AAC3E,EAAE;AACF,+EAA+E;AAC/E,oEAAoE;AACpE,0EAA0E;AAC1E,8EAA8E;AAC9E,yEAAyE;AACzE,8EAA8E;AAC9E,6EAA6E;AAC7E,2EAA2E;AAC3E,4EAA4E;AAC5E,EAAE;AACF,wEAAwE;AACxE,+EAA+E;AAC/E,4EAA4E;AAC5E,8EAA8E;AAC9E,mCAAmC;AACnC,EAAE;AACF,+EAA+E;AAC/E,gFAAgF;AAChF,8EAA8E;AAC9E,6EAA6E;AAC7E,6EAA6E;AAC7E,EAAE;AACF,6DAA6D;AAE7D,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,WAAW,EACX,aAAa,EACb,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAezE,+EAA+E;AAC/E,0EAA0E;AAC1E,gFAAgF;AAChF,uEAAuE;AACvE,0BAA0B;AAC1B,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,WAAW;IACX,eAAe;IACf,aAAa;IACb,oBAAoB;IACpB,aAAa;IACb,oBAAoB;IACpB,WAAW;IACX,qBAAqB;IACrB,wBAAwB;IACxB,uBAAuB;IACvB,UAAU;IACV,YAAY;IACZ,4EAA4E;IAC5E,+EAA+E;IAC/E,kEAAkE;IAClE,qBAAqB;IACrB,eAAe;CACP,CAAC"}