@pome-sh/checks 0.3.0 → 0.3.2

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,33 @@
1
1
  # @pome-sh/checks
2
2
 
3
+ ## 0.3.2 — 2026-08-22
4
+
5
+ **No consumer-visible change.** The nine per-workspace `vitest.config.ts` files
6
+ were replaced by one root config declaring every workspace as a vitest project,
7
+ and the per-workspace `"test": "vitest run"` scripts were removed in favour of a
8
+ single root `test`. Test selection is byte-identical -- 3,748 cases before and
9
+ after, same names. Nothing about this package's source, exports, or shipped
10
+ artifact moved. Listed only because a manifest changed, which the next release
11
+ of this package carries.
12
+
13
+ ## 0.3.1 — 2026-08-18
14
+
15
+ **`slackSeedSchema` accepts a `files` key** (F-1509). This package re-exports
16
+ twin-slack's seed schema (`slackSeedSchema` / `parseSlackSeed` /
17
+ `defaultSlackSeed`), and that schema gained
18
+ `files: [{id?, name, title?, filetype?, user?, channels?, content?}]` so a Slack
19
+ world can be seeded with files rather than only acquiring them through a
20
+ `files.upload` mutation.
21
+
22
+ **No check changed.** `SLACK_CHECKS` is the same tuple, every compiled pattern is
23
+ byte-identical, and `checksDigest` does not move — so a cloud pin does NOT have to
24
+ catch up for this release, unlike 0.3.0 above. The seed schema is a separate export
25
+ from the check vocabulary and only the former widened.
26
+
27
+ **Patch, not minor.** `files` defaults to `[]`, so every seed that parsed before
28
+ parses to the same value, and no consumer must act. It is a widening of an INPUT
29
+ schema, which is the direction that cannot break a caller.
30
+
3
31
  ## 0.3.0 — 2026-08-14
4
32
 
5
33
  **`` `add_issue_comment` was called `` binds, and the github tape slot widens
@@ -35,6 +35,15 @@ export declare const seedSchema: z.ZodObject<{
35
35
  }, z.core.$strip>>>;
36
36
  }, z.core.$strip>>>;
37
37
  }, z.core.$strip>>>;
38
+ files: z.ZodDefault<z.ZodArray<z.ZodObject<{
39
+ id: z.ZodOptional<z.ZodString>;
40
+ name: z.ZodString;
41
+ title: z.ZodOptional<z.ZodString>;
42
+ filetype: z.ZodDefault<z.ZodString>;
43
+ user: z.ZodOptional<z.ZodString>;
44
+ channels: z.ZodDefault<z.ZodArray<z.ZodString>>;
45
+ content: z.ZodOptional<z.ZodString>;
46
+ }, z.core.$strip>>>;
38
47
  emoji: z.ZodDefault<z.ZodArray<z.ZodObject<{
39
48
  name: z.ZodString;
40
49
  url: z.ZodOptional<z.ZodString>;
@@ -44,10 +44,40 @@ export type SeedEmoji = {
44
44
  /** Alias target name → stored as `alias:<name>`. */
45
45
  alias?: string;
46
46
  };
47
+ /**
48
+ * A file present in the world before the agent touches it (F-1509).
49
+ *
50
+ * Until this existed the `files` table had exactly ONE writer — `filesUpload`,
51
+ * a mutation — so every read of `files.list` / `files.info` against a freshly
52
+ * seeded world answered on an empty table. That is not a serializer gap and it
53
+ * was not a deliberate ruling; it is simply a hole in the seed vocabulary, and
54
+ * it made `files.list` a surface no read-only comparison could measure.
55
+ *
56
+ * `user` and `channels` carry SEED HANDLES (a user `name` / channel `name`), the
57
+ * same currency `SeedMessage.user` and `SeedChannel.members` use, so a seed never
58
+ * has to know a minted id. Both also accept an explicit id.
59
+ */
60
+ export type SeedFile = {
61
+ /** Explicit stable id (`F…`). Minted from the workspace counter when absent. */
62
+ id?: string;
63
+ /** Filename, e.g. `runbook.md`. */
64
+ name: string;
65
+ /** Display title. Defaults to `name`, matching `files.upload`. */
66
+ title?: string;
67
+ /** Slack filetype (`text`, `markdown`, `javascript`, …). Drives `mimetype`. */
68
+ filetype?: string;
69
+ /** Uploader — a seed user handle or id. Defaults to the seed's agent user. */
70
+ user?: string;
71
+ /** Channels the file is shared into — seed channel handles or ids. */
72
+ channels?: string[];
73
+ /** File body. `size` is derived from it, as `files.upload` derives it. */
74
+ content?: string;
75
+ };
47
76
  export type SlackStateSeed = {
48
77
  team?: SeedTeam;
49
78
  users?: SeedUser[];
50
79
  channels?: SeedChannel[];
80
+ files?: SeedFile[];
51
81
  emoji?: SeedEmoji[];
52
82
  };
53
83
  export type WorkspaceRow = {
@@ -380,6 +380,18 @@ var seedSchema = z.object({
380
380
  reactions: z.array(z.object({ name: z.string(), user: z.string() })).default([])
381
381
  })).default([])
382
382
  })).default([]),
383
+ // F-1509. Files present in the world before the agent runs. `user` and
384
+ // `channels` are seed HANDLES (a user/channel `name`) or ids — the same
385
+ // currency `channels[].members` and `channels[].messages[].user` already use.
386
+ files: z.array(z.object({
387
+ id: z.string().regex(/^F[A-Z0-9_]+$/).optional(),
388
+ name: z.string().min(1),
389
+ title: z.string().optional(),
390
+ filetype: z.string().min(1).default("text"),
391
+ user: z.string().optional(),
392
+ channels: z.array(z.string()).default([]),
393
+ content: z.string().optional()
394
+ })).default([]),
383
395
  emoji: z.array(z.object({
384
396
  name: z.string().regex(/^[a-z0-9_+-]{1,100}$/),
385
397
  url: z.string().url().optional(),
package/dist/index.js CHANGED
@@ -5,8 +5,8 @@ import { GMAIL_CHECKS } from './chunk-KTTJCEDH.js';
5
5
  export { GMAIL_CHECKS, defaultSeedState as defaultGmailSeed, gmailSeedSchema, parseSeed as parseGmailSeed } from './chunk-KTTJCEDH.js';
6
6
  import { LINEAR_CHECKS } from './chunk-THOSO63W.js';
7
7
  export { LINEAR_CHECKS, defaultSeedState as defaultLinearSeed, linearSeedSchema, parseSeed as parseLinearSeed } from './chunk-THOSO63W.js';
8
- import { SLACK_CHECKS } from './chunk-MJOHK2NI.js';
9
- export { SLACK_CHECKS, defaultSeedState as defaultSlackSeed, parseSeed as parseSlackSeed, seedSchema as slackSeedSchema } from './chunk-MJOHK2NI.js';
8
+ import { SLACK_CHECKS } from './chunk-ZXS3NTSQ.js';
9
+ export { SLACK_CHECKS, defaultSeedState as defaultSlackSeed, parseSeed as parseSlackSeed, seedSchema as slackSeedSchema } from './chunk-ZXS3NTSQ.js';
10
10
  import { STRIPE_CHECKS } from './chunk-XOUAZPNB.js';
11
11
  export { STRIPE_CHECKS, defaultSeed as defaultStripeSeed, parseSeed as parseStripeSeed, seedSchema as stripeSeedSchema } from './chunk-XOUAZPNB.js';
12
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';
package/dist/slack.js CHANGED
@@ -1,2 +1,2 @@
1
- export { SLACK_CHECKS, defaultSeedState, parseSeed, seedSchema } from './chunk-MJOHK2NI.js';
1
+ export { SLACK_CHECKS, defaultSeedState, parseSeed, seedSchema } from './chunk-ZXS3NTSQ.js';
2
2
  import './chunk-W2JNYULF.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pome-sh/checks",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
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",
@@ -67,7 +67,6 @@
67
67
  ],
68
68
  "scripts": {
69
69
  "build": "tsup && node ../../scripts/bundle-declarations.mjs .",
70
- "test": "vitest run",
71
70
  "typecheck": "tsc -p tsconfig.json --noEmit",
72
71
  "prepublishOnly": "npm run build"
73
72
  },