@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-state.js","sourceRoot":"","sources":["../../src/check-state.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,EAAE;AACF,4DAA4D;AAC5D,+EAA+E;AAC/E,wEAAwE;AACxE,EAAE;AACF,8EAA8E;AAC9E,6DAA6D;AAC7D,gFAAgF;AAChF,iFAAiF;AACjF,oBAAoB;AACpB,8EAA8E;AAC9E,+EAA+E;AAC/E,oCAAoC;AACpC,EAAE;AACF,8EAA8E;AAC9E,iFAAiF;AACjF,6EAA6E;AAC7E,4EAA4E;AAC5E,4EAA4E;AAC5E,+CAA+C;AAC/C,EAAE;AACF,wEAAwE;AACxE,6EAA6E;AAC7E,8EAA8E;AAC9E,+EAA+E;AAC/E,4EAA4E;AAC5E,4EAA4E;AAC5E,iFAAiF;AACjF,qEAAqE;AACrE,+DAA+D;AAC/D,+EAA+E;AAC/E,8EAA8E;AAC9E,4EAA4E;
|
|
1
|
+
{"version":3,"file":"check-state.js","sourceRoot":"","sources":["../../src/check-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pome-sh/twin-gmail",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.3",
|
|
4
4
|
"description": "Deterministic Gmail-shaped twin for agent testing — SQLite-backed domain core.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
|
@@ -47,10 +47,10 @@
|
|
|
47
47
|
"access": "public"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@hono/node-server": "^2.0
|
|
51
|
-
"@pome-sh/sdk": "0.
|
|
52
|
-
"hono": "^4.
|
|
53
|
-
"zod": "^4.
|
|
50
|
+
"@hono/node-server": "^2.1.0",
|
|
51
|
+
"@pome-sh/sdk": "0.11.1",
|
|
52
|
+
"hono": "^4.13.0",
|
|
53
|
+
"zod": "^4.4.3"
|
|
54
54
|
},
|
|
55
55
|
"keywords": [
|
|
56
56
|
"gmail",
|
|
@@ -1,5 +1,41 @@
|
|
|
1
1
|
# @pome-sh/twin-linear — CHANGELOG
|
|
2
2
|
|
|
3
|
+
|
|
4
|
+
## 0.3.3 — 2026-08-04
|
|
5
|
+
|
|
6
|
+
Dependency-only patch (#302): `hono` `^4.12.31` → `^4.13.0`, `zod` `^4.1.13` → `^4.4.3`, `@hono/node-server` `^2.0.10` → `^2.1.0`.
|
|
7
|
+
No source file changed and `npm run test:contract` is green, so the surface is
|
|
8
|
+
identical — this exists so the npm artifact stops differing from `main`, which is
|
|
9
|
+
the staleness the publish skip-guard cannot see.
|
|
10
|
+
|
|
11
|
+
## 0.3.2 — 2026-08-04
|
|
12
|
+
|
|
13
|
+
- Re-pinned to `@pome-sh/sdk@0.11.0` for the F-1200 parent-vocabulary
|
|
14
|
+
change: a recorded row now carries `parent_event_id` rather than `parent_id`.
|
|
15
|
+
No change to this twin's own surface — `npm run test:contract` is green.
|
|
16
|
+
|
|
17
|
+
## 0.3.1 — 2026-08-03
|
|
18
|
+
|
|
19
|
+
Every state-reading check says where it looked (F-1197).
|
|
20
|
+
|
|
21
|
+
- 7 declarations now fill `CheckOutcome.evidenceStatePaths` (new in
|
|
22
|
+
`@pome-sh/sdk` 0.10.1) with RFC 6901 pointers into this twin's exported tree.
|
|
23
|
+
- `check-state.ts`'s resolvers return the pointer they walked. `Resolved<T>`'s
|
|
24
|
+
found arm gains `path`; its missing arm gains an optional `searched`, naming
|
|
25
|
+
the collection a failed lookup scanned.
|
|
26
|
+
- `checks-contract.test.ts` gains the citation gate and an EMPTY
|
|
27
|
+
`HONEST_UNCITED_CHECKS` ledger.
|
|
28
|
+
|
|
29
|
+
A failed lookup cites too, and that is the half worth knowing about. A title that resolves to nothing, or to two issues, is the refusal task 26 turns on.
|
|
30
|
+
So the honest citation on that arm is not the row — there is none — but the list:
|
|
31
|
+
*this is where I looked, see for yourself that it is not in it.*
|
|
32
|
+
|
|
33
|
+
Requires `@pome-sh/sdk` 0.10.1: the declarations call `statePath` /
|
|
34
|
+
`childStatePath`, which 0.10.0 does not export.
|
|
35
|
+
|
|
36
|
+
No sentence, template, substrate or check id changed, so `checksDigest` is
|
|
37
|
+
identical and no criterion re-binds.
|
|
38
|
+
|
|
3
39
|
## 0.3.0 — 2026-08-02
|
|
4
40
|
|
|
5
41
|
**BREAKING RELEASE — read this before upgrading.** Two things a consumer must
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
// sentence cannot reach into the seed for an identifier it never typed.
|
|
17
17
|
import { defineCheck, VACUITY_SENTINEL } from "@pome-sh/sdk/checks";
|
|
18
18
|
import { commentNeedle, issueTitle, teamKey } from "./check-params.js";
|
|
19
|
-
import { resolveComments, resolveIssue, unresolved } from "./check-state.js";
|
|
19
|
+
import { COMMENTS_PATH, resolveComments, resolveIssue, unresolved } from "./check-state.js";
|
|
20
20
|
import { deltaWorld, finalWorld, issueRow, linearState } from "./check-worlds.js";
|
|
21
21
|
export const issueCommentContains = defineCheck({
|
|
22
22
|
id: "linear.issue-comment-contains",
|
|
@@ -59,6 +59,7 @@ export const issueCommentContains = defineCheck({
|
|
|
59
59
|
reason: hit
|
|
60
60
|
? `a comment contains "${needle}"`
|
|
61
61
|
: `no comment contains "${needle}" (${comments.found.length} comment(s) scanned)`,
|
|
62
|
+
evidenceStatePaths: [comments.path],
|
|
62
63
|
};
|
|
63
64
|
},
|
|
64
65
|
});
|
|
@@ -93,12 +94,18 @@ export const issueThreadedReply = defineCheck({
|
|
|
93
94
|
// consumer that forgets gets a named skip rather than a vacuous pass.
|
|
94
95
|
if (seed === null)
|
|
95
96
|
return { passed: false, reason: "seed_missing", status: "skipped" };
|
|
97
|
+
// SEED-side refusals cite nothing, deliberately. `unresolved` carries the
|
|
98
|
+
// pointer the lookup walked, and these two walked the SEED — a pointer
|
|
99
|
+
// always addresses `final` (see the sdk's `check-state-path.ts`), so passing
|
|
100
|
+
// one through here would send a reader into the tree the report does not
|
|
101
|
+
// render, at a path that may well resolve to something unrelated. Dropping
|
|
102
|
+
// the citation is the honest degradation; the reason still names the miss.
|
|
96
103
|
const seedIssue = resolveIssue(seed, team, title);
|
|
97
104
|
if ("missing" in seedIssue)
|
|
98
|
-
return unresolved(seedIssue);
|
|
105
|
+
return unresolved({ ...seedIssue, searched: undefined });
|
|
99
106
|
const seedComments = resolveComments(seed, seedIssue.found);
|
|
100
107
|
if ("missing" in seedComments)
|
|
101
|
-
return unresolved(seedComments);
|
|
108
|
+
return unresolved({ ...seedComments, searched: undefined });
|
|
102
109
|
const seeded = new Set(seedComments.found.map((c) => c.id).filter((id) => typeof id === "string"));
|
|
103
110
|
const finalIssue = resolveIssue(final, team, title);
|
|
104
111
|
if ("missing" in finalIssue)
|
|
@@ -111,6 +118,11 @@ export const issueThreadedReply = defineCheck({
|
|
|
111
118
|
passed: replies.length > 0,
|
|
112
119
|
reason: `${replies.length} repl${replies.length === 1 ? "y" : "ies"} to a seeded comment ` +
|
|
113
120
|
`(${seeded.size} seeded comment(s), ${finalComments.found.length} at finish)`,
|
|
121
|
+
// The FINAL comment list only. This is a delta over two trees and the
|
|
122
|
+
// reader has one on screen; a pointer into the seed would send them to the
|
|
123
|
+
// tree the report does not render (see the sdk's `check-state-path.ts`).
|
|
124
|
+
// The reason carries the seed side.
|
|
125
|
+
evidenceStatePaths: [COMMENTS_PATH],
|
|
114
126
|
};
|
|
115
127
|
},
|
|
116
128
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-comments.js","sourceRoot":"","sources":["../../src/check-comments.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,oEAAoE;AACpE,EAAE;AACF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,4EAA4E;AAC5E,6EAA6E;AAC7E,2EAA2E;AAC3E,kBAAkB;AAClB,EAAE;AACF,yDAAyD;AACzD,6EAA6E;AAC7E,0EAA0E;AAC1E,wEAAwE;AAExE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"check-comments.js","sourceRoot":"","sources":["../../src/check-comments.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
// Recorded as this migration's one narrowing rather than absorbed.
|
|
33
33
|
import { defineCheck, VACUITY_SENTINEL, VACUITY_SENTINEL_NUMBER } from "@pome-sh/sdk/checks";
|
|
34
34
|
import { estimatePoints, issueTitle, labelName, teamKey, userRef, workflowStateName, } from "./check-params.js";
|
|
35
|
-
import { resolveIssue, resolveLabelNames, resolveUserLabels, resolveWorkflowStateName, unresolved, } from "./check-state.js";
|
|
35
|
+
import { fieldPath, resolveIssue, resolveLabelNames, resolveUserLabels, resolveWorkflowStateName, unresolved, USERS_PATH, } from "./check-state.js";
|
|
36
36
|
import { finalWorld, issueRow, linearState } from "./check-worlds.js";
|
|
37
37
|
export const issueExists = defineCheck({
|
|
38
38
|
id: "linear.issue-exists",
|
|
@@ -65,7 +65,13 @@ export const issueExists = defineCheck({
|
|
|
65
65
|
// Echoing the title is safe HERE and only here: this check declares it as
|
|
66
66
|
// its subject, so the engine skipped the criterion as `subject_redacted`
|
|
67
67
|
// before reaching this line if a redactor would have destroyed it.
|
|
68
|
-
|
|
68
|
+
// The ROW itself: here the lookup IS the assertion, so the address the
|
|
69
|
+
// resolution walked to is exactly what produced the verdict (F-1197).
|
|
70
|
+
return {
|
|
71
|
+
passed: true,
|
|
72
|
+
reason: `an issue titled "${title}" exists in \`${team}\``,
|
|
73
|
+
evidenceStatePaths: [issue.path],
|
|
74
|
+
};
|
|
69
75
|
},
|
|
70
76
|
});
|
|
71
77
|
export const issueState = defineCheck({
|
|
@@ -107,6 +113,11 @@ export const issueState = defineCheck({
|
|
|
107
113
|
return {
|
|
108
114
|
passed: name.found.toLowerCase() === state.toLowerCase(),
|
|
109
115
|
reason: `issue state is "${name.found}" (wanted "${state}")`,
|
|
116
|
+
// BOTH ends of trap 1's join. An issue has no state string — it has a
|
|
117
|
+
// `stateId` into the team's own workflow catalog — so a reader handed only
|
|
118
|
+
// the issue row would find an opaque id, and one handed only the catalog
|
|
119
|
+
// row would not know which issue pointed at it.
|
|
120
|
+
evidenceStatePaths: [fieldPath(issue.path, issue.found, "stateId"), name.path],
|
|
110
121
|
};
|
|
111
122
|
},
|
|
112
123
|
});
|
|
@@ -138,6 +149,8 @@ export const issueHasLabel = defineCheck({
|
|
|
138
149
|
return {
|
|
139
150
|
passed: names.found.has(label.toLowerCase()),
|
|
140
151
|
reason: `issue carries ${names.found.size} label(s) (wanted "${label}")`,
|
|
152
|
+
// Trap 2's join, both ends: `labelIds` on the row, names in the catalog.
|
|
153
|
+
evidenceStatePaths: [fieldPath(issue.path, issue.found, "labelIds"), names.path],
|
|
141
154
|
};
|
|
142
155
|
},
|
|
143
156
|
});
|
|
@@ -172,6 +185,11 @@ export const issueEstimate = defineCheck({
|
|
|
172
185
|
return {
|
|
173
186
|
passed: actual === Number(estimate),
|
|
174
187
|
reason: `issue estimate is ${actual === null ? "unset" : actual} (wanted ${estimate})`,
|
|
188
|
+
// `fieldPath`, not a bare `…/estimate`: an UNSET estimate is the verdict
|
|
189
|
+
// this check exists to deliver, and on an export that omits the column
|
|
190
|
+
// entirely a pointer at it would resolve to nothing — stripping the
|
|
191
|
+
// affordance from exactly the row a reader wants to open.
|
|
192
|
+
evidenceStatePaths: [fieldPath(issue.path, issue.found, "estimate")],
|
|
175
193
|
};
|
|
176
194
|
},
|
|
177
195
|
});
|
|
@@ -199,12 +217,21 @@ export const issueAssignee = defineCheck({
|
|
|
199
217
|
if ("missing" in issue)
|
|
200
218
|
return unresolved(issue);
|
|
201
219
|
const labels = resolveUserLabels(final, issue.found.assigneeId);
|
|
202
|
-
|
|
203
|
-
|
|
220
|
+
// The issue row on both arms. An unassigned issue has no user row to point
|
|
221
|
+
// at, so citing `/users` only when one resolved would make the citation's
|
|
222
|
+
// PRESENCE track the verdict — and its absence would start reading as
|
|
223
|
+
// "unassigned", which is a verdict class the pointer must not encode.
|
|
224
|
+
const assignment = [fieldPath(issue.path, issue.found, "assigneeId")];
|
|
225
|
+
if (labels.length === 0) {
|
|
226
|
+
return { passed: false, reason: "issue has no assignee", evidenceStatePaths: assignment };
|
|
227
|
+
}
|
|
228
|
+
if (final.users != null)
|
|
229
|
+
assignment.push(USERS_PATH);
|
|
204
230
|
return {
|
|
205
231
|
passed: labels.some((l) => l.toLowerCase() === user.toLowerCase()),
|
|
206
232
|
// Safe to quote: `user` is this check's declared subject.
|
|
207
233
|
reason: `issue is assigned to \`${labels[0]}\` (wanted \`${user}\`)`,
|
|
234
|
+
evidenceStatePaths: assignment,
|
|
208
235
|
};
|
|
209
236
|
},
|
|
210
237
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-issues.js","sourceRoot":"","sources":["../../src/check-issues.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,wEAAwE;AACxE,EAAE;AACF,4EAA4E;AAC5E,6EAA6E;AAC7E,qEAAqE;AACrE,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,8EAA8E;AAC9E,+EAA+E;AAC/E,iFAAiF;AACjF,+CAA+C;AAC/C,6EAA6E;AAC7E,gFAAgF;AAChF,4EAA4E;AAC5E,8EAA8E;AAC9E,eAAe;AACf,wEAAwE;AACxE,0EAA0E;AAC1E,iFAAiF;AACjF,8EAA8E;AAC9E,6EAA6E;AAC7E,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,4EAA4E;AAC5E,8EAA8E;AAC9E,2EAA2E;AAC3E,0EAA0E;AAC1E,mEAAmE;AAEnE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE7F,OAAO,EACL,cAAc,EACd,UAAU,EACV,SAAS,EACT,OAAO,EACP,OAAO,EACP,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,EACxB,UAAU,GACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEtE,MAAM,CAAC,MAAM,WAAW,GAA2C,WAAW,CAAC;IAC7E,EAAE,EAAE,qBAAqB;IACzB,WAAW,EACT,2FAA2F;QAC3F,6FAA6F;QAC7F,0FAA0F;QAC1F,6FAA6F;QAC7F,0FAA0F;QAC1F,sEAAsE;IACxE,QAAQ,EAAE,8CAA8C;IACxD,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE;IAC5C,SAAS,EAAE,OAAO;IAClB,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU;IAC1B,4EAA4E;IAC5E,0EAA0E;IAC1E,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK;IAC7B,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC/D,oBAAoB,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACpC,0EAA0E;QAC1E,2EAA2E;QAC3E,4EAA4E;QAC5E,sBAAsB;QACtB,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnD,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC;KAC3E,CAAC;IACF,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE;QACjC,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC/C,IAAI,SAAS,IAAI,KAAK;YAAE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;QACjD,0EAA0E;QAC1E,yEAAyE;QACzE,mEAAmE;QACnE,OAAO,
|
|
1
|
+
{"version":3,"file":"check-issues.js","sourceRoot":"","sources":["../../src/check-issues.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type CheckOutcome } from "@pome-sh/sdk/checks";
|
|
2
2
|
export interface LinearCheckStateTeam {
|
|
3
3
|
id?: string;
|
|
4
4
|
key?: string;
|
|
@@ -63,14 +63,39 @@ export interface LinearCheckState {
|
|
|
63
63
|
*/
|
|
64
64
|
export type Resolved<T> = {
|
|
65
65
|
found: T;
|
|
66
|
+
path: string;
|
|
66
67
|
} | {
|
|
67
68
|
missing: string;
|
|
68
69
|
skip: boolean;
|
|
70
|
+
searched?: string;
|
|
69
71
|
};
|
|
70
|
-
/** The
|
|
72
|
+
/** The exported collections a pointer can address (F-1197). Named because seven
|
|
73
|
+
* declarations reach for them. */
|
|
74
|
+
export declare const ISSUES_PATH: string;
|
|
75
|
+
export declare const COMMENTS_PATH: string;
|
|
76
|
+
export declare const LABELS_PATH: string;
|
|
77
|
+
export declare const WORKFLOW_STATES_PATH: string;
|
|
78
|
+
export declare const USERS_PATH: string;
|
|
79
|
+
/**
|
|
80
|
+
* A pointer at `key` on the row `base` addresses, falling back to the row when
|
|
81
|
+
* the export does not carry that key (F-1197).
|
|
82
|
+
*
|
|
83
|
+
* The fallback is the whole point and it is not defensive padding. An UNSET
|
|
84
|
+
* estimate and an ABSENT assignee are both real, common, and exactly the
|
|
85
|
+
* verdicts a reader wants to inspect — and a pointer at a key the row does not
|
|
86
|
+
* have resolves to nothing, which would strip the affordance from precisely
|
|
87
|
+
* those rows. Widening to the row keeps the citation honest (it is where the
|
|
88
|
+
* check looked) and resolvable (the row is there).
|
|
89
|
+
*/
|
|
90
|
+
export declare function fieldPath(base: string, row: object, key: string): string;
|
|
91
|
+
/** The one place an unresolved selector becomes an outcome.
|
|
92
|
+
*
|
|
93
|
+
* F-1197 — it also carries the citation, so the rule "a refusal names where it
|
|
94
|
+
* looked" is written once rather than at fourteen call sites. */
|
|
71
95
|
export declare function unresolved(r: {
|
|
72
96
|
missing: string;
|
|
73
97
|
skip: boolean;
|
|
98
|
+
searched?: string;
|
|
74
99
|
}): CheckOutcome;
|
|
75
100
|
export declare function isTruncated(state: LinearCheckState, collection: string): boolean;
|
|
76
101
|
/**
|
|
@@ -39,11 +39,39 @@
|
|
|
39
39
|
// runs (`evaluate.ts:141-144`), and `title` is a selector on every check except
|
|
40
40
|
// `linear.issue-exists`. The team key is safe to quote: `[A-Z][A-Z0-9]*`
|
|
41
41
|
// matches no pattern in either redactor.
|
|
42
|
-
|
|
42
|
+
import { childStatePath, statePath } from "@pome-sh/sdk/checks";
|
|
43
|
+
/** The exported collections a pointer can address (F-1197). Named because seven
|
|
44
|
+
* declarations reach for them. */
|
|
45
|
+
export const ISSUES_PATH = statePath("issues");
|
|
46
|
+
export const COMMENTS_PATH = statePath("comments");
|
|
47
|
+
export const LABELS_PATH = statePath("labels");
|
|
48
|
+
export const WORKFLOW_STATES_PATH = statePath("workflowStates");
|
|
49
|
+
export const USERS_PATH = statePath("users");
|
|
50
|
+
/**
|
|
51
|
+
* A pointer at `key` on the row `base` addresses, falling back to the row when
|
|
52
|
+
* the export does not carry that key (F-1197).
|
|
53
|
+
*
|
|
54
|
+
* The fallback is the whole point and it is not defensive padding. An UNSET
|
|
55
|
+
* estimate and an ABSENT assignee are both real, common, and exactly the
|
|
56
|
+
* verdicts a reader wants to inspect — and a pointer at a key the row does not
|
|
57
|
+
* have resolves to nothing, which would strip the affordance from precisely
|
|
58
|
+
* those rows. Widening to the row keeps the citation honest (it is where the
|
|
59
|
+
* check looked) and resolvable (the row is there).
|
|
60
|
+
*/
|
|
61
|
+
export function fieldPath(base, row, key) {
|
|
62
|
+
return Object.prototype.hasOwnProperty.call(row, key) ? childStatePath(base, key) : base;
|
|
63
|
+
}
|
|
64
|
+
/** The one place an unresolved selector becomes an outcome.
|
|
65
|
+
*
|
|
66
|
+
* F-1197 — it also carries the citation, so the rule "a refusal names where it
|
|
67
|
+
* looked" is written once rather than at fourteen call sites. */
|
|
43
68
|
export function unresolved(r) {
|
|
44
|
-
|
|
69
|
+
const outcome = r.skip
|
|
45
70
|
? { passed: false, status: "skipped", reason: r.missing }
|
|
46
71
|
: { passed: false, reason: r.missing };
|
|
72
|
+
if (r.searched === undefined)
|
|
73
|
+
return outcome;
|
|
74
|
+
return { ...outcome, evidenceStatePaths: [r.searched] };
|
|
47
75
|
}
|
|
48
76
|
export function isTruncated(state, collection) {
|
|
49
77
|
return (state.exportBounds?.truncatedCollections ?? []).includes(collection);
|
|
@@ -59,35 +87,53 @@ export function resolveIssue(state, teamKey, title) {
|
|
|
59
87
|
return { missing: "state_incomplete", skip: true };
|
|
60
88
|
const team = state.teams.find((t) => t.key === teamKey);
|
|
61
89
|
if (team?.id == null) {
|
|
62
|
-
return {
|
|
90
|
+
return {
|
|
91
|
+
missing: `team \`${teamKey}\` not found in state_final`,
|
|
92
|
+
skip: false,
|
|
93
|
+
searched: statePath("teams"),
|
|
94
|
+
};
|
|
63
95
|
}
|
|
64
96
|
if (state.issues == null)
|
|
65
97
|
return { missing: "state_incomplete", skip: true };
|
|
66
|
-
const
|
|
67
|
-
issue.title === title &&
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
if (
|
|
98
|
+
const indices = state.issues
|
|
99
|
+
.map((issue, index) => issue.teamId === team.id && issue.title === title && (issue.archivedAt ?? null) === null
|
|
100
|
+
? index
|
|
101
|
+
: -1)
|
|
102
|
+
.filter((index) => index >= 0);
|
|
103
|
+
if (indices.length === 1) {
|
|
104
|
+
const index = indices[0];
|
|
105
|
+
return { found: state.issues[index], path: childStatePath(ISSUES_PATH, index) };
|
|
106
|
+
}
|
|
107
|
+
if (indices.length > 1) {
|
|
108
|
+
// The AMBIGUITY is the finding, so the citation is the collection: naming
|
|
109
|
+
// one of the duplicates would present a coin-flip as the thing that was read.
|
|
72
110
|
return {
|
|
73
|
-
missing: `${
|
|
111
|
+
missing: `${indices.length} issues in \`${teamKey}\` share that title`,
|
|
74
112
|
skip: false,
|
|
113
|
+
searched: ISSUES_PATH,
|
|
75
114
|
};
|
|
76
115
|
}
|
|
77
116
|
// The only skip a miss can earn, and it is earned by evidence rather than by
|
|
78
117
|
// taste: the twin itself reported that `issues` lost rows to the export cap.
|
|
79
|
-
if (isTruncated(state, "issues"))
|
|
80
|
-
return { missing: "state_truncated", skip: true };
|
|
81
|
-
|
|
118
|
+
if (isTruncated(state, "issues")) {
|
|
119
|
+
return { missing: "state_truncated", skip: true, searched: ISSUES_PATH };
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
missing: `no issue with that title in \`${teamKey}\``,
|
|
123
|
+
skip: false,
|
|
124
|
+
searched: ISSUES_PATH,
|
|
125
|
+
};
|
|
82
126
|
}
|
|
83
127
|
/** Trap 1: `stateId` → the team's own workflow-state row. */
|
|
84
128
|
export function resolveWorkflowStateName(state, issue) {
|
|
85
129
|
if (state.workflowStates == null)
|
|
86
130
|
return { missing: "state_incomplete", skip: true };
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
131
|
+
const index = state.workflowStates.findIndex((s) => s.id === issue.stateId && s.teamId === issue.teamId);
|
|
132
|
+
const row = index >= 0 ? state.workflowStates[index] : undefined;
|
|
133
|
+
if (row?.name == null) {
|
|
134
|
+
return { missing: "workflow_state_unresolved", skip: true, searched: WORKFLOW_STATES_PATH };
|
|
135
|
+
}
|
|
136
|
+
return { found: row.name, path: childStatePath(WORKFLOW_STATES_PATH, index, "name") };
|
|
91
137
|
}
|
|
92
138
|
/**
|
|
93
139
|
* Trap 2: `labelIds` → catalog names, lowercased.
|
|
@@ -105,15 +151,22 @@ export function resolveLabelNames(state, issue) {
|
|
|
105
151
|
// A link to a label the export did not carry is a partial export, not a
|
|
106
152
|
// verdict about the examinee.
|
|
107
153
|
if (name === undefined)
|
|
108
|
-
return { missing: "label_unresolved", skip: true };
|
|
154
|
+
return { missing: "label_unresolved", skip: true, searched: LABELS_PATH };
|
|
109
155
|
names.add(name);
|
|
110
156
|
}
|
|
111
|
-
|
|
157
|
+
// The CATALOG this join read. The resolved name set is computed here and
|
|
158
|
+
// exists nowhere in the tree, so the catalog is the honest address — and it is
|
|
159
|
+
// the half of the join a reader cannot see from the issue row, which carries
|
|
160
|
+
// ids only.
|
|
161
|
+
return { found: names, path: LABELS_PATH };
|
|
112
162
|
}
|
|
113
163
|
export function resolveComments(state, issue) {
|
|
114
164
|
if (state.comments == null)
|
|
115
165
|
return { missing: "state_incomplete", skip: true };
|
|
116
|
-
|
|
166
|
+
// `/comments`, the SOURCE collection, not the filtered result: the export
|
|
167
|
+
// stores comments flat and keys them by `issueId`, so the per-issue list this
|
|
168
|
+
// returns exists nowhere in the tree to point at.
|
|
169
|
+
return { found: state.comments.filter((c) => c.issueId === issue.id), path: COMMENTS_PATH };
|
|
117
170
|
}
|
|
118
171
|
/**
|
|
119
172
|
* Every spelling of a user the legacy `linear.issue-assignee` rule accepted —
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-state.js","sourceRoot":"","sources":["../../src/check-state.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,qEAAqE;AACrE,EAAE;AACF,8EAA8E;AAC9E,gFAAgF;AAChF,6EAA6E;AAC7E,2EAA2E;AAC3E,+EAA+E;AAC/E,gFAAgF;AAChF,8EAA8E;AAC9E,iBAAiB;AACjB,EAAE;AACF,wEAAwE;AACxE,EAAE;AACF,kEAAkE;AAClE,+EAA+E;AAC/E,gFAAgF;AAChF,4EAA4E;AAC5E,wEAAwE;AACxE,8EAA8E;AAC9E,8CAA8C;AAC9C,+EAA+E;AAC/E,8EAA8E;AAC9E,uDAAuD;AACvD,kEAAkE;AAClE,+EAA+E;AAC/E,+EAA+E;AAC/E,yEAAyE;AACzE,0EAA0E;AAC1E,uEAAuE;AACvE,2EAA2E;AAC3E,4EAA4E;AAC5E,+EAA+E;AAC/E,6CAA6C;AAC7C,EAAE;AACF,0EAA0E;AAC1E,4EAA4E;AAC5E,gFAAgF;AAChF,yEAAyE;AACzE,yCAAyC;
|
|
1
|
+
{"version":3,"file":"check-state.js","sourceRoot":"","sources":["../../src/check-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pome-sh/twin-linear",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.3",
|
|
4
4
|
"description": "Deterministic Linear-shaped twin for agent testing — SQLite-backed GraphQL + MCP + OAuth.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
|
@@ -41,11 +41,11 @@
|
|
|
41
41
|
"access": "public"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@hono/node-server": "^2.0
|
|
45
|
-
"@pome-sh/sdk": "0.
|
|
44
|
+
"@hono/node-server": "^2.1.0",
|
|
45
|
+
"@pome-sh/sdk": "0.11.1",
|
|
46
46
|
"graphql": "^16.11.0",
|
|
47
|
-
"hono": "^4.
|
|
48
|
-
"zod": "^4.
|
|
47
|
+
"hono": "^4.13.0",
|
|
48
|
+
"zod": "^4.4.3"
|
|
49
49
|
},
|
|
50
50
|
"keywords": [
|
|
51
51
|
"linear",
|
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
// two-repo world graded whichever sorted first. A Slack session is one workspace
|
|
25
25
|
// with unique channel names, so there is no ambiguous selection for a scope slot
|
|
26
26
|
// to close.
|
|
27
|
-
import { defineCheck, VACUITY_SENTINEL } from "@pome-sh/sdk/checks";
|
|
27
|
+
import { childStatePath, defineCheck, statePath, VACUITY_SENTINEL } from "@pome-sh/sdk/checks";
|
|
28
28
|
import { channelName, emojiName, messageNeedle, messageScope } from "./check-params.js";
|
|
29
|
-
import { publicChannels, resolveChannel } from "./check-state.js";
|
|
29
|
+
import { CHANNELS_PATH, missSkip, publicChannels, resolveChannel, } from "./check-state.js";
|
|
30
30
|
import { finalWorld, publicChannel, slackState } from "./check-worlds.js";
|
|
31
31
|
const STATE_INCOMPLETE = { passed: false, status: "skipped", reason: "state_incomplete" };
|
|
32
32
|
export const noMessageContaining = defineCheck({
|
|
@@ -61,7 +61,7 @@ export const noMessageContaining = defineCheck({
|
|
|
61
61
|
if (publicOnly) {
|
|
62
62
|
const scoped = publicChannels(final);
|
|
63
63
|
if ("missing" in scoped)
|
|
64
|
-
return
|
|
64
|
+
return missSkip(scoped);
|
|
65
65
|
candidates = scoped.found;
|
|
66
66
|
}
|
|
67
67
|
else {
|
|
@@ -77,6 +77,13 @@ export const noMessageContaining = defineCheck({
|
|
|
77
77
|
? `${publicOnly ? "public " : ""}channel "${hit.name}" has a message containing "${needle}"`
|
|
78
78
|
: `no ${publicOnly ? "public channel" : "channel"} has a message containing "${needle}" ` +
|
|
79
79
|
`(${candidates.length} channel(s) scanned)`,
|
|
80
|
+
// The workspace's channel list, on BOTH arms and under both scopes
|
|
81
|
+
// (F-1197). Not the hitting channel on a fail and the list on a pass:
|
|
82
|
+
// a citation whose PRECISION moves with the verdict is fine, but one whose
|
|
83
|
+
// PRESENCE does is not, and once both arms must cite, the list is the
|
|
84
|
+
// honest answer under `any public channel` too — the public set is
|
|
85
|
+
// computed here and exists nowhere in the tree to point at.
|
|
86
|
+
evidenceStatePaths: [CHANNELS_PATH],
|
|
80
87
|
};
|
|
81
88
|
},
|
|
82
89
|
});
|
|
@@ -109,9 +116,13 @@ export const noMessagePosted = defineCheck({
|
|
|
109
116
|
evaluate({ channel }, { final }) {
|
|
110
117
|
const found = resolveChannel(final, channel);
|
|
111
118
|
if ("missing" in found)
|
|
112
|
-
return
|
|
119
|
+
return missSkip(found);
|
|
113
120
|
const count = (found.found.messages ?? []).length;
|
|
114
|
-
return {
|
|
121
|
+
return {
|
|
122
|
+
passed: count === 0,
|
|
123
|
+
reason: `channel "${channel}" has ${count} message(s)`,
|
|
124
|
+
evidenceStatePaths: [childStatePath(found.path, "messages")],
|
|
125
|
+
};
|
|
115
126
|
},
|
|
116
127
|
});
|
|
117
128
|
export const noReactionAdded = defineCheck({
|
|
@@ -138,13 +149,22 @@ export const noReactionAdded = defineCheck({
|
|
|
138
149
|
evaluate({ reaction, channel }, { final }) {
|
|
139
150
|
const found = resolveChannel(final, channel);
|
|
140
151
|
if ("missing" in found)
|
|
141
|
-
return
|
|
152
|
+
return missSkip(found);
|
|
142
153
|
const hit = (final.reactions ?? []).some((row) => row.channel_id === found.found.id && row.name === reaction);
|
|
154
|
+
// BOTH sides of the join, because this predicate really does read two places
|
|
155
|
+
// and a reader who opens only one cannot check its work: the channel row is
|
|
156
|
+
// where the id came from, the top-level reactions list is what was filtered.
|
|
157
|
+
// Reactions are not nested under their channel in the export — that is the
|
|
158
|
+
// whole reason this check performs a join — so one pointer cannot say it.
|
|
159
|
+
const joined = [found.path];
|
|
160
|
+
if (final.reactions !== undefined)
|
|
161
|
+
joined.push(statePath("reactions"));
|
|
143
162
|
return {
|
|
144
163
|
passed: !hit,
|
|
145
164
|
reason: hit
|
|
146
165
|
? `reaction "${reaction}" found in channel "${channel}"`
|
|
147
166
|
: `no reaction "${reaction}" in channel "${channel}"`,
|
|
167
|
+
evidenceStatePaths: joined,
|
|
148
168
|
};
|
|
149
169
|
},
|
|
150
170
|
});
|
|
@@ -170,7 +190,7 @@ export const messageContains = defineCheck({
|
|
|
170
190
|
evaluate({ channel, needle }, { final }) {
|
|
171
191
|
const found = resolveChannel(final, channel);
|
|
172
192
|
if ("missing" in found)
|
|
173
|
-
return
|
|
193
|
+
return missSkip(found);
|
|
174
194
|
const messages = found.found.messages ?? [];
|
|
175
195
|
const target = needle.toLowerCase();
|
|
176
196
|
const passed = messages.some((message) => (message.text ?? "").toLowerCase().includes(target));
|
|
@@ -180,6 +200,7 @@ export const messageContains = defineCheck({
|
|
|
180
200
|
? `channel "${channel}" has a message containing "${needle}"`
|
|
181
201
|
: `no message in channel "${channel}" contains "${needle}" ` +
|
|
182
202
|
`(${messages.length} message(s) scanned)`,
|
|
203
|
+
evidenceStatePaths: [childStatePath(found.path, "messages")],
|
|
183
204
|
};
|
|
184
205
|
},
|
|
185
206
|
});
|