@pome-sh/checks 0.1.1 → 0.1.3

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/CHANGELOG.md CHANGED
@@ -1,5 +1,43 @@
1
1
  # @pome-sh/checks
2
2
 
3
+ ## 0.1.3
4
+
5
+ No change to the published surface — `dist/` is byte-identical to 0.1.2, so no
6
+ declaration moved and no consumer's verdict changes. The declaration layer has
7
+ not been touched since 0.1.2 was cut (`38acaf9`), which is the version-bump
8
+ gate doing its job rather than an absence of work.
9
+
10
+ What this version is for: it is the first release cut by following
11
+ [`RELEASING.md`](../../RELEASING.md) end to end since the `packages-v*` batch
12
+ flow was replaced by version-diff-on-push, and it exists to prove that runbook
13
+ is followable — bump, merge, `release.yml` publishes, pome-cloud pins. The
14
+ consumer half is the part that was actually owed: pome-cloud has been pinned at
15
+ 0.1.1 since before 0.1.2 shipped, so F-1157's redaction-survival vocabulary has
16
+ not reached the grader.
17
+
18
+ Version-only bumps are accepted here rather than carrying an exception list,
19
+ per `cli/CHANGELOG.md` 0.21.7.
20
+
21
+ ## 0.1.2
22
+
23
+ Carries F-1157 to the grader. Three things move in `dist/`:
24
+
25
+ - `@pome-sh/checks/dsl` gains `probeRedactionSurvival`, `REDACTION_PLACEHOLDER`
26
+ and `isRedacted` — the measurement of what protects a criterion whose
27
+ redaction-destroyed literal is NOT its declared `subject`. `REDACTION_PLACEHOLDER`
28
+ is the check-side half of a cross-repo contract: the token pome-cloud's state
29
+ redactor writes is the token these predicates recognise, and it is declared
30
+ once here rather than spelled twice.
31
+ - `@pome-sh/checks/gmail` — `gmail.mailbox-label-count` answers
32
+ `mailbox_redacted ("…")` where the mailbox row survived with its address
33
+ masked, and keeps `mailbox_not_found ("…")` for an export that lists real
34
+ addresses and not this one. Same `skipped` status either way; only the reason
35
+ a report renders changes.
36
+ - `@pome-sh/checks/slack` — `slack.no-reaction-added` declares its reaction name
37
+ as its `subject`, so the engine's redaction-survival arm skips such a
38
+ criterion at the door instead of letting a masked `reactions[].name` satisfy
39
+ a negative assertion.
40
+
3
41
  ## 0.1.1
4
42
 
5
43
  No change to the published surface — `dist/` is byte-identical to 0.1.0, so no
@@ -0,0 +1,53 @@
1
+ import type { CheckDefinition } from "./checks.js";
2
+ /**
3
+ * The token a scoring redactor leaves in place of a value it masked.
4
+ *
5
+ * Declared HERE rather than imported from `@pome-sh/wire`, and the distinction
6
+ * is not pedantic. Wire's redactor scrubs secrets out of a recorded TRACE on the
7
+ * way to disk; the redactor that eats a check's literal is the consuming
8
+ * engine's STATE redactor, which runs in pome-cloud against a team's own config.
9
+ * Two producers, two lifetimes — they agree on the bytes today, and making one
10
+ * import the other's constant would assert a shared fact neither repo checks.
11
+ *
12
+ * So this is the check-side half of that contract, published on
13
+ * `@pome-sh/checks/dsl` so the engine writing the token and the predicates
14
+ * recognising it can read it from one place.
15
+ */
16
+ export declare const REDACTION_PLACEHOLDER = "[REDACTED]";
17
+ /**
18
+ * Did a redactor eat this value?
19
+ *
20
+ * A recogniser, not a proof: a team whose config writes some other placeholder
21
+ * gets `false` here, and the predicate that asked falls back to whatever it said
22
+ * before — the status quo, never a wrong verdict. Which is why the vacuous-pass
23
+ * gate below does not depend on this function at all: it destroys the literal
24
+ * itself and reads the verdict, so a check that never calls `isRedacted` is
25
+ * measured exactly as strictly as one that does.
26
+ */
27
+ export declare function isRedacted(value: string | null | undefined): boolean;
28
+ export type RedactionGuard = "declared_subject" | "vacuous_pass" | "abstains" | "false_fail" | "discriminates_anyway" | "absent_from_world" | "throws";
29
+ export interface RedactionSurvivalRow {
30
+ readonly param: string;
31
+ readonly guard: RedactionGuard;
32
+ readonly detail: string;
33
+ }
34
+ export type RedactionSurvivalVerdict = {
35
+ kind: "measured";
36
+ rows: readonly RedactionSurvivalRow[];
37
+ } | {
38
+ kind: "declined";
39
+ };
40
+ /**
41
+ * For every slot this check declares, what stands between a redactor that eats
42
+ * that slot's literal and a vacuous pass.
43
+ *
44
+ * The subject arm is credited without evaluating: when the destroyed literal IS
45
+ * (or is inside) the declared subject, the engine never calls `evaluate`, so
46
+ * running the predicate anyway would measure a code path production cannot
47
+ * reach and file its answer under this check's name.
48
+ *
49
+ * `includes`, not equality, on that comparison. A subject is usually one arg
50
+ * verbatim, but a declaration may compose one, and a redactor that masks a
51
+ * component masks the composed string too.
52
+ */
53
+ export declare function probeRedactionSurvival<TState, TArgs extends Record<string, string>>(def: CheckDefinition<TState, TArgs>, args: TArgs): RedactionSurvivalVerdict;
@@ -91,3 +91,4 @@ export declare function checkNearMissPattern(def: CheckBindingShape): RegExp;
91
91
  export declare function parseCheck<TState, TArgs extends Record<string, string>>(def: CheckDefinition<TState, TArgs>, text: string): TArgs | null;
92
92
  export { probeDiscrimination } from "./check-discrimination.js";
93
93
  export { statePath, childStatePath, resolveStatePath, probeStateCitation, type StateCitationArm, type StateCitationVerdict, } from "./check-state-path.js";
94
+ export { REDACTION_PLACEHOLDER, isRedacted, probeRedactionSurvival, type RedactionGuard, type RedactionSurvivalRow, type RedactionSurvivalVerdict, } from "./check-redaction.js";
@@ -61,9 +61,9 @@ export declare const seedSchema: z.ZodObject<{
61
61
  context: z.ZodDefault<z.ZodString>;
62
62
  state: z.ZodDefault<z.ZodEnum<{
63
63
  error: "error";
64
+ success: "success";
64
65
  failure: "failure";
65
66
  pending: "pending";
66
- success: "success";
67
67
  }>>;
68
68
  description: z.ZodDefault<z.ZodString>;
69
69
  }, z.core.$strip>>>;
@@ -4,7 +4,44 @@ export type LinearWorkflowStateType = "backlog" | "unstarted" | "started" | "com
4
4
  export type LinearTokenType = "personal" | "oauth_access" | "oauth_refresh" | "client_credentials";
5
5
  export type LinearTokenActorType = "user" | "app";
6
6
  export type LinearIssuePriority = 0 | 1 | 2 | 3 | 4;
7
+ /** Linear's `AgentActivityType` enum, member-for-member — the `content` discriminator. */
7
8
  export type LinearAgentActivityType = "thought" | "elicitation" | "action" | "response" | "error" | "prompt";
9
+ /** Linear's `AgentActivitySignal` enum, member-for-member (F-1176). */
10
+ export type LinearAgentActivitySignal = "stop" | "continue" | "auth" | "select";
11
+ /**
12
+ * Linear's `AgentActivityContent` union, member-for-member (F-1176).
13
+ *
14
+ * Upstream this is a real GraphQL union discriminated on `type`, whose six
15
+ * members are `AgentActivity{Thought,Action,Response,Elicitation,Error,Prompt}
16
+ * Content`. Five of the six carry `body`; `action` carries `action` /
17
+ * `parameter` / `result` instead, which is why an activity's payload cannot be
18
+ * flattened back to the `{ type, body }` pair the twin used to accept.
19
+ *
20
+ * `bodyData` / `resultData` are upstream's structured companions to the text
21
+ * fields. The twin does not derive them, but it accepts and stores them rather
22
+ * than refusing an agent that was written against real Linear and sends them.
23
+ */
24
+ export type LinearAgentActivityContent = {
25
+ type: "thought" | "response" | "elicitation";
26
+ body: string;
27
+ bodyData?: unknown;
28
+ } | {
29
+ type: "prompt";
30
+ body: string;
31
+ title?: string | null;
32
+ bodyData?: unknown;
33
+ } | {
34
+ type: "error";
35
+ body: string;
36
+ reasonCode?: string | null;
37
+ bodyData?: unknown;
38
+ } | {
39
+ type: "action";
40
+ action: string;
41
+ parameter: string;
42
+ result?: string | null;
43
+ resultData?: unknown;
44
+ };
8
45
  /** Linear's `AgentSessionStatus` enum, member-for-member (F-1172). */
9
46
  export type LinearAgentSessionStatus = "pending" | "active" | "awaitingInput" | "complete" | "error" | "stale";
10
47
  /** One entry of Linear's `AgentSession.externalUrls` JSON payload. */
@@ -208,10 +245,15 @@ export type LinearAgentSession = {
208
245
  };
209
246
  export type LinearAgentActivity = {
210
247
  id: string;
211
- sessionId: string;
212
- userId: string | null;
213
- type: LinearAgentActivityType;
214
- body: string;
248
+ agentSessionId: string;
249
+ /**
250
+ * Non-null, matching Linear's `AgentActivity.user: User!`. The column is
251
+ * still nullable — its FK is `ON DELETE SET NULL` — so this is enforced at
252
+ * the read boundary, next to the status check, rather than assumed.
253
+ */
254
+ userId: string;
255
+ content: LinearAgentActivityContent;
256
+ signal: LinearAgentActivitySignal | null;
215
257
  ephemeral: boolean;
216
258
  createdAt: string;
217
259
  updatedAt: string;
@@ -1,4 +1,4 @@
1
- import { oneOf, statePath, defineCheck, VACUITY_SENTINEL, childStatePath } from './chunk-4WXX5VPA.js';
1
+ import { oneOf, statePath, defineCheck, VACUITY_SENTINEL, childStatePath } from './chunk-W2JNYULF.js';
2
2
  import { z } from 'zod';
3
3
 
4
4
  // ../twin-slack/dist/src/check-params.js
@@ -178,7 +178,23 @@ var noReactionAdded = defineCheck({
178
178
  params: { reaction: emojiName, channel: channelName },
179
179
  substrate: "final",
180
180
  polarity: () => "negative",
181
- subject: () => null,
181
+ // The reaction name, because that is the literal this predicate compares
182
+ // against `reactions[].name` — the line below has said so since the check
183
+ // shipped, and this field said `null` anyway (F-1157).
184
+ //
185
+ // It is the sharpest case in the vocabulary for why that mattered. A NEGATIVE
186
+ // criterion asserting a scanned literal is absent reads a redactor's work as
187
+ // its own verdict: mask `reactions[].name` and the filter matches nothing, so
188
+ // `No "white_check_mark" reaction was added` passes — over an export where the
189
+ // agent added exactly that reaction. `probeRedactionSurvival` found it by
190
+ // destroying this literal in the FAILING world declared below and watching
191
+ // that world start to pass; it was the one `vacuous_pass` across all five
192
+ // twins' 45 declarations.
193
+ //
194
+ // Contrast `slack.no-message-posted` above, whose null is deliberate: its only
195
+ // literal RESOLVES a channel and the count it asserts on is derived. This one
196
+ // scans.
197
+ subject: ({ reaction }) => reaction,
182
198
  // The channel RESOLVES (a miss already skips); the reaction name is SCANNED.
183
199
  // D10: falsify the scanned one.
184
200
  vacuityMutant: (args) => ({ ...args, reaction: VACUITY_SENTINEL }),
@@ -1,4 +1,4 @@
1
- import { statePath, defineCheck, VACUITY_SENTINEL, childStatePath, VACUITY_SENTINEL_NUMBER } from './chunk-4WXX5VPA.js';
1
+ import { statePath, defineCheck, VACUITY_SENTINEL, childStatePath, VACUITY_SENTINEL_NUMBER, isRedacted } from './chunk-W2JNYULF.js';
2
2
  import { z } from 'zod';
3
3
 
4
4
  // ../twin-gmail/dist/src/check-params.js
@@ -437,7 +437,12 @@ var mailboxLabelCount = defineCheck({
437
437
  return { passed: false, status: "skipped", reason: "collection_truncated" };
438
438
  }
439
439
  if (final.mailboxes != null && !final.mailboxes.some((mb) => (mb.email ?? "").toLowerCase() === mailbox.toLowerCase())) {
440
- return { passed: false, status: "skipped", reason: `mailbox_not_found ("${mailbox}")` };
440
+ const eaten = final.mailboxes.some((mb) => isRedacted(mb.email));
441
+ return {
442
+ passed: false,
443
+ status: "skipped",
444
+ reason: eaten ? `mailbox_redacted ("${mailbox}")` : `mailbox_not_found ("${mailbox}")`
445
+ };
441
446
  }
442
447
  const ids = labelIdsFor(final, label);
443
448
  const labeled = new Set(final.messageLabels.filter((row) => ids.has((row.labelId ?? "").toLowerCase())).map((row) => (row.messageId ?? "").toLowerCase()));
@@ -1,4 +1,4 @@
1
- import { statePath, defineCheck, VACUITY_SENTINEL, VACUITY_SENTINEL_NUMBER, childStatePath } from './chunk-4WXX5VPA.js';
1
+ import { statePath, defineCheck, VACUITY_SENTINEL, VACUITY_SENTINEL_NUMBER, childStatePath } from './chunk-W2JNYULF.js';
2
2
  import { z } from 'zod';
3
3
 
4
4
  // ../twin-linear/dist/src/check-params.js
@@ -1,4 +1,4 @@
1
- import { oneOf, defineCheck, repoRef, VACUITY_SENTINEL_NUMBER, childStatePath, VACUITY_SENTINEL, statePath } from './chunk-4WXX5VPA.js';
1
+ import { oneOf, defineCheck, repoRef, VACUITY_SENTINEL_NUMBER, childStatePath, VACUITY_SENTINEL, statePath } from './chunk-W2JNYULF.js';
2
2
  import { z } from 'zod';
3
3
 
4
4
  // ../twin-github/dist/src/tape-assertable-tools.js
@@ -120,6 +120,103 @@ function probeStateCitation(def, args) {
120
120
  return passing;
121
121
  return probeArm(def, args, "failing", worlds.failing);
122
122
  }
123
+
124
+ // ../sdk/dist/check-redaction.js
125
+ var REDACTION_PLACEHOLDER = "[REDACTED]";
126
+ function isRedacted(value) {
127
+ return value === REDACTION_PLACEHOLDER;
128
+ }
129
+ function destroyLiteral(tree, literal) {
130
+ const wanted = literal.toLowerCase();
131
+ let hit = false;
132
+ const walk = (node) => {
133
+ if (typeof node === "string") {
134
+ if (node.toLowerCase() !== wanted)
135
+ return node;
136
+ hit = true;
137
+ return REDACTION_PLACEHOLDER;
138
+ }
139
+ if (Array.isArray(node))
140
+ return node.map(walk);
141
+ if (node === null || typeof node !== "object")
142
+ return node;
143
+ return Object.fromEntries(Object.entries(node).map(([key, value]) => [key, walk(value)]));
144
+ };
145
+ return { tree: walk(tree), hit };
146
+ }
147
+ function destroyWorld(world, literal) {
148
+ const seed = destroyLiteral(world.seed, literal);
149
+ const final = destroyLiteral(world.final, literal);
150
+ const tape = destroyLiteral(world.tape, literal);
151
+ return {
152
+ world: {
153
+ seed: seed.tree,
154
+ final: final.tree,
155
+ tape: tape.tree
156
+ },
157
+ hit: seed.hit || final.hit || tape.hit
158
+ };
159
+ }
160
+ var describeOutcome2 = (outcome) => `passed=${outcome.passed} status=${outcome.status ?? "-"} reason=${JSON.stringify(outcome.reason)}`;
161
+ function say(evaluate) {
162
+ try {
163
+ return evaluate();
164
+ } catch (error) {
165
+ return { threw: error instanceof Error ? error.message : String(error) };
166
+ }
167
+ }
168
+ var isRealPass2 = (outcome) => outcome.passed === true && (outcome.status === void 0 || outcome.status === "passed");
169
+ function classify(passing, failing) {
170
+ if ("threw" in passing)
171
+ return { guard: "throws", detail: `passing world: ${passing.threw}` };
172
+ if ("threw" in failing)
173
+ return { guard: "throws", detail: `failing world: ${failing.threw}` };
174
+ if (isRealPass2(failing)) {
175
+ return { guard: "vacuous_pass", detail: `failing world now passes \u2014 ${describeOutcome2(failing)}` };
176
+ }
177
+ if (passing.status === "skipped") {
178
+ return { guard: "abstains", detail: describeOutcome2(passing) };
179
+ }
180
+ if (isRealPass2(passing)) {
181
+ return { guard: "discriminates_anyway", detail: describeOutcome2(passing) };
182
+ }
183
+ return { guard: "false_fail", detail: `passing world now fails \u2014 ${describeOutcome2(passing)}` };
184
+ }
185
+ function probeRedactionSurvival(def, args) {
186
+ const worlds = def.discriminatingWorlds(args);
187
+ if (worlds === null)
188
+ return { kind: "declined" };
189
+ const subject = def.subject?.(args) ?? null;
190
+ const rows = [];
191
+ for (const param of Object.keys(def.params)) {
192
+ const literal = args[param];
193
+ if (typeof literal !== "string" || literal === "")
194
+ continue;
195
+ if (subject !== null && subject.toLowerCase().includes(literal.toLowerCase())) {
196
+ rows.push({
197
+ param,
198
+ guard: "declared_subject",
199
+ detail: `the engine skips the criterion before evaluate \u2014 subject ${JSON.stringify(subject)}`
200
+ });
201
+ continue;
202
+ }
203
+ const passing = destroyWorld(worlds.passing, literal);
204
+ const failing = destroyWorld(worlds.failing, literal);
205
+ if (!passing.hit && !failing.hit) {
206
+ rows.push({
207
+ param,
208
+ guard: "absent_from_world",
209
+ detail: `${JSON.stringify(literal)} appears in neither declared world`
210
+ });
211
+ continue;
212
+ }
213
+ rows.push({
214
+ param,
215
+ ...classify(say(() => def.evaluate(args, passing.world)), say(() => def.evaluate(args, failing.world)))
216
+ });
217
+ }
218
+ return { kind: "measured", rows };
219
+ }
123
220
  var VACUITY_SENTINEL = "pome-vacuity-never";
124
221
  var VACUITY_SENTINEL_SNAKE = "pome_vacuity_never";
125
222
  var VACUITY_SENTINEL_NUMBER = 987654321;
@@ -235,4 +332,4 @@ function parseCheck(def, text) {
235
332
  return args;
236
333
  }
237
334
 
238
- export { VACUITY_SENTINEL, VACUITY_SENTINEL_NUMBER, VACUITY_SENTINEL_SNAKE, checkNearMissPattern, checkPattern, checksDigest, childStatePath, defineCheck, oneOf, parseCheck, probeDiscrimination, probeStateCitation, renderCheck, repoRef, resolveStatePath, statePath, templateSlots };
335
+ export { REDACTION_PLACEHOLDER, VACUITY_SENTINEL, VACUITY_SENTINEL_NUMBER, VACUITY_SENTINEL_SNAKE, checkNearMissPattern, checkPattern, checksDigest, childStatePath, defineCheck, isRedacted, oneOf, parseCheck, probeDiscrimination, probeRedactionSurvival, probeStateCitation, renderCheck, repoRef, resolveStatePath, statePath, templateSlots };
@@ -1,4 +1,4 @@
1
- import { oneOf, statePath, defineCheck, VACUITY_SENTINEL_NUMBER, VACUITY_SENTINEL, childStatePath } from './chunk-4WXX5VPA.js';
1
+ import { oneOf, statePath, defineCheck, VACUITY_SENTINEL_NUMBER, VACUITY_SENTINEL, childStatePath } from './chunk-W2JNYULF.js';
2
2
  import { z } from 'zod';
3
3
 
4
4
  // ../twin-stripe/dist/src/check-params.js
package/dist/dsl.js CHANGED
@@ -1,2 +1,2 @@
1
1
  import './chunk-ZXE6LAM3.js';
2
- export { VACUITY_SENTINEL, VACUITY_SENTINEL_NUMBER, VACUITY_SENTINEL_SNAKE, checkNearMissPattern, checkPattern, checksDigest, childStatePath, defineCheck, oneOf, parseCheck, probeDiscrimination, probeStateCitation, renderCheck, repoRef, resolveStatePath, statePath, templateSlots } from './chunk-4WXX5VPA.js';
2
+ export { REDACTION_PLACEHOLDER, VACUITY_SENTINEL, VACUITY_SENTINEL_NUMBER, VACUITY_SENTINEL_SNAKE, checkNearMissPattern, checkPattern, checksDigest, childStatePath, defineCheck, isRedacted, oneOf, parseCheck, probeDiscrimination, probeRedactionSurvival, probeStateCitation, renderCheck, repoRef, resolveStatePath, statePath, templateSlots } from './chunk-W2JNYULF.js';
package/dist/github.js CHANGED
@@ -1,2 +1,2 @@
1
- export { GITHUB_CHECKS, defaultSeedState, parseSeed, seedSchema } from './chunk-5SJ4PVO5.js';
2
- import './chunk-4WXX5VPA.js';
1
+ export { GITHUB_CHECKS, defaultSeedState, parseSeed, seedSchema } from './chunk-UCV6YLN2.js';
2
+ import './chunk-W2JNYULF.js';
package/dist/gmail.js CHANGED
@@ -1,2 +1,2 @@
1
- export { GMAIL_CHECKS, defaultSeedState, gmailSeedSchema, parseSeed } from './chunk-GYFGMULG.js';
2
- import './chunk-4WXX5VPA.js';
1
+ export { GMAIL_CHECKS, defaultSeedState, gmailSeedSchema, parseSeed } from './chunk-SA23X6PB.js';
2
+ import './chunk-W2JNYULF.js';
package/dist/index.js CHANGED
@@ -1,15 +1,15 @@
1
1
  import './chunk-ZXE6LAM3.js';
2
- import { GITHUB_CHECKS } from './chunk-5SJ4PVO5.js';
3
- export { GITHUB_CHECKS, defaultSeedState as defaultGitHubSeed, seedSchema as githubSeedSchema, parseSeed as parseGitHubSeed } from './chunk-5SJ4PVO5.js';
4
- import { GMAIL_CHECKS } from './chunk-GYFGMULG.js';
5
- export { GMAIL_CHECKS, defaultSeedState as defaultGmailSeed, gmailSeedSchema, parseSeed as parseGmailSeed } from './chunk-GYFGMULG.js';
6
- import { LINEAR_CHECKS } from './chunk-NORTPYDQ.js';
7
- export { LINEAR_CHECKS, defaultSeedState as defaultLinearSeed, linearSeedSchema, parseSeed as parseLinearSeed } from './chunk-NORTPYDQ.js';
8
- import { SLACK_CHECKS } from './chunk-SJ6SVRAA.js';
9
- export { SLACK_CHECKS, defaultSeedState as defaultSlackSeed, parseSeed as parseSlackSeed, seedSchema as slackSeedSchema } from './chunk-SJ6SVRAA.js';
10
- import { STRIPE_CHECKS } from './chunk-IVENH4KX.js';
11
- export { STRIPE_CHECKS, defaultSeed as defaultStripeSeed, parseSeed as parseStripeSeed, seedSchema as stripeSeedSchema } from './chunk-IVENH4KX.js';
12
- export { VACUITY_SENTINEL, VACUITY_SENTINEL_NUMBER, VACUITY_SENTINEL_SNAKE, checkNearMissPattern, checkPattern, checksDigest, childStatePath, defineCheck, oneOf, parseCheck, probeDiscrimination, probeStateCitation, renderCheck, repoRef, resolveStatePath, statePath, templateSlots } from './chunk-4WXX5VPA.js';
2
+ import { GITHUB_CHECKS } from './chunk-UCV6YLN2.js';
3
+ export { GITHUB_CHECKS, defaultSeedState as defaultGitHubSeed, seedSchema as githubSeedSchema, parseSeed as parseGitHubSeed } from './chunk-UCV6YLN2.js';
4
+ import { GMAIL_CHECKS } from './chunk-SA23X6PB.js';
5
+ export { GMAIL_CHECKS, defaultSeedState as defaultGmailSeed, gmailSeedSchema, parseSeed as parseGmailSeed } from './chunk-SA23X6PB.js';
6
+ import { LINEAR_CHECKS } from './chunk-THOSO63W.js';
7
+ export { LINEAR_CHECKS, defaultSeedState as defaultLinearSeed, linearSeedSchema, parseSeed as parseLinearSeed } from './chunk-THOSO63W.js';
8
+ import { SLACK_CHECKS } from './chunk-5PDF3GCK.js';
9
+ export { SLACK_CHECKS, defaultSeedState as defaultSlackSeed, parseSeed as parseSlackSeed, seedSchema as slackSeedSchema } from './chunk-5PDF3GCK.js';
10
+ import { STRIPE_CHECKS } from './chunk-XOUAZPNB.js';
11
+ export { STRIPE_CHECKS, defaultSeed as defaultStripeSeed, parseSeed as parseStripeSeed, seedSchema as stripeSeedSchema } from './chunk-XOUAZPNB.js';
12
+ export { REDACTION_PLACEHOLDER, VACUITY_SENTINEL, VACUITY_SENTINEL_NUMBER, VACUITY_SENTINEL_SNAKE, checkNearMissPattern, checkPattern, checksDigest, childStatePath, defineCheck, isRedacted, oneOf, parseCheck, probeDiscrimination, probeRedactionSurvival, probeStateCitation, renderCheck, repoRef, resolveStatePath, statePath, templateSlots } from './chunk-W2JNYULF.js';
13
13
 
14
14
  // src/index.ts
15
15
  var CHECKS_TWIN_NAMES = ["github", "slack", "stripe", "gmail", "linear"];
package/dist/linear.js CHANGED
@@ -1,2 +1,2 @@
1
- export { LINEAR_CHECKS, defaultSeedState, linearSeedSchema, parseSeed } from './chunk-NORTPYDQ.js';
2
- import './chunk-4WXX5VPA.js';
1
+ export { LINEAR_CHECKS, defaultSeedState, linearSeedSchema, parseSeed } from './chunk-THOSO63W.js';
2
+ import './chunk-W2JNYULF.js';
package/dist/slack.js CHANGED
@@ -1,2 +1,2 @@
1
- export { SLACK_CHECKS, defaultSeedState, parseSeed, seedSchema } from './chunk-SJ6SVRAA.js';
2
- import './chunk-4WXX5VPA.js';
1
+ export { SLACK_CHECKS, defaultSeedState, parseSeed, seedSchema } from './chunk-5PDF3GCK.js';
2
+ import './chunk-W2JNYULF.js';
package/dist/stripe.js CHANGED
@@ -1,2 +1,2 @@
1
- export { STRIPE_CHECKS, defaultSeed, parseSeed, seedSchema } from './chunk-IVENH4KX.js';
2
- import './chunk-4WXX5VPA.js';
1
+ export { STRIPE_CHECKS, defaultSeed, parseSeed, seedSchema } from './chunk-XOUAZPNB.js';
2
+ import './chunk-W2JNYULF.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pome-sh/checks",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Pome's grading vocabulary — the check declarations, seed schemas and default seeds of all five digital twins, plus the check DSL they are written in. Declarations only: no twin server, no database, no routes, no tools.",
5
5
  "private": false,
6
6
  "type": "module",