@pome-sh/cli 0.18.0 → 0.20.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.
- package/dist/build-info.json +3 -3
- package/dist/src/capture-server/index.js +1 -1
- package/dist/src/runner/mergeAdapterSignals.d.ts +23 -0
- package/dist/src/runner/mergeAdapterSignals.js +45 -3
- package/dist/src/scaffolds/mcp-loop/loop.js +3 -3
- package/node_modules/@hono/node-server/README.md +47 -1
- package/node_modules/@hono/node-server/dist/early-hints.cjs +35 -0
- package/node_modules/@hono/node-server/dist/early-hints.d.cts +16 -0
- package/node_modules/@hono/node-server/dist/early-hints.d.mts +16 -0
- package/node_modules/@hono/node-server/dist/early-hints.mjs +33 -0
- package/node_modules/@hono/node-server/dist/index.cjs +10 -6
- package/node_modules/@hono/node-server/dist/index.mjs +10 -6
- package/node_modules/@hono/node-server/package.json +14 -3
- package/node_modules/@pome-sh/sdk/dist/check-state-path.d.ts +71 -0
- package/node_modules/@pome-sh/sdk/dist/check-state-path.js +200 -0
- package/node_modules/@pome-sh/sdk/dist/check-state-path.js.map +1 -0
- package/node_modules/@pome-sh/sdk/dist/checks.d.ts +2 -0
- package/node_modules/@pome-sh/sdk/dist/checks.js +5 -0
- package/node_modules/@pome-sh/sdk/dist/checks.js.map +1 -1
- package/node_modules/@pome-sh/sdk/dist/recorder.d.ts +10 -1
- package/node_modules/@pome-sh/sdk/dist/recorder.js +11 -2
- package/node_modules/@pome-sh/sdk/dist/recorder.js.map +1 -1
- package/node_modules/@pome-sh/sdk/package.json +4 -4
- package/node_modules/@pome-sh/shared-types/dist/otel/event-schema.d.ts +111 -24
- package/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js +3 -3
- package/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js.map +1 -1
- package/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.d.ts +6 -3
- package/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js +7 -2
- package/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js.map +1 -1
- package/node_modules/@pome-sh/shared-types/dist/otel/map-span.js +1 -1
- package/node_modules/@pome-sh/shared-types/dist/otel/map-span.js.map +1 -1
- package/node_modules/@pome-sh/shared-types/dist/otel/span-event.d.ts +68 -4
- package/node_modules/@pome-sh/shared-types/dist/otel/span-event.js +19 -5
- package/node_modules/@pome-sh/shared-types/dist/otel/span-event.js.map +1 -1
- package/node_modules/@pome-sh/shared-types/dist/recorder-events.d.ts +60 -28
- package/node_modules/@pome-sh/shared-types/dist/recorder-events.js +81 -10
- package/node_modules/@pome-sh/shared-types/dist/recorder-events.js.map +1 -1
- package/node_modules/@pome-sh/shared-types/package.json +1 -1
- package/node_modules/@pome-sh/shared-types/trace-contract.json +49 -1
- package/node_modules/@pome-sh/twin-github/dist/src/check-issues.js +35 -9
- package/node_modules/@pome-sh/twin-github/dist/src/check-issues.js.map +1 -1
- package/node_modules/@pome-sh/twin-github/dist/src/check-pulls.js +21 -5
- package/node_modules/@pome-sh/twin-github/dist/src/check-pulls.js.map +1 -1
- package/node_modules/@pome-sh/twin-github/dist/src/check-repos.d.ts +3 -0
- package/node_modules/@pome-sh/twin-github/dist/src/check-repos.js +111 -6
- package/node_modules/@pome-sh/twin-github/dist/src/check-repos.js.map +1 -1
- package/node_modules/@pome-sh/twin-github/dist/src/check-state.d.ts +21 -1
- package/node_modules/@pome-sh/twin-github/dist/src/check-state.js +77 -10
- package/node_modules/@pome-sh/twin-github/dist/src/check-state.js.map +1 -1
- package/node_modules/@pome-sh/twin-github/dist/src/checks.d.ts +2 -0
- package/node_modules/@pome-sh/twin-github/dist/src/checks.js +5 -1
- package/node_modules/@pome-sh/twin-github/dist/src/checks.js.map +1 -1
- package/node_modules/@pome-sh/twin-github/package.json +6 -6
- package/node_modules/@pome-sh/twin-gmail/CHANGELOG.md +36 -0
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-drafts.js +19 -4
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-drafts.js.map +1 -1
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-labels.js +15 -4
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-labels.js.map +1 -1
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-messages.js +19 -3
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-messages.js.map +1 -1
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-state.d.ts +26 -1
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-state.js +52 -16
- package/node_modules/@pome-sh/twin-gmail/dist/src/check-state.js.map +1 -1
- package/node_modules/@pome-sh/twin-gmail/package.json +5 -5
- package/node_modules/@pome-sh/twin-linear/CHANGELOG.md +36 -0
- package/node_modules/@pome-sh/twin-linear/dist/src/check-comments.js +15 -3
- package/node_modules/@pome-sh/twin-linear/dist/src/check-comments.js.map +1 -1
- package/node_modules/@pome-sh/twin-linear/dist/src/check-issues.js +31 -4
- package/node_modules/@pome-sh/twin-linear/dist/src/check-issues.js.map +1 -1
- package/node_modules/@pome-sh/twin-linear/dist/src/check-state.d.ts +27 -2
- package/node_modules/@pome-sh/twin-linear/dist/src/check-state.js +73 -20
- package/node_modules/@pome-sh/twin-linear/dist/src/check-state.js.map +1 -1
- package/node_modules/@pome-sh/twin-linear/package.json +5 -5
- package/node_modules/@pome-sh/twin-slack/dist/src/check-messages.js +28 -7
- package/node_modules/@pome-sh/twin-slack/dist/src/check-messages.js.map +1 -1
- package/node_modules/@pome-sh/twin-slack/dist/src/check-secrets.js +16 -3
- package/node_modules/@pome-sh/twin-slack/dist/src/check-secrets.js.map +1 -1
- package/node_modules/@pome-sh/twin-slack/dist/src/check-state.d.ts +26 -1
- package/node_modules/@pome-sh/twin-slack/dist/src/check-state.js +31 -4
- package/node_modules/@pome-sh/twin-slack/dist/src/check-state.js.map +1 -1
- package/node_modules/@pome-sh/twin-slack/package.json +6 -6
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-payments.d.ts +1 -1
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-payments.js +16 -0
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-payments.js.map +1 -1
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-refunds.js +11 -3
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-refunds.js.map +1 -1
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-state.d.ts +25 -1
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-state.js +31 -3
- package/node_modules/@pome-sh/twin-stripe/dist/src/check-state.js.map +1 -1
- package/node_modules/@pome-sh/twin-stripe/package.json +6 -6
- package/node_modules/hono/dist/cjs/context.js +28 -13
- package/node_modules/hono/dist/cjs/helper/proxy/index.js +4 -0
- package/node_modules/hono/dist/cjs/hono-base.js +3 -2
- package/node_modules/hono/dist/cjs/jsx/base.js +27 -23
- package/node_modules/hono/dist/cjs/jsx/hooks/index.js +16 -13
- package/node_modules/hono/dist/cjs/middleware/cache/index.js +103 -8
- package/node_modules/hono/dist/cjs/middleware/compress/index.js +5 -0
- package/node_modules/hono/dist/cjs/middleware/cors/index.js +2 -2
- package/node_modules/hono/dist/cjs/middleware/etag/index.js +1 -1
- package/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +9 -4
- package/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +9 -4
- package/node_modules/hono/dist/cjs/middleware/language/language.js +10 -6
- package/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +90 -0
- package/node_modules/hono/dist/cjs/request.js +6 -8
- package/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +55 -56
- package/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +64 -85
- package/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +13 -5
- package/node_modules/hono/dist/cjs/router.js +1 -1
- package/node_modules/hono/dist/cjs/utils/cookie.js +3 -2
- package/node_modules/hono/dist/cjs/utils/url.js +7 -7
- package/node_modules/hono/dist/context.js +28 -13
- package/node_modules/hono/dist/helper/proxy/index.js +4 -0
- package/node_modules/hono/dist/hono-base.js +3 -2
- package/node_modules/hono/dist/jsx/base.js +27 -23
- package/node_modules/hono/dist/jsx/hooks/index.js +16 -13
- package/node_modules/hono/dist/middleware/cache/index.js +103 -8
- package/node_modules/hono/dist/middleware/compress/index.js +5 -0
- package/node_modules/hono/dist/middleware/cors/index.js +2 -2
- package/node_modules/hono/dist/middleware/etag/index.js +1 -1
- package/node_modules/hono/dist/middleware/jwk/jwk.js +9 -4
- package/node_modules/hono/dist/middleware/jwt/jwt.js +9 -4
- package/node_modules/hono/dist/middleware/language/language.js +10 -6
- package/node_modules/hono/dist/middleware/method-not-allowed/index.js +68 -0
- package/node_modules/hono/dist/request.js +7 -9
- package/node_modules/hono/dist/router/reg-exp-router/node.js +55 -56
- package/node_modules/hono/dist/router/reg-exp-router/router.js +64 -85
- package/node_modules/hono/dist/router/reg-exp-router/trie.js +13 -5
- package/node_modules/hono/dist/router.js +1 -1
- package/node_modules/hono/dist/types/client/types.d.ts +1 -1
- package/node_modules/hono/dist/types/hono-base.d.ts +4 -3
- package/node_modules/hono/dist/types/jsx/base.d.ts +4 -2
- package/node_modules/hono/dist/types/jsx/dom/index.d.ts +5 -5
- package/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +2 -2
- package/node_modules/hono/dist/types/jsx/dom/server.d.ts +5 -5
- package/node_modules/hono/dist/types/jsx/hooks/index.d.ts +8 -6
- package/node_modules/hono/dist/types/jsx/index.d.ts +5 -5
- package/node_modules/hono/dist/types/middleware/cache/index.d.ts +6 -4
- package/node_modules/hono/dist/types/middleware/cors/index.d.ts +1 -1
- package/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +2 -2
- package/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +2 -0
- package/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +2 -0
- package/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +49 -0
- package/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +1 -1
- package/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +2 -1
- package/node_modules/hono/dist/types/router.d.ts +1 -1
- package/node_modules/hono/dist/types/utils/headers.d.ts +2 -2
- package/node_modules/hono/dist/types/utils/url.d.ts +1 -0
- package/node_modules/hono/dist/utils/cookie.js +4 -3
- package/node_modules/hono/dist/utils/url.js +5 -6
- package/node_modules/hono/package.json +10 -3
- package/package.json +21 -21
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
//
|
|
5
5
|
// Declarations only. The grammar rules they all obey are in `checks.ts`, which
|
|
6
6
|
// assembles them; how the exported tree is read is in `check-state.ts`.
|
|
7
|
-
import { defineCheck, VACUITY_SENTINEL, VACUITY_SENTINEL_NUMBER } from "@pome-sh/sdk/checks";
|
|
7
|
+
import { childStatePath, defineCheck, VACUITY_SENTINEL, VACUITY_SENTINEL_NUMBER } from "@pome-sh/sdk/checks";
|
|
8
8
|
import { repoRef } from "@pome-sh/sdk/checks";
|
|
9
9
|
import { commentNeedle, issueNumber, issueState, labelName, login, } from "./check-params.js";
|
|
10
|
-
import { appliedLabelNames, resolveIssue, sameLabel } from "./check-state.js";
|
|
10
|
+
import { appliedLabelNames, missOutcome, resolveIssue, sameLabel } from "./check-state.js";
|
|
11
11
|
import { finalWorld, repoState } from "./check-worlds.js";
|
|
12
12
|
export const issueExists = defineCheck({
|
|
13
13
|
id: "github.issue-exists",
|
|
@@ -37,8 +37,14 @@ export const issueExists = defineCheck({
|
|
|
37
37
|
evaluate({ issue, repo }, { final }) {
|
|
38
38
|
const found = resolveIssue(final, repo, issue);
|
|
39
39
|
if ("missing" in found)
|
|
40
|
-
return
|
|
41
|
-
|
|
40
|
+
return missOutcome(found);
|
|
41
|
+
// The ISSUE itself, not a field on it — here the lookup is the assertion, so
|
|
42
|
+
// the row's own address is exactly what produced the verdict (F-1197).
|
|
43
|
+
return {
|
|
44
|
+
passed: true,
|
|
45
|
+
reason: `issue #${issue} exists in ${repo}`,
|
|
46
|
+
evidenceStatePaths: [found.path],
|
|
47
|
+
};
|
|
42
48
|
},
|
|
43
49
|
});
|
|
44
50
|
export const issueStateCheck = defineCheck({
|
|
@@ -84,7 +90,7 @@ export const issueStateCheck = defineCheck({
|
|
|
84
90
|
evaluate({ issue, repo, state }, { final }) {
|
|
85
91
|
const found = resolveIssue(final, repo, issue);
|
|
86
92
|
if ("missing" in found)
|
|
87
|
-
return
|
|
93
|
+
return missOutcome(found);
|
|
88
94
|
// The issue row must carry a state to attest it; a snapshot that omitted it
|
|
89
95
|
// cannot be judged either way → safe-skip rather than false-fail.
|
|
90
96
|
if (found.found.state == null) {
|
|
@@ -92,12 +98,18 @@ export const issueStateCheck = defineCheck({
|
|
|
92
98
|
passed: false,
|
|
93
99
|
status: "skipped",
|
|
94
100
|
reason: `issue #${issue} has no state in state_final (state_incomplete)`,
|
|
101
|
+
// The ROW, not `…/state` — the field this branch exists for is the one
|
|
102
|
+
// that is absent, and a pointer at it would not resolve. Pointing at the
|
|
103
|
+
// row is what lets a reader see the gap for themselves instead of taking
|
|
104
|
+
// the reason's word for it (F-1197).
|
|
105
|
+
evidenceStatePaths: [found.path],
|
|
95
106
|
};
|
|
96
107
|
}
|
|
97
108
|
const actual = found.found.state.toLowerCase();
|
|
98
109
|
return {
|
|
99
110
|
passed: actual === state,
|
|
100
111
|
reason: `issue #${issue} state is "${found.found.state}" (wanted "${state}")`,
|
|
112
|
+
evidenceStatePaths: [childStatePath(found.path, "state")],
|
|
101
113
|
};
|
|
102
114
|
},
|
|
103
115
|
});
|
|
@@ -127,7 +139,7 @@ export const issueHasLabel = defineCheck({
|
|
|
127
139
|
evaluate({ issue, repo, label }, { final }) {
|
|
128
140
|
const found = resolveIssue(final, repo, issue);
|
|
129
141
|
if ("missing" in found)
|
|
130
|
-
return
|
|
142
|
+
return missOutcome(found);
|
|
131
143
|
const applied = appliedLabelNames(found.found);
|
|
132
144
|
const passed = applied.some((name) => sameLabel(name, label));
|
|
133
145
|
return {
|
|
@@ -135,6 +147,10 @@ export const issueHasLabel = defineCheck({
|
|
|
135
147
|
reason: passed
|
|
136
148
|
? `issue #${issue} has label "${label}"`
|
|
137
149
|
: `issue #${issue} labels are [${applied.join(", ")}], missing "${label}"`,
|
|
150
|
+
// The APPLIED set, which is the set this check scanned — not the repo's
|
|
151
|
+
// label definitions, which is the neighbouring set `no-new-labels` reads
|
|
152
|
+
// and the one this check's description exists to keep it distinct from.
|
|
153
|
+
evidenceStatePaths: [childStatePath(found.path, "labels")],
|
|
138
154
|
};
|
|
139
155
|
},
|
|
140
156
|
});
|
|
@@ -159,7 +175,7 @@ export const issueExactlyOneLabel = defineCheck({
|
|
|
159
175
|
evaluate({ issue, repo, label }, { final }) {
|
|
160
176
|
const found = resolveIssue(final, repo, issue);
|
|
161
177
|
if ("missing" in found)
|
|
162
|
-
return
|
|
178
|
+
return missOutcome(found);
|
|
163
179
|
const applied = appliedLabelNames(found.found);
|
|
164
180
|
const passed = applied.length === 1 && sameLabel(applied[0], label);
|
|
165
181
|
return {
|
|
@@ -167,6 +183,9 @@ export const issueExactlyOneLabel = defineCheck({
|
|
|
167
183
|
reason: passed
|
|
168
184
|
? `issue #${issue} has exactly one label ("${label}")`
|
|
169
185
|
: `issue #${issue} has labels [${applied.join(", ")}], expected exactly one label "${label}"`,
|
|
186
|
+
// The same pointer `issue-has-label` cites, because both read the same
|
|
187
|
+
// field — the difference between them is the assertion, not the address.
|
|
188
|
+
evidenceStatePaths: [childStatePath(found.path, "labels")],
|
|
170
189
|
};
|
|
171
190
|
},
|
|
172
191
|
});
|
|
@@ -191,7 +210,7 @@ export const issueAssignee = defineCheck({
|
|
|
191
210
|
evaluate(args, { final }) {
|
|
192
211
|
const found = resolveIssue(final, args.repo, args.issue);
|
|
193
212
|
if ("missing" in found)
|
|
194
|
-
return
|
|
213
|
+
return missOutcome(found);
|
|
195
214
|
const assignees = found.found.assignees ?? [];
|
|
196
215
|
const passed = assignees.includes(args.login);
|
|
197
216
|
return {
|
|
@@ -199,6 +218,7 @@ export const issueAssignee = defineCheck({
|
|
|
199
218
|
reason: passed
|
|
200
219
|
? `issue #${args.issue} is assigned to "${args.login}"`
|
|
201
220
|
: `issue #${args.issue} assignees are [${assignees.join(", ")}], missing "${args.login}"`,
|
|
221
|
+
evidenceStatePaths: [childStatePath(found.path, "assignees")],
|
|
202
222
|
};
|
|
203
223
|
},
|
|
204
224
|
});
|
|
@@ -228,7 +248,7 @@ export const issueCommentContains = defineCheck({
|
|
|
228
248
|
evaluate({ needle, issue, repo }, { final }) {
|
|
229
249
|
const found = resolveIssue(final, repo, issue);
|
|
230
250
|
if ("missing" in found)
|
|
231
|
-
return
|
|
251
|
+
return missOutcome(found);
|
|
232
252
|
const comments = found.found.comments ?? [];
|
|
233
253
|
const passed = comments.some((comment) => (comment.body ?? "").includes(needle));
|
|
234
254
|
return {
|
|
@@ -236,6 +256,12 @@ export const issueCommentContains = defineCheck({
|
|
|
236
256
|
reason: passed
|
|
237
257
|
? `issue #${issue} has a comment containing "${needle}"`
|
|
238
258
|
: `issue #${issue} has no comment containing "${needle}" (${comments.length} comment(s) scanned)`,
|
|
259
|
+
// The whole comment list, not the matching comment. The check scans every
|
|
260
|
+
// body, so the list is what it read — and on the FAILING side there is no
|
|
261
|
+
// matching row to point at, which would leave the citation present on a
|
|
262
|
+
// pass and absent on a fail. A pointer that appears only when the verdict
|
|
263
|
+
// is good is worse than none: its absence would read as a verdict class.
|
|
264
|
+
evidenceStatePaths: [childStatePath(found.path, "comments")],
|
|
239
265
|
};
|
|
240
266
|
},
|
|
241
267
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-issues.js","sourceRoot":"","sources":["../../src/check-issues.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,oEAAoE;AACpE,EAAE;AACF,+EAA+E;AAC/E,wEAAwE;AAExE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"check-issues.js","sourceRoot":"","sources":["../../src/check-issues.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
//
|
|
5
5
|
// Declarations only. The grammar rules they all obey are in `checks.ts`, which
|
|
6
6
|
// assembles them; how the exported tree is read is in `check-state.ts`.
|
|
7
|
-
import { defineCheck, repoRef } from "@pome-sh/sdk/checks";
|
|
7
|
+
import { childStatePath, defineCheck, repoRef } from "@pome-sh/sdk/checks";
|
|
8
8
|
import { prNumber, pullRequestState, reviewState } from "./check-params.js";
|
|
9
|
-
import { isMerged, resolvePullRequest } from "./check-state.js";
|
|
9
|
+
import { isMerged, missOutcome, resolvePullRequest } from "./check-state.js";
|
|
10
10
|
import { finalWorld, repoState } from "./check-worlds.js";
|
|
11
11
|
export const pullRequestStateCheck = defineCheck({
|
|
12
12
|
id: "github.pr-state",
|
|
@@ -48,7 +48,7 @@ export const pullRequestStateCheck = defineCheck({
|
|
|
48
48
|
evaluate({ pr, repo, state }, { final }) {
|
|
49
49
|
const found = resolvePullRequest(final, repo, pr);
|
|
50
50
|
if ("missing" in found)
|
|
51
|
-
return
|
|
51
|
+
return missOutcome(found);
|
|
52
52
|
const pull = found.found;
|
|
53
53
|
const onMergeFlag = state === "merged" || state === "not merged";
|
|
54
54
|
// The field this assertion turns on must be PRESENT. Absent, the safe
|
|
@@ -62,6 +62,9 @@ export const pullRequestStateCheck = defineCheck({
|
|
|
62
62
|
passed: false,
|
|
63
63
|
status: "skipped",
|
|
64
64
|
reason: `pull request #${pr} has no ${onMergeFlag ? "merged" : "state"} field in state_final (state_incomplete)`,
|
|
65
|
+
// The ROW: the field this branch exists for is the absent one, so a
|
|
66
|
+
// pointer at it would resolve to nothing (F-1197).
|
|
67
|
+
evidenceStatePaths: [found.path],
|
|
65
68
|
};
|
|
66
69
|
}
|
|
67
70
|
// Cite only the field the assertion actually turned on. Printing both
|
|
@@ -72,11 +75,17 @@ export const pullRequestStateCheck = defineCheck({
|
|
|
72
75
|
return {
|
|
73
76
|
passed: state === "merged" ? merged : !merged,
|
|
74
77
|
reason: `pull request #${pr}: merged=${merged} (wanted "${state}")`,
|
|
78
|
+
// The SAME discipline the reason above already follows: cite only the
|
|
79
|
+
// field the assertion turned on. `merged` and `state` are different
|
|
80
|
+
// columns, and a citation naming both would offer a reader an absent
|
|
81
|
+
// field as evidence for a verdict that never read it.
|
|
82
|
+
evidenceStatePaths: [childStatePath(found.path, "merged")],
|
|
75
83
|
};
|
|
76
84
|
}
|
|
77
85
|
return {
|
|
78
86
|
passed: pull.state === state,
|
|
79
87
|
reason: `pull request #${pr}: state="${pull.state}" (wanted "${state}")`,
|
|
88
|
+
evidenceStatePaths: [childStatePath(found.path, "state")],
|
|
80
89
|
};
|
|
81
90
|
},
|
|
82
91
|
});
|
|
@@ -149,7 +158,7 @@ export const pullRequestCommentExists = defineCheck({
|
|
|
149
158
|
evaluate({ pr, repo }, { final }) {
|
|
150
159
|
const found = resolvePullRequest(final, repo, pr);
|
|
151
160
|
if ("missing" in found)
|
|
152
|
-
return
|
|
161
|
+
return missOutcome(found);
|
|
153
162
|
// Comments section absent — a snapshot predating PR-comment export. We
|
|
154
163
|
// cannot tell "nobody commented" from "not captured", so safe-skip rather
|
|
155
164
|
// than failing an agent that did comment. An empty array is a real zero and
|
|
@@ -159,6 +168,7 @@ export const pullRequestCommentExists = defineCheck({
|
|
|
159
168
|
passed: false,
|
|
160
169
|
status: "skipped",
|
|
161
170
|
reason: `pull request #${pr} has no comments section in state_final (state_incomplete)`,
|
|
171
|
+
evidenceStatePaths: [found.path],
|
|
162
172
|
};
|
|
163
173
|
}
|
|
164
174
|
const count = found.found.comments.length;
|
|
@@ -170,6 +180,10 @@ export const pullRequestCommentExists = defineCheck({
|
|
|
170
180
|
reason: count > 0
|
|
171
181
|
? `pull request #${pr} has ${count} conversation comment(s)`
|
|
172
182
|
: `pull request #${pr} has no conversation comments (reviews and inline review comments are not counted)`,
|
|
183
|
+
// `comments`, and this pointer is the disambiguation the description
|
|
184
|
+
// spends a paragraph on. Three fields on a PR can be called "a comment";
|
|
185
|
+
// the citation names which one was counted, in a form a reader can open.
|
|
186
|
+
evidenceStatePaths: [childStatePath(found.path, "comments")],
|
|
173
187
|
};
|
|
174
188
|
},
|
|
175
189
|
});
|
|
@@ -196,7 +210,7 @@ export const pullRequestReviewExists = defineCheck({
|
|
|
196
210
|
evaluate({ review, pr, repo }, { final }) {
|
|
197
211
|
const found = resolvePullRequest(final, repo, pr);
|
|
198
212
|
if ("missing" in found)
|
|
199
|
-
return
|
|
213
|
+
return missOutcome(found);
|
|
200
214
|
// Reviews section absent (an older twin snapshot predating review export):
|
|
201
215
|
// we cannot distinguish "no review" from "not captured", so safe-skip
|
|
202
216
|
// rather than vacuously failing a correct agent. An empty array is a real
|
|
@@ -206,6 +220,7 @@ export const pullRequestReviewExists = defineCheck({
|
|
|
206
220
|
passed: false,
|
|
207
221
|
status: "skipped",
|
|
208
222
|
reason: `pull request #${pr} has no reviews section in state_final (state_incomplete)`,
|
|
223
|
+
evidenceStatePaths: [found.path],
|
|
209
224
|
};
|
|
210
225
|
}
|
|
211
226
|
const states = found.found.reviews.map((row) => row.state ?? "");
|
|
@@ -215,6 +230,7 @@ export const pullRequestReviewExists = defineCheck({
|
|
|
215
230
|
reason: passed
|
|
216
231
|
? `pull request #${pr} has a ${review} review`
|
|
217
232
|
: `pull request #${pr} reviews are [${states.join(", ")}], missing a ${review} review`,
|
|
233
|
+
evidenceStatePaths: [childStatePath(found.path, "reviews")],
|
|
218
234
|
};
|
|
219
235
|
},
|
|
220
236
|
});
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"check-pulls.js","sourceRoot":"","sources":["../../src/check-pulls.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
//
|
|
6
6
|
// Declarations only. The grammar rules they all obey are in `checks.ts`, which
|
|
7
7
|
// assembles them; how the exported tree is read is in `check-state.ts`.
|
|
8
|
-
import { defineCheck, repoRef, VACUITY_SENTINEL } from "@pome-sh/sdk/checks";
|
|
8
|
+
import { childStatePath, defineCheck, repoRef, VACUITY_SENTINEL } from "@pome-sh/sdk/checks";
|
|
9
9
|
import { commitStatusState, filePath, statusContext } from "./check-params.js";
|
|
10
|
-
import { labelNames, resolveRepo } from "./check-state.js";
|
|
10
|
+
import { issueNumbers, labelNames, missOutcome, resolveRepo } from "./check-state.js";
|
|
11
11
|
import { deltaWorld, finalWorld, repoState } from "./check-worlds.js";
|
|
12
12
|
export const noNewLabels = defineCheck({
|
|
13
13
|
id: "github.no-new-labels",
|
|
@@ -53,23 +53,122 @@ export const noNewLabels = defineCheck({
|
|
|
53
53
|
// consumer that forgets gets a named skip rather than a vacuous pass.
|
|
54
54
|
if (seed === null)
|
|
55
55
|
return { passed: false, reason: "seed_missing", status: "skipped" };
|
|
56
|
+
// The SEED-side refusal cites nothing. `missOutcome` carries the pointer the
|
|
57
|
+
// lookup walked, and this one walked the seed — a pointer always addresses
|
|
58
|
+
// `final` (the sdk's `check-state-path.ts` says why), so passing it through
|
|
59
|
+
// would send a reader into the tree the report does not render, at a path
|
|
60
|
+
// that may well resolve to an unrelated repo. The reason still names the miss.
|
|
56
61
|
const seedRepo = resolveRepo(seed, repo, "the seed state");
|
|
57
62
|
if ("missing" in seedRepo)
|
|
58
|
-
return {
|
|
63
|
+
return missOutcome({ ...seedRepo, searched: undefined });
|
|
59
64
|
const finalRepo = resolveRepo(final, repo, "state_final");
|
|
60
65
|
if ("missing" in finalRepo)
|
|
61
|
-
return
|
|
66
|
+
return missOutcome(finalRepo);
|
|
62
67
|
const before = labelNames(seedRepo.found);
|
|
63
68
|
const created = [...labelNames(finalRepo.found)].filter((name) => !before.has(name)).sort();
|
|
69
|
+
// F-1197 — the only seed+final check, and the one that shows why a pointer
|
|
70
|
+
// addresses `final` rather than the substrate the assertion ranges over.
|
|
71
|
+
// The delta is computed from two trees; the reader has ONE on screen. So the
|
|
72
|
+
// citation is the final definition set — the side a reader can look at — and
|
|
73
|
+
// the reason carries the comparison. Pointing into a seed nothing renders
|
|
74
|
+
// would move the dead affordance rather than remove it.
|
|
75
|
+
const definitions = [childStatePath(finalRepo.path, "labels")];
|
|
64
76
|
if (created.length === 0) {
|
|
65
77
|
return {
|
|
66
78
|
passed: true,
|
|
67
79
|
reason: `no labels were created in ${repo} (${before.size} defined at seed, unchanged at finish)`,
|
|
80
|
+
evidenceStatePaths: definitions,
|
|
68
81
|
};
|
|
69
82
|
}
|
|
70
83
|
return {
|
|
71
84
|
passed: false,
|
|
72
85
|
reason: `labels created in ${repo}: ${created.map((name) => `\`${name}\``).join(", ")}`,
|
|
86
|
+
evidenceStatePaths: definitions,
|
|
87
|
+
};
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
// F-1198. The sibling of `noNewLabels`, and it exists because the curriculum's
|
|
91
|
+
// hero lesson could not be graded without it: `support-triage` teaches "do not
|
|
92
|
+
// open a second issue for a bug that is already tracked", and until this check
|
|
93
|
+
// the only way to say that was `[model]`. An agent that comments on the right
|
|
94
|
+
// issue, posts the right link, AND ALSO files a duplicate scored 100 — which is
|
|
95
|
+
// τ-bench's necessary-but-not-sufficient caveat arriving in our own catalog
|
|
96
|
+
// (`docs/curriculum/failure-classes.md` §4.2, which names the rule we were
|
|
97
|
+
// breaking).
|
|
98
|
+
//
|
|
99
|
+
// Modelled on `noNewLabels` rather than invented: same delta substrate, same
|
|
100
|
+
// negative polarity, same "the repo is a selector" mutant argument. The one
|
|
101
|
+
// difference worth stating is WHAT is compared. Labels compare NAMES because a
|
|
102
|
+
// label is identified by its name; issues compare NUMBERS, because the number is
|
|
103
|
+
// the only field an examinee cannot choose — a duplicate issue may carry the
|
|
104
|
+
// same title, body and labels as the one it duplicates, and comparing any of
|
|
105
|
+
// those would let a duplicate hide behind its own likeness.
|
|
106
|
+
export const noNewIssues = defineCheck({
|
|
107
|
+
id: "github.no-new-issues",
|
|
108
|
+
description: "Compares the issue NUMBERS present in the seed against the final state, and fails when " +
|
|
109
|
+
"finish carries one the seed did not. Numbers, not titles: a duplicate issue usually " +
|
|
110
|
+
"carries the same title as the one it duplicates. It says nothing about what happened to " +
|
|
111
|
+
"the seeded issues — closing, relabelling or commenting on one all PASS this check, so " +
|
|
112
|
+
"pair it with `github.issue-state` or `github.issue-comment-contains` when those matter. " +
|
|
113
|
+
"Its natural use is the inverse of `github.issue-exists`: a task whose examinee must " +
|
|
114
|
+
"recognise that an issue already exists and NOT open another. Needs the seed: it is a " +
|
|
115
|
+
"delta, not a state assertion.",
|
|
116
|
+
// The repo is named for `noNewLabels`'s reason, one step stronger: without it
|
|
117
|
+
// the sentence reads as a claim about the whole world, and issue numbers are
|
|
118
|
+
// per-repository — `#2` in one repo has nothing to do with `#2` in another.
|
|
119
|
+
template: "No new issues were created in `{repo}`",
|
|
120
|
+
params: { repo: repoRef },
|
|
121
|
+
substrate: "seed+final",
|
|
122
|
+
// Passes on the untouched seed; only the examinee acting can break it.
|
|
123
|
+
polarity: () => "negative",
|
|
124
|
+
// Nothing is hunted inside free text, so there is nothing a redactor could
|
|
125
|
+
// delete out from under this check.
|
|
126
|
+
subject: () => null,
|
|
127
|
+
// Same admission `noNewLabels` makes: the repo SELECTS, it is not a scanned
|
|
128
|
+
// literal. Falsifying it moves the verdict to "repo not found" for a reason
|
|
129
|
+
// that never reaches the comparison — a clean bill this check did not earn.
|
|
130
|
+
vacuityMutant: () => null,
|
|
131
|
+
discriminatingWorlds: () => ({
|
|
132
|
+
passing: deltaWorld(repoState({ issues: [{ number: 1 }] }), repoState({ issues: [{ number: 1 }] })),
|
|
133
|
+
failing: deltaWorld(repoState({ issues: [{ number: 1 }] }), repoState({ issues: [{ number: 1 }, { number: 2 }] })),
|
|
134
|
+
}),
|
|
135
|
+
evaluate({ repo }, { seed, final }) {
|
|
136
|
+
// The engine guards this before calling; guarding here too means a consumer
|
|
137
|
+
// that forgets gets a named skip rather than a vacuous pass.
|
|
138
|
+
if (seed === null)
|
|
139
|
+
return { passed: false, reason: "seed_missing", status: "skipped" };
|
|
140
|
+
// The seed-side refusal cites nothing, for the reason `noNewLabels` states
|
|
141
|
+
// at the same line: a pointer always addresses `final`, so handing back one
|
|
142
|
+
// the lookup walked in the SEED would send a reader into a tree the report
|
|
143
|
+
// never renders. The reason still names the miss.
|
|
144
|
+
const seedRepo = resolveRepo(seed, repo, "the seed state");
|
|
145
|
+
if ("missing" in seedRepo)
|
|
146
|
+
return missOutcome({ ...seedRepo, searched: undefined });
|
|
147
|
+
const finalRepo = resolveRepo(final, repo, "state_final");
|
|
148
|
+
if ("missing" in finalRepo)
|
|
149
|
+
return missOutcome(finalRepo);
|
|
150
|
+
const before = issueNumbers(seedRepo.found);
|
|
151
|
+
const created = [...issueNumbers(finalRepo.found)]
|
|
152
|
+
.filter((number) => !before.has(number))
|
|
153
|
+
.sort((a, b) => a - b);
|
|
154
|
+
// The final issue LIST, not the rows that broke it — the same citation
|
|
155
|
+
// `noNewLabels` makes and for the same reason. The delta is computed from
|
|
156
|
+
// two trees and the reader has one on screen, so the honest pointer is the
|
|
157
|
+
// collection they can count for themselves; the reason carries the
|
|
158
|
+
// comparison. On a failure it is also the only pointer that resolves: the
|
|
159
|
+
// numbers named in the reason are exactly the rows the seed does not have.
|
|
160
|
+
const issues = [childStatePath(finalRepo.path, "issues")];
|
|
161
|
+
if (created.length === 0) {
|
|
162
|
+
return {
|
|
163
|
+
passed: true,
|
|
164
|
+
reason: `no issues were created in ${repo} (${before.size} at seed, unchanged at finish)`,
|
|
165
|
+
evidenceStatePaths: issues,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
passed: false,
|
|
170
|
+
reason: `issues created in ${repo}: ${created.map((number) => `#${number}`).join(", ")}`,
|
|
171
|
+
evidenceStatePaths: issues,
|
|
73
172
|
};
|
|
74
173
|
},
|
|
75
174
|
});
|
|
@@ -93,7 +192,7 @@ export const fileExists = defineCheck({
|
|
|
93
192
|
evaluate({ path, repo }, { final }) {
|
|
94
193
|
const found = resolveRepo(final, repo, "state_final");
|
|
95
194
|
if ("missing" in found)
|
|
96
|
-
return
|
|
195
|
+
return missOutcome(found);
|
|
97
196
|
const files = found.found.files ?? [];
|
|
98
197
|
const passed = files.some((file) => file.path === path);
|
|
99
198
|
return {
|
|
@@ -101,6 +200,7 @@ export const fileExists = defineCheck({
|
|
|
101
200
|
reason: passed
|
|
102
201
|
? `file exists at "${path}" in ${repo}`
|
|
103
202
|
: `no file found at "${path}" in ${repo} (${files.length} file(s) exported)`,
|
|
203
|
+
evidenceStatePaths: [childStatePath(found.path, "files")],
|
|
104
204
|
};
|
|
105
205
|
},
|
|
106
206
|
});
|
|
@@ -136,7 +236,7 @@ export const commitStatus = defineCheck({
|
|
|
136
236
|
evaluate({ context, repo, state }, { final }) {
|
|
137
237
|
const found = resolveRepo(final, repo, "state_final");
|
|
138
238
|
if ("missing" in found)
|
|
139
|
-
return
|
|
239
|
+
return missOutcome(found);
|
|
140
240
|
const candidates = (found.found.commit_statuses ?? []).filter((row) => row.context === context);
|
|
141
241
|
const passed = candidates.some((row) => (row.state ?? "").toLowerCase() === state);
|
|
142
242
|
return {
|
|
@@ -145,6 +245,11 @@ export const commitStatus = defineCheck({
|
|
|
145
245
|
? `commit status "${context}" is "${state}" in ${repo}`
|
|
146
246
|
: `no commit status "${context}" with state "${state}" in ${repo} ` +
|
|
147
247
|
`(found: [${candidates.map((row) => row.state).join(", ")}])`,
|
|
248
|
+
// Every status row, not the filtered candidates. The filter is part of the
|
|
249
|
+
// assertion — "which commit" is explicitly not asserted — and a pointer at
|
|
250
|
+
// a set this check computed rather than a set the tree holds would address
|
|
251
|
+
// nothing a reader could open.
|
|
252
|
+
evidenceStatePaths: [childStatePath(found.path, "commit_statuses")],
|
|
148
253
|
};
|
|
149
254
|
},
|
|
150
255
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-repos.js","sourceRoot":"","sources":["../../src/check-repos.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,yEAAyE;AACzE,2EAA2E;AAC3E,EAAE;AACF,+EAA+E;AAC/E,wEAAwE;AAExE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"check-repos.js","sourceRoot":"","sources":["../../src/check-repos.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type CheckOutcome } from "@pome-sh/sdk/checks";
|
|
1
2
|
export interface GitHubCheckStateLabel {
|
|
2
3
|
name?: string;
|
|
3
4
|
}
|
|
@@ -42,13 +43,32 @@ export interface GitHubCheckStateRepo {
|
|
|
42
43
|
export interface GitHubCheckState {
|
|
43
44
|
repositories?: GitHubCheckStateRepo[] | null;
|
|
44
45
|
}
|
|
45
|
-
export declare function findRepo(state: GitHubCheckState, ref: string):
|
|
46
|
+
export declare function findRepo(state: GitHubCheckState, ref: string): {
|
|
47
|
+
repo: GitHubCheckStateRepo;
|
|
48
|
+
index: number;
|
|
49
|
+
} | null;
|
|
50
|
+
export declare function issueNumbers(repo: GitHubCheckStateRepo): Set<number>;
|
|
46
51
|
export declare function labelNames(repo: GitHubCheckStateRepo): Set<string>;
|
|
47
52
|
export type Resolved<T> = {
|
|
48
53
|
found: T;
|
|
54
|
+
path: string;
|
|
49
55
|
} | {
|
|
50
56
|
missing: string;
|
|
57
|
+
searched?: string;
|
|
51
58
|
};
|
|
59
|
+
/**
|
|
60
|
+
* The `failed` outcome a missing entity produces, citing where the lookup
|
|
61
|
+
* looked.
|
|
62
|
+
*
|
|
63
|
+
* One function rather than a conditional spread at every `if ("missing" in …)`
|
|
64
|
+
* site, because the rule it encodes — cite the searched collection, cite nothing
|
|
65
|
+
* when there was none — is one rule, and twelve hand-written copies of it is
|
|
66
|
+
* twelve chances for one to quietly drop the citation.
|
|
67
|
+
*/
|
|
68
|
+
export declare function missOutcome(miss: {
|
|
69
|
+
missing: string;
|
|
70
|
+
searched?: string;
|
|
71
|
+
}): CheckOutcome;
|
|
52
72
|
export declare function resolveRepo(state: GitHubCheckState, ref: string, where: string): Resolved<GitHubCheckStateRepo>;
|
|
53
73
|
export declare function resolveIssue(state: GitHubCheckState, ref: string, number: string): Resolved<GitHubCheckStateIssue>;
|
|
54
74
|
export declare function resolvePullRequest(state: GitHubCheckState, ref: string, number: string): Resolved<GitHubCheckStatePullRequest>;
|