@pome-sh/cli 0.18.0 → 0.19.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/@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 +2 -2
- 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.js +26 -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 +20 -1
- package/node_modules/@pome-sh/twin-github/dist/src/check-state.js +62 -10
- package/node_modules/@pome-sh/twin-github/dist/src/check-state.js.map +1 -1
- package/node_modules/@pome-sh/twin-github/package.json +3 -3
- package/node_modules/@pome-sh/twin-gmail/CHANGELOG.md +29 -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 +2 -2
- package/node_modules/@pome-sh/twin-linear/CHANGELOG.md +29 -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 +2 -2
- 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 +3 -3
- 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 +3 -3
- package/package.json +8 -8
|
@@ -1,5 +1,34 @@
|
|
|
1
1
|
# @pome-sh/twin-gmail — CHANGELOG
|
|
2
2
|
|
|
3
|
+
|
|
4
|
+
## 0.3.2 — 2026-08-04
|
|
5
|
+
|
|
6
|
+
- Re-pinned to `@pome-sh/sdk@0.11.0` for the F-1200 parent-vocabulary
|
|
7
|
+
change: a recorded row now carries `parent_event_id` rather than `parent_id`.
|
|
8
|
+
No change to this twin's own surface — `npm run test:contract` is green.
|
|
9
|
+
|
|
10
|
+
## 0.3.1 — 2026-08-03
|
|
11
|
+
|
|
12
|
+
Every state-reading check says where it looked (F-1197).
|
|
13
|
+
|
|
14
|
+
- 6 declarations now fill `CheckOutcome.evidenceStatePaths` (new in
|
|
15
|
+
`@pome-sh/sdk` 0.10.1) with RFC 6901 pointers into this twin's exported tree.
|
|
16
|
+
- `check-state.ts`'s resolvers return the pointer they walked. `Resolved<T>`'s
|
|
17
|
+
found arm gains `path`; its missing arm gains an optional `searched`, naming
|
|
18
|
+
the collection a failed lookup scanned.
|
|
19
|
+
- `checks-contract.test.ts` gains the citation gate and an EMPTY
|
|
20
|
+
`HONEST_UNCITED_CHECKS` ledger.
|
|
21
|
+
|
|
22
|
+
A failed lookup cites too, and that is the half worth knowing about. A message the export does not carry is the commonest refusal here, and it is the one a reader most wants to check.
|
|
23
|
+
So the honest citation on that arm is not the row — there is none — but the list:
|
|
24
|
+
*this is where I looked, see for yourself that it is not in it.*
|
|
25
|
+
|
|
26
|
+
Requires `@pome-sh/sdk` 0.10.1: the declarations call `statePath` /
|
|
27
|
+
`childStatePath`, which 0.10.0 does not export.
|
|
28
|
+
|
|
29
|
+
No sentence, template, substrate or check id changed, so `checksDigest` is
|
|
30
|
+
identical and no criterion re-binds.
|
|
31
|
+
|
|
3
32
|
## 0.3.0 — 2026-07-30
|
|
4
33
|
|
|
5
34
|
Gmail declares its assertable check vocabulary (F-1128, milestone A3).
|
|
@@ -9,8 +9,9 @@
|
|
|
9
9
|
// "no draft is addressed to anyone", always — a negative that can never fail,
|
|
10
10
|
// which is the exact defect A3 exists to eliminate.
|
|
11
11
|
import { defineCheck, VACUITY_SENTINEL, VACUITY_SENTINEL_NUMBER } from "@pome-sh/sdk/checks";
|
|
12
|
+
import { childStatePath } from "@pome-sh/sdk/checks";
|
|
12
13
|
import { countWord, emailAddress, parseCount } from "./check-params.js";
|
|
13
|
-
import { draftRecipients, isTruncated } from "./check-state.js";
|
|
14
|
+
import { DRAFTS_PATH, draftRecipients, isTruncated } from "./check-state.js";
|
|
14
15
|
import { draftAddressedTo as draftFor, finalWorld, gmailState } from "./check-worlds.js";
|
|
15
16
|
export const draftAddressedTo = defineCheck({
|
|
16
17
|
id: "gmail.draft-addressed-to",
|
|
@@ -58,9 +59,19 @@ export const draftAddressedTo = defineCheck({
|
|
|
58
59
|
return { passed: false, status: "skipped", reason: "state_incomplete" };
|
|
59
60
|
}
|
|
60
61
|
const wanted = email.toLowerCase();
|
|
61
|
-
const
|
|
62
|
-
if (
|
|
63
|
-
|
|
62
|
+
const index = final.drafts.findIndex((entry) => draftRecipients(final, entry).some((to) => to.toLowerCase() === wanted));
|
|
63
|
+
if (index >= 0) {
|
|
64
|
+
const hit = final.drafts[index];
|
|
65
|
+
return {
|
|
66
|
+
passed: true,
|
|
67
|
+
reason: `draft ${hit.id ?? "?"} is addressed to ${email}`,
|
|
68
|
+
// The DRAFT row, not the backing message that actually holds the
|
|
69
|
+
// address. A reader following this pointer lands on the thing the
|
|
70
|
+
// sentence is about — "a draft addressed to X" — and the join to the
|
|
71
|
+
// message is an implementation detail of how the twin exports, not the
|
|
72
|
+
// claim (F-1197).
|
|
73
|
+
evidenceStatePaths: [childStatePath(DRAFTS_PATH, index)],
|
|
74
|
+
};
|
|
64
75
|
}
|
|
65
76
|
// Only refuse once the answer would otherwise be "no". A capped collection
|
|
66
77
|
// that still contains the draft is a real pass, and skipping it would drop a
|
|
@@ -71,6 +82,7 @@ export const draftAddressedTo = defineCheck({
|
|
|
71
82
|
return {
|
|
72
83
|
passed: false,
|
|
73
84
|
reason: `no draft is addressed to ${email} (${final.drafts.length} draft(s) inspected)`,
|
|
85
|
+
evidenceStatePaths: [DRAFTS_PATH],
|
|
74
86
|
};
|
|
75
87
|
},
|
|
76
88
|
});
|
|
@@ -132,6 +144,9 @@ export const draftCountAtLeast = defineCheck({
|
|
|
132
144
|
return {
|
|
133
145
|
passed: total >= wanted,
|
|
134
146
|
reason: `${total} draft(s) exist (wanted at least ${wanted})`,
|
|
147
|
+
// The collection whose LENGTH is the assertion. There is no narrower
|
|
148
|
+
// address for a cardinality.
|
|
149
|
+
evidenceStatePaths: [DRAFTS_PATH],
|
|
135
150
|
};
|
|
136
151
|
},
|
|
137
152
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-drafts.js","sourceRoot":"","sources":["../../src/check-drafts.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,iEAAiE;AACjE,EAAE;AACF,qEAAqE;AACrE,uEAAuE;AACvE,8EAA8E;AAC9E,8EAA8E;AAC9E,8EAA8E;AAC9E,oDAAoD;AAEpD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"check-drafts.js","sourceRoot":"","sources":["../../src/check-drafts.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,iEAAiE;AACjE,EAAE;AACF,qEAAqE;AACrE,uEAAuE;AACvE,8EAA8E;AAC9E,8EAA8E;AAC9E,8EAA8E;AAC9E,oDAAoD;AAEpD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,IAAI,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEzF,MAAM,CAAC,MAAM,gBAAgB,GAA6B,WAAW,CAAC;IACpE,EAAE,EAAE,0BAA0B;IAC9B,WAAW,EACT,uFAAuF;QACvF,2FAA2F;QAC3F,4FAA4F;QAC5F,8FAA8F;QAC9F,8FAA8F;QAC9F,4EAA4E;IAC9E,QAAQ,EAAE,qCAAqC;IAC/C,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;IAC/B,SAAS,EAAE,OAAO;IAClB,yEAAyE;IACzE,oDAAoD;IACpD,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU;IAC1B,EAAE;IACF,8CAA8C;IAC9C,EAAE;IACF,+EAA+E;IAC/E,+EAA+E;IAC/E,gFAAgF;IAChF,+EAA+E;IAC/E,2EAA2E;IAC3E,0EAA0E;IAC1E,uEAAuE;IACvE,kEAAkE;IAClE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK;IAC7B,2EAA2E;IAC3E,+EAA+E;IAC/E,8EAA8E;IAC9E,oDAAoD;IACpD,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,gBAAgB,kBAAkB,EAAE,CAAC;IACpF,oBAAoB,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACpE,yEAAyE;QACzE,6EAA6E;QAC7E,OAAO;YACL,OAAO,EAAE,UAAU,CACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CACnE;YACD,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SACtF,CAAC;IACJ,CAAC;IACD,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE;QAC3B,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;YACnD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;QAC1E,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAC7C,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CACxE,CAAC;QACF,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC;YACjC,OAAO;gBACL,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,SAAS,GAAG,CAAC,EAAE,IAAI,GAAG,oBAAoB,KAAK,EAAE;gBACzD,iEAAiE;gBACjE,kEAAkE;gBAClE,qEAAqE;gBACrE,uEAAuE;gBACvE,kBAAkB;gBAClB,kBAAkB,EAAE,CAAC,cAAc,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;aACzD,CAAC;QACJ,CAAC;QACD,2EAA2E;QAC3E,6EAA6E;QAC7E,8CAA8C;QAC9C,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC;YACnE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;QAC9E,CAAC;QACD,OAAO;YACL,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,4BAA4B,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM,sBAAsB;YACvF,kBAAkB,EAAE,CAAC,WAAW,CAAC;SAClC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAA6B,WAAW,CAAC;IACrE,EAAE,EAAE,4BAA4B;IAChC,WAAW,EACT,0FAA0F;QAC1F,yFAAyF;QACzF,4FAA4F;QAC5F,4FAA4F;QAC5F,0FAA0F;QAC1F,oBAAoB;IACtB,QAAQ,EAAE,+BAA+B;IACzC,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IAC5B,SAAS,EAAE,OAAO;IAClB,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU;IAC1B,+EAA+E;IAC/E,kCAAkC;IAClC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;IACnB,EAAE;IACF,4EAA4E;IAC5E,EAAE;IACF,8EAA8E;IAC9E,uEAAuE;IACvE,6EAA6E;IAC7E,8EAA8E;IAC9E,2EAA2E;IAC3E,qEAAqE;IACrE,6EAA6E;IAC7E,+DAA+D;IAC/D,8BAA8B;IAC9B,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,uBAAuB,CAAC,EAAE,CAAC;IAC9E,oBAAoB,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QAClC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE;YAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC7F,OAAO,UAAU,CAAC;gBAChB,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;gBACjC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;aACtC,CAAC,CAAC;QACL,CAAC,CAAC;QACF,2EAA2E;QAC3E,oEAAoE;QACpE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACrG,CAAC;IACD,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE;QAC3B,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,0EAA0E;YAC1E,uEAAuE;YACvE,2EAA2E;YAC3E,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,KAAK,IAAI,EAAE,CAAC;QAClF,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI;YAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;QAClG,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QAClC,IAAI,KAAK,GAAG,MAAM,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;YACnD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iCAAiC,EAAE,CAAC;QACzF,CAAC;QACD,OAAO;YACL,MAAM,EAAE,KAAK,IAAI,MAAM;YACvB,MAAM,EAAE,GAAG,KAAK,oCAAoC,MAAM,GAAG;YAC7D,qEAAqE;YACrE,6BAA6B;YAC7B,kBAAkB,EAAE,CAAC,WAAW,CAAC;SAClC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
// `github.no-new-labels` records what happens when one sentence blurs the two.
|
|
10
10
|
import { defineCheck, VACUITY_SENTINEL } from "@pome-sh/sdk/checks";
|
|
11
11
|
import { labelName } from "./check-params.js";
|
|
12
|
-
import { resolveLabelByName } from "./check-state.js";
|
|
12
|
+
import { missSkip, resolveLabelByName } from "./check-state.js";
|
|
13
13
|
import { finalWorld, gmailState, systemLabel, userLabel } from "./check-worlds.js";
|
|
14
14
|
export const labelExists = defineCheck({
|
|
15
15
|
id: "gmail.label-exists",
|
|
@@ -46,11 +46,22 @@ export const labelExists = defineCheck({
|
|
|
46
46
|
// `state_incomplete` and `collection_truncated` are unanswerable; a label
|
|
47
47
|
// genuinely not there is the honest FAIL this check exists to deliver.
|
|
48
48
|
if (found.missing.startsWith("label_not_found")) {
|
|
49
|
-
return {
|
|
49
|
+
return {
|
|
50
|
+
passed: false,
|
|
51
|
+
reason: `no label named "${label}" exists`,
|
|
52
|
+
// The label COLLECTION — the honest citation for a lookup that found
|
|
53
|
+
// nothing, and the arm a reader most wants to open: see for yourself
|
|
54
|
+
// that the name is not in it (F-1197).
|
|
55
|
+
...(found.searched === undefined ? {} : { evidenceStatePaths: [found.searched] }),
|
|
56
|
+
};
|
|
50
57
|
}
|
|
51
|
-
return
|
|
58
|
+
return missSkip(found);
|
|
52
59
|
}
|
|
53
|
-
return {
|
|
60
|
+
return {
|
|
61
|
+
passed: true,
|
|
62
|
+
reason: `label "${label}" exists (id ${found.found.id ?? "?"})`,
|
|
63
|
+
evidenceStatePaths: [found.path],
|
|
64
|
+
};
|
|
54
65
|
},
|
|
55
66
|
});
|
|
56
67
|
//# sourceMappingURL=check-labels.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-labels.js","sourceRoot":"","sources":["../../src/check-labels.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,4EAA4E;AAC5E,EAAE;AACF,8EAA8E;AAC9E,0EAA0E;AAC1E,4EAA4E;AAC5E,4EAA4E;AAC5E,+EAA+E;AAE/E,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"check-labels.js","sourceRoot":"","sources":["../../src/check-labels.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,4EAA4E;AAC5E,EAAE;AACF,8EAA8E;AAC9E,0EAA0E;AAC1E,4EAA4E;AAC5E,4EAA4E;AAC5E,+EAA+E;AAE/E,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnF,MAAM,CAAC,MAAM,WAAW,GAA6B,WAAW,CAAC;IAC/D,EAAE,EAAE,oBAAoB;IACxB,WAAW,EACT,+FAA+F;QAC/F,6FAA6F;QAC7F,yFAAyF;QACzF,+FAA+F;QAC/F,6FAA6F;QAC7F,qFAAqF;IACvF,uEAAuE;IACvE,+EAA+E;IAC/E,6EAA6E;IAC7E,yCAAyC;IACzC,QAAQ,EAAE,8BAA8B;IACxC,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IAC5B,SAAS,EAAE,OAAO;IAClB,uEAAuE;IACvE,6BAA6B;IAC7B,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU;IAC1B,gEAAgE;IAChE,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,yEAAyE;QACzE,yEAAyE;QACzE,WAAW;QACX,OAAO,EAAE,UAAU,CACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAC5E;QACD,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;KACpE,CAAC;IACF,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE;QAC3B,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/C,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;YACvB,0EAA0E;YAC1E,uEAAuE;YACvE,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAChD,OAAO;oBACL,MAAM,EAAE,KAAK;oBACb,MAAM,EAAE,mBAAmB,KAAK,UAAU;oBAC1C,qEAAqE;oBACrE,qEAAqE;oBACrE,uCAAuC;oBACvC,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;iBAClF,CAAC;YACJ,CAAC;YACD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,UAAU,KAAK,gBAAgB,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,GAAG;YAC/D,kBAAkB,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;SACjC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
// assembles them.
|
|
14
14
|
import { defineCheck, VACUITY_SENTINEL } from "@pome-sh/sdk/checks";
|
|
15
15
|
import { countWord, exactCount, labelRef, mailboxRef, messageId, parseCount } from "./check-params.js";
|
|
16
|
-
import { isTruncated, labelIdsFor, messageCarriesLabel, resolveMessage, } from "./check-state.js";
|
|
16
|
+
import { isTruncated, labelIdsFor, MESSAGE_LABELS_PATH, MESSAGES_PATH, messageCarriesLabel, missSkip, resolveMessage, } from "./check-state.js";
|
|
17
17
|
import { finalWorld, gmailState, message, messageLabel, systemLabel, userLabel, } from "./check-worlds.js";
|
|
18
18
|
// The workhorse of gmail's corpus: it binds three of the six criteria A3 found
|
|
19
19
|
// unbound, because tasks 22 and 27 say the same sentence about `msg_support` and
|
|
@@ -56,15 +56,21 @@ export const messageHasLabel = defineCheck({
|
|
|
56
56
|
evaluate({ message: id, label }, { final }) {
|
|
57
57
|
const found = resolveMessage(final, id);
|
|
58
58
|
if ("missing" in found)
|
|
59
|
-
return
|
|
59
|
+
return missSkip(found);
|
|
60
60
|
const carried = messageCarriesLabel(final, id, label);
|
|
61
61
|
if ("missing" in carried)
|
|
62
|
-
return
|
|
62
|
+
return missSkip(carried);
|
|
63
63
|
return {
|
|
64
64
|
passed: carried.found,
|
|
65
65
|
reason: carried.found
|
|
66
66
|
? `message ${id} carries label ${label}`
|
|
67
67
|
: `message ${id} does not carry label ${label}`,
|
|
68
|
+
// BOTH halves of the lookup, because the predicate really does read two
|
|
69
|
+
// places: the message row it resolved by id, and the join table it then
|
|
70
|
+
// questioned. Labels are not nested under their message in this export —
|
|
71
|
+
// that is the whole reason `messageCarriesLabel` exists — so one pointer
|
|
72
|
+
// could not say where this verdict came from (F-1197).
|
|
73
|
+
evidenceStatePaths: [found.path, carried.path],
|
|
68
74
|
};
|
|
69
75
|
},
|
|
70
76
|
});
|
|
@@ -134,6 +140,11 @@ export const mailboxLabelCount = defineCheck({
|
|
|
134
140
|
return {
|
|
135
141
|
passed: total === wanted,
|
|
136
142
|
reason: `mailbox "${mailbox}" has ${total} message(s) labeled ${label} (wanted ${wanted})`,
|
|
143
|
+
// The two collections the count is computed FROM. The count itself lives
|
|
144
|
+
// nowhere in the tree, so there is no narrower honest address — and the
|
|
145
|
+
// guards above already established that both collections are present and
|
|
146
|
+
// un-capped, which is what makes these pointers resolve.
|
|
147
|
+
evidenceStatePaths: [MESSAGES_PATH, MESSAGE_LABELS_PATH],
|
|
137
148
|
};
|
|
138
149
|
},
|
|
139
150
|
});
|
|
@@ -201,6 +212,11 @@ export const oneMessagePerRecipient = defineCheck({
|
|
|
201
212
|
: `${sent.length} ${label} message(s) to ${distinct.size} distinct recipient(s) ` +
|
|
202
213
|
`(${addressees.length} addressee slot(s)${wanted == null ? "" : `, wanted ${wanted}`}` +
|
|
203
214
|
`${noDuplicates ? "" : ", duplicate send detected"})`,
|
|
215
|
+
// Same two collections, same reason: the duplicate this check exists to
|
|
216
|
+
// catch is a property of the addressee lists across `messages`, filtered
|
|
217
|
+
// by `messageLabels`, and neither the flattened list nor its distinct set
|
|
218
|
+
// is anything the tree holds.
|
|
219
|
+
evidenceStatePaths: [MESSAGES_PATH, MESSAGE_LABELS_PATH],
|
|
204
220
|
};
|
|
205
221
|
},
|
|
206
222
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-messages.js","sourceRoot":"","sources":["../../src/check-messages.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,mEAAmE;AACnE,EAAE;AACF,8EAA8E;AAC9E,oEAAoE;AACpE,oEAAoE;AACpE,6EAA6E;AAC7E,4EAA4E;AAC5E,2CAA2C;AAC3C,EAAE;AACF,2EAA2E;AAC3E,kBAAkB;AAElB,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACvG,OAAO,EACL,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,cAAc,GAEf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,UAAU,EACV,UAAU,EACV,OAAO,EACP,YAAY,EACZ,WAAW,EACX,SAAS,GACV,MAAM,mBAAmB,CAAC;AAE3B,+EAA+E;AAC/E,iFAAiF;AACjF,+EAA+E;AAC/E,uCAAuC;AACvC,MAAM,CAAC,MAAM,eAAe,GAA8C,WAAW,CAAC;IACpF,EAAE,EAAE,yBAAyB;IAC7B,WAAW,EACT,6FAA6F;QAC7F,yFAAyF;QACzF,0FAA0F;QAC1F,wFAAwF;QACxF,2FAA2F;QAC3F,4FAA4F;QAC5F,qBAAqB;IACvB,QAAQ,EAAE,qCAAqC;IAC/C,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;IAC/C,SAAS,EAAE,OAAO;IAClB,6EAA6E;IAC7E,wCAAwC;IACxC,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU;IAC1B,0EAA0E;IAC1E,+EAA+E;IAC/E,qEAAqE;IACrE,iEAAiE;IACjE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK;IAC7B,2EAA2E;IAC3E,sEAAsE;IACtE,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC/D,oBAAoB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAC/C,6EAA6E;QAC7E,8EAA8E;QAC9E,wEAAwE;QACxE,MAAM,MAAM,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;QACjD,OAAO;YACL,OAAO,EAAE,UAAU,CACjB,UAAU,CAAC,EAAE,GAAG,IAAI,EAAE,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAC7F;YACD,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,EAAE,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;SACzF,CAAC;IACJ,CAAC;IACD,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE;QACxC,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACxC,IAAI,SAAS,IAAI,KAAK;YAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"check-messages.js","sourceRoot":"","sources":["../../src/check-messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,35 @@
|
|
|
1
|
+
import { type CheckOutcome } from "@pome-sh/sdk/checks";
|
|
1
2
|
/** A resolver must be able to say WHY it found nothing: the ways of finding
|
|
2
|
-
* nothing get different verdicts. Same shape and same reason as twin-github's.
|
|
3
|
+
* nothing get different verdicts. Same shape and same reason as twin-github's.
|
|
4
|
+
*
|
|
5
|
+
* F-1197 added the pointers, also twin-github's: `path` is where the resolution
|
|
6
|
+
* landed, `searched` is the collection a failed lookup scanned. Both optional on
|
|
7
|
+
* the missing arm because gmail's commonest refusal is `state_incomplete` — the
|
|
8
|
+
* collection is absent from the export entirely, so there is nowhere to point
|
|
9
|
+
* and citing anything would be an affordance to nowhere. */
|
|
3
10
|
export type Resolved<T> = {
|
|
4
11
|
found: T;
|
|
12
|
+
path: string;
|
|
5
13
|
} | {
|
|
6
14
|
missing: string;
|
|
15
|
+
searched?: string;
|
|
7
16
|
};
|
|
17
|
+
/** The exported collections a pointer can address. Named because six
|
|
18
|
+
* declarations reach for them and a literal `"/messageLabels"` typed out six
|
|
19
|
+
* times is six chances to typo one into a pointer that resolves to nothing —
|
|
20
|
+
* and the mis-cased `/messagelabels` would look right in a diff. */
|
|
21
|
+
export declare const MESSAGES_PATH: string;
|
|
22
|
+
export declare const DRAFTS_PATH: string;
|
|
23
|
+
export declare const LABELS_PATH: string;
|
|
24
|
+
export declare const MESSAGE_LABELS_PATH: string;
|
|
25
|
+
/** The `skipped` outcome an unresolvable lookup produces, citing where it
|
|
26
|
+
* looked. Gmail abstains where twin-github fails — a message the export does
|
|
27
|
+
* not carry cannot be attested either way — so this is `missOutcome` with
|
|
28
|
+
* `skipped`, exactly as twin-slack's `missSkip` is. */
|
|
29
|
+
export declare function missSkip(miss: {
|
|
30
|
+
missing: string;
|
|
31
|
+
searched?: string;
|
|
32
|
+
}): CheckOutcome;
|
|
8
33
|
export interface GmailCheckStateMailbox {
|
|
9
34
|
email?: string;
|
|
10
35
|
displayName?: string;
|
|
@@ -34,6 +34,25 @@
|
|
|
34
34
|
// (`Label_follow_up` / `Follow Up`); a system label carries `id === name`.
|
|
35
35
|
// - EVERYTHING IS MAILBOX-SCOPED via `mailboxEmail`, and ids are minted per
|
|
36
36
|
// mailbox, so `deliveryMode: "seeded-mailboxes"` can put one id in two.
|
|
37
|
+
import { childStatePath, statePath } from "@pome-sh/sdk/checks";
|
|
38
|
+
/** The exported collections a pointer can address. Named because six
|
|
39
|
+
* declarations reach for them and a literal `"/messageLabels"` typed out six
|
|
40
|
+
* times is six chances to typo one into a pointer that resolves to nothing —
|
|
41
|
+
* and the mis-cased `/messagelabels` would look right in a diff. */
|
|
42
|
+
export const MESSAGES_PATH = statePath("messages");
|
|
43
|
+
export const DRAFTS_PATH = statePath("drafts");
|
|
44
|
+
export const LABELS_PATH = statePath("labels");
|
|
45
|
+
export const MESSAGE_LABELS_PATH = statePath("messageLabels");
|
|
46
|
+
/** The `skipped` outcome an unresolvable lookup produces, citing where it
|
|
47
|
+
* looked. Gmail abstains where twin-github fails — a message the export does
|
|
48
|
+
* not carry cannot be attested either way — so this is `missOutcome` with
|
|
49
|
+
* `skipped`, exactly as twin-slack's `missSkip` is. */
|
|
50
|
+
export function missSkip(miss) {
|
|
51
|
+
const outcome = { passed: false, status: "skipped", reason: miss.missing };
|
|
52
|
+
if (miss.searched === undefined)
|
|
53
|
+
return outcome;
|
|
54
|
+
return { ...outcome, evidenceStatePaths: [miss.searched] };
|
|
55
|
+
}
|
|
37
56
|
const lower = (value) => (value ?? "").toLowerCase();
|
|
38
57
|
/**
|
|
39
58
|
* Was this collection capped on the way out?
|
|
@@ -65,15 +84,26 @@ export function isTruncated(state, collection) {
|
|
|
65
84
|
export function resolveMessage(state, id) {
|
|
66
85
|
if (state.messages == null)
|
|
67
86
|
return { missing: "state_incomplete" };
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
87
|
+
const indices = state.messages
|
|
88
|
+
.map((message, index) => (lower(message.id) === lower(id) ? index : -1))
|
|
89
|
+
.filter((index) => index >= 0);
|
|
90
|
+
if (indices.length > 1) {
|
|
91
|
+
// The AMBIGUITY is the finding, so the citation is the collection rather
|
|
92
|
+
// than one of the candidates: pointing at either would present a coin-flip
|
|
93
|
+
// as the thing the check read.
|
|
94
|
+
return {
|
|
95
|
+
missing: `message_ambiguous ("${id}" exists in ${indices.length} mailboxes)`,
|
|
96
|
+
searched: MESSAGES_PATH,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
if (indices.length === 1) {
|
|
100
|
+
const index = indices[0];
|
|
101
|
+
return { found: state.messages[index], path: childStatePath(MESSAGES_PATH, index) };
|
|
102
|
+
}
|
|
103
|
+
if (isTruncated(state, "messages")) {
|
|
104
|
+
return { missing: 'collection_truncated ("messages")', searched: MESSAGES_PATH };
|
|
71
105
|
}
|
|
72
|
-
|
|
73
|
-
return { found: hits[0] };
|
|
74
|
-
if (isTruncated(state, "messages"))
|
|
75
|
-
return { missing: 'collection_truncated ("messages")' };
|
|
76
|
-
return { missing: `message_not_found ("${id}")` };
|
|
106
|
+
return { missing: `message_not_found ("${id}")`, searched: MESSAGES_PATH };
|
|
77
107
|
}
|
|
78
108
|
/**
|
|
79
109
|
* Every label id that counts as `wanted`, lower-cased for comparison.
|
|
@@ -106,9 +136,13 @@ export function messageCarriesLabel(state, messageId, wanted) {
|
|
|
106
136
|
const ids = labelIdsFor(state, wanted);
|
|
107
137
|
const carried = state.messageLabels.some((row) => lower(row.messageId) === lower(messageId) && ids.has(lower(row.labelId)));
|
|
108
138
|
if (!carried && isTruncated(state, "messageLabels")) {
|
|
109
|
-
return { missing: 'collection_truncated ("messageLabels")' };
|
|
139
|
+
return { missing: 'collection_truncated ("messageLabels")', searched: MESSAGE_LABELS_PATH };
|
|
110
140
|
}
|
|
111
|
-
|
|
141
|
+
// The JOIN, not a row in it. The answer is a boolean this function computed
|
|
142
|
+
// and the tree holds no such value, so the honest address is the table the
|
|
143
|
+
// question was asked of — and on the `false` side there is no row to name at
|
|
144
|
+
// all, which is exactly the arm a reader wants to check.
|
|
145
|
+
return { found: carried, path: MESSAGE_LABELS_PATH };
|
|
112
146
|
}
|
|
113
147
|
/**
|
|
114
148
|
* The label a criterion names BY NAME.
|
|
@@ -121,12 +155,14 @@ export function messageCarriesLabel(state, messageId, wanted) {
|
|
|
121
155
|
export function resolveLabelByName(state, name) {
|
|
122
156
|
if (state.labels == null)
|
|
123
157
|
return { missing: "state_incomplete" };
|
|
124
|
-
const
|
|
125
|
-
if (
|
|
126
|
-
return { found:
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
158
|
+
const index = state.labels.findIndex((label) => lower(label.name) === lower(name));
|
|
159
|
+
if (index >= 0) {
|
|
160
|
+
return { found: state.labels[index], path: childStatePath(LABELS_PATH, index) };
|
|
161
|
+
}
|
|
162
|
+
if (isTruncated(state, "labels")) {
|
|
163
|
+
return { missing: 'collection_truncated ("labels")', searched: LABELS_PATH };
|
|
164
|
+
}
|
|
165
|
+
return { missing: `label_not_found ("${name}")`, searched: LABELS_PATH };
|
|
130
166
|
}
|
|
131
167
|
/**
|
|
132
168
|
* Who a draft is addressed to — `to` + `cc`, from the backing MESSAGE.
|
|
@@ -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.2",
|
|
4
4
|
"description": "Deterministic Gmail-shaped twin for agent testing — SQLite-backed domain core.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"@hono/node-server": "^2.0.10",
|
|
51
|
-
"@pome-sh/sdk": "0.
|
|
51
|
+
"@pome-sh/sdk": "0.11.0",
|
|
52
52
|
"hono": "^4.12.31",
|
|
53
53
|
"zod": "^4.1.13"
|
|
54
54
|
},
|
|
@@ -1,5 +1,34 @@
|
|
|
1
1
|
# @pome-sh/twin-linear — CHANGELOG
|
|
2
2
|
|
|
3
|
+
|
|
4
|
+
## 0.3.2 — 2026-08-04
|
|
5
|
+
|
|
6
|
+
- Re-pinned to `@pome-sh/sdk@0.11.0` for the F-1200 parent-vocabulary
|
|
7
|
+
change: a recorded row now carries `parent_event_id` rather than `parent_id`.
|
|
8
|
+
No change to this twin's own surface — `npm run test:contract` is green.
|
|
9
|
+
|
|
10
|
+
## 0.3.1 — 2026-08-03
|
|
11
|
+
|
|
12
|
+
Every state-reading check says where it looked (F-1197).
|
|
13
|
+
|
|
14
|
+
- 7 declarations now fill `CheckOutcome.evidenceStatePaths` (new in
|
|
15
|
+
`@pome-sh/sdk` 0.10.1) with RFC 6901 pointers into this twin's exported tree.
|
|
16
|
+
- `check-state.ts`'s resolvers return the pointer they walked. `Resolved<T>`'s
|
|
17
|
+
found arm gains `path`; its missing arm gains an optional `searched`, naming
|
|
18
|
+
the collection a failed lookup scanned.
|
|
19
|
+
- `checks-contract.test.ts` gains the citation gate and an EMPTY
|
|
20
|
+
`HONEST_UNCITED_CHECKS` ledger.
|
|
21
|
+
|
|
22
|
+
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.
|
|
23
|
+
So the honest citation on that arm is not the row — there is none — but the list:
|
|
24
|
+
*this is where I looked, see for yourself that it is not in it.*
|
|
25
|
+
|
|
26
|
+
Requires `@pome-sh/sdk` 0.10.1: the declarations call `statePath` /
|
|
27
|
+
`childStatePath`, which 0.10.0 does not export.
|
|
28
|
+
|
|
29
|
+
No sentence, template, substrate or check id changed, so `checksDigest` is
|
|
30
|
+
identical and no criterion re-binds.
|
|
31
|
+
|
|
3
32
|
## 0.3.0 — 2026-08-02
|
|
4
33
|
|
|
5
34
|
**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":"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,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAElF,MAAM,CAAC,MAAM,oBAAoB,GAC/B,WAAW,CAAC;IACV,EAAE,EAAE,+BAA+B;IACnC,WAAW,EACT,oFAAoF;QACpF,0FAA0F;QAC1F,yFAAyF;QACzF,qFAAqF;QACrF,yFAAyF;QACzF,0FAA0F;QAC1F,yDAAyD;IAC3D,QAAQ,EAAE,8DAA8D;IACxE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE;IACnE,SAAS,EAAE,OAAO;IAClB,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU;IAC1B,0EAA0E;IAC1E,yEAAyE;IACzE,4CAA4C;IAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM;IAC/B,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAChE,oBAAoB,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5C,OAAO,EAAE,UAAU,CACjB,WAAW,CACT,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EACjB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,MAAM,EAAE,EAAE,CAAC,CAC1E,CACF;QACD,oEAAoE;QACpE,qEAAqE;QACrE,uDAAuD;QACvD,OAAO,EAAE,UAAU,CACjB,WAAW,CACT,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EACjB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC,CAClF,CACF;KACF,CAAC;IACF,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE;QACzC,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,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,SAAS,IAAI,QAAQ;YAAE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACxE,oEAAoE;QACpE,wEAAwE;QACxE,0EAA0E;QAC1E,OAAO;YACL,MAAM,EAAE,GAAG;YACX,MAAM,EAAE,GAAG;gBACT,CAAC,CAAC,uBAAuB,MAAM,GAAG;gBAClC,CAAC,CAAC,wBAAwB,MAAM,MAAM,QAAQ,CAAC,KAAK,CAAC,MAAM,sBAAsB;YACnF,kBAAkB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;SACpC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,kBAAkB,GAA2C,WAAW,CAAC;IACpF,EAAE,EAAE,6BAA6B;IACjC,WAAW,EACT,2FAA2F;QAC3F,4FAA4F;QAC5F,2FAA2F;QAC3F,0EAA0E;IAC5E,QAAQ,EAAE,4EAA4E;IACtF,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE;IAC5C,SAAS,EAAE,YAAY;IACvB,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU;IAC1B,uEAAuE;IACvE,4EAA4E;IAC5E,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;IACnB,2EAA2E;IAC3E,uEAAuE;IACvE,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI;IACzB,oBAAoB,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QAClC,MAAM,UAAU,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;QAC1F,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAC1D,OAAO;YACL,OAAO,EAAE,UAAU,CACjB,IAAI,EACJ,WAAW,CACT,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EACjB,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CACnF,CACF;YACD,qEAAqE;YACrE,uEAAuE;YACvE,OAAO,EAAE,UAAU,CACjB,IAAI,EACJ,WAAW,CACT,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EACjB,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAC/E,CACF;SACF,CAAC;IACJ,CAAC;IACD,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACvC,oEAAoE;QACpE,sEAAsE;QACtE,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAEvF,0EAA0E;QAC1E,uEAAuE;QACvE,6EAA6E;QAC7E,yEAAyE;QACzE,2EAA2E;QAC3E,2EAA2E;QAC3E,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAClD,IAAI,SAAS,IAAI,SAAS;YAAE,OAAO,UAAU,CAAC,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QACrF,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QAC5D,IAAI,SAAS,IAAI,YAAY;YAAE,OAAO,UAAU,CAAC,EAAE,GAAG,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3F,MAAM,MAAM,GAAG,IAAI,GAAG,CACpB,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,CACzF,CAAC;QAEF,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACpD,IAAI,SAAS,IAAI,UAAU;YAAE,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC;QAC3D,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QAC/D,IAAI,SAAS,IAAI,aAAa;YAAE,OAAO,UAAU,CAAC,aAAa,CAAC,CAAC;QAEjE,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CACxC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAChE,CAAC;QACF,OAAO;YACL,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;YAC1B,MAAM,EACJ,GAAG,OAAO,CAAC,MAAM,QAAQ,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,uBAAuB;gBAClF,IAAI,MAAM,CAAC,IAAI,uBAAuB,aAAa,CAAC,KAAK,CAAC,MAAM,aAAa;YAC/E,sEAAsE;YACtE,2EAA2E;YAC3E,yEAAyE;YACzE,oCAAoC;YACpC,kBAAkB,EAAE,CAAC,aAAa,CAAC;SACpC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|