@pome-sh/checks 0.3.0 → 0.3.1

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,23 @@
1
1
  # @pome-sh/checks
2
2
 
3
+ ## 0.3.1 — 2026-08-18
4
+
5
+ **`slackSeedSchema` accepts a `files` key** (F-1509). This package re-exports
6
+ twin-slack's seed schema (`slackSeedSchema` / `parseSlackSeed` /
7
+ `defaultSlackSeed`), and that schema gained
8
+ `files: [{id?, name, title?, filetype?, user?, channels?, content?}]` so a Slack
9
+ world can be seeded with files rather than only acquiring them through a
10
+ `files.upload` mutation.
11
+
12
+ **No check changed.** `SLACK_CHECKS` is the same tuple, every compiled pattern is
13
+ byte-identical, and `checksDigest` does not move — so a cloud pin does NOT have to
14
+ catch up for this release, unlike 0.3.0 above. The seed schema is a separate export
15
+ from the check vocabulary and only the former widened.
16
+
17
+ **Patch, not minor.** `files` defaults to `[]`, so every seed that parsed before
18
+ parses to the same value, and no consumer must act. It is a widening of an INPUT
19
+ schema, which is the direction that cannot break a caller.
20
+
3
21
  ## 0.3.0 — 2026-08-14
4
22
 
5
23
  **`` `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.1",
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",