@prestack/thread 0.0.2 → 0.1.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.
Files changed (183) hide show
  1. package/CHANGELOG.md +98 -0
  2. package/dist/core/{asking.d.ts → answers.d.ts} +6 -14
  3. package/dist/core/{asking.js → answers.js} +13 -332
  4. package/dist/core/{asking.ts → answers.ts} +14 -357
  5. package/dist/core/attach.js +2 -2
  6. package/dist/core/attach.ts +2 -3
  7. package/dist/core/chain.js +4 -11
  8. package/dist/core/chain.ts +4 -3
  9. package/dist/core/client.d.ts +57 -0
  10. package/dist/core/client.js +186 -0
  11. package/dist/core/client.ts +227 -0
  12. package/dist/core/descend.d.ts +2 -0
  13. package/dist/core/descend.js +109 -16
  14. package/dist/core/descend.ts +120 -16
  15. package/dist/core/files.d.ts +45 -0
  16. package/dist/core/files.js +95 -0
  17. package/dist/core/files.ts +137 -0
  18. package/dist/core/init.d.ts +1 -0
  19. package/dist/core/init.js +10 -2
  20. package/dist/core/init.ts +8 -2
  21. package/dist/core/invoked.js +1 -1
  22. package/dist/core/invoked.ts +1 -1
  23. package/dist/core/rows.d.ts +2 -0
  24. package/dist/core/rows.js +65 -0
  25. package/dist/core/rows.ts +58 -0
  26. package/dist/core/tree.js +1 -1
  27. package/dist/core/tree.ts +1 -1
  28. package/dist/derivation/attach.js +0 -12
  29. package/dist/derivation/attach.ts +0 -12
  30. package/dist/derivation/generators/build.js +8 -7
  31. package/dist/derivation/generators/build.ts +8 -7
  32. package/dist/derivation/generators/release.d.ts +1 -1
  33. package/dist/derivation/generators/release.js +15 -23
  34. package/dist/derivation/generators/release.ts +15 -15
  35. package/dist/integrations/attach.js +1 -19
  36. package/dist/integrations/attach.ts +1 -19
  37. package/dist/integrations/generators/read.js +2 -2
  38. package/dist/integrations/generators/read.ts +4 -4
  39. package/dist/integrations/generators/vault.js +4 -12
  40. package/dist/integrations/generators/vault.ts +4 -4
  41. package/dist/integrations/module.js +5 -3
  42. package/dist/integrations/module.ts +5 -3
  43. package/dist/integrations/vault.js +5 -5
  44. package/dist/integrations/vault.ts +5 -5
  45. package/dist/integrity/attach.js +0 -12
  46. package/dist/integrity/attach.ts +0 -12
  47. package/dist/integrity/check-threads.js +1 -1
  48. package/dist/integrity/check-threads.ts +1 -1
  49. package/dist/integrity/constraint.d.ts +11 -2
  50. package/dist/integrity/constraint.js +163 -20
  51. package/dist/integrity/constraint.ts +174 -22
  52. package/dist/integrity/generators/compiler.js +1 -1
  53. package/dist/integrity/generators/compiler.ts +1 -1
  54. package/dist/integrity/generators/gate.js +8 -16
  55. package/dist/integrity/generators/gate.ts +8 -7
  56. package/dist/integrity/generators/publish.js +14 -26
  57. package/dist/integrity/generators/publish.ts +14 -17
  58. package/dist/integrity/generators/trial.d.ts +2 -2
  59. package/dist/integrity/generators/trial.js +108 -50
  60. package/dist/integrity/generators/trial.ts +107 -48
  61. package/dist/integrity/lint.js +3 -3
  62. package/dist/integrity/lint.ts +3 -3
  63. package/dist/integrity/lsp/diagnostics.js +1 -1
  64. package/dist/integrity/lsp/diagnostics.ts +1 -1
  65. package/dist/integrity/lsp/lint.js +1 -1
  66. package/dist/integrity/lsp/lint.ts +1 -1
  67. package/dist/integrity/slopnator.d.ts +1 -14
  68. package/dist/integrity/slopnator.js +8 -40
  69. package/dist/integrity/slopnator.ts +9 -51
  70. package/dist/integrity/slopnators/sl_broken_lineage.js +4 -2
  71. package/dist/integrity/slopnators/sl_broken_lineage.ts +4 -2
  72. package/dist/integrity/slopnators/sl_declared_elsewhere.js +24 -3
  73. package/dist/integrity/slopnators/sl_declared_elsewhere.ts +24 -3
  74. package/dist/integrity/slopnators/sl_derived_drift.js +10 -4
  75. package/dist/integrity/slopnators/sl_derived_drift.ts +10 -4
  76. package/dist/integrity/slopnators/sl_inert_island.js +7 -13
  77. package/dist/integrity/slopnators/sl_inert_island.ts +7 -16
  78. package/dist/integrity/slopnators/sl_inert_slopnator.js +8 -8
  79. package/dist/integrity/slopnators/sl_inert_slopnator.ts +8 -8
  80. package/dist/integrity/slopnators/sl_missing_row.js +14 -9
  81. package/dist/integrity/slopnators/sl_missing_row.ts +14 -10
  82. package/dist/integrity/slopnators/sl_no_child_process.js +8 -8
  83. package/dist/integrity/slopnators/sl_no_child_process.ts +8 -8
  84. package/dist/integrity/slopnators/sl_no_import_cycle.js +1 -1
  85. package/dist/integrity/slopnators/sl_no_import_cycle.ts +1 -1
  86. package/dist/integrity/slopnators/sl_no_such_command.js +20 -5
  87. package/dist/integrity/slopnators/sl_no_such_command.ts +22 -5
  88. package/dist/integrity/slopnators/sl_only_takes_a_literal.js +8 -8
  89. package/dist/integrity/slopnators/sl_only_takes_a_literal.ts +8 -8
  90. package/dist/integrity/slopnators/sl_stale_path.js +91 -18
  91. package/dist/integrity/slopnators/sl_stale_path.ts +97 -18
  92. package/dist/integrity/slopnators/sl_twice_meant.js +25 -2
  93. package/dist/integrity/slopnators/sl_twice_meant.ts +28 -2
  94. package/dist/integrity/slopnators/sl_twice_parented.js +26 -5
  95. package/dist/integrity/slopnators/sl_twice_parented.ts +26 -5
  96. package/dist/integrity/slopnators/sl_undeclared_node.js +18 -2
  97. package/dist/integrity/slopnators/sl_undeclared_node.ts +18 -2
  98. package/dist/integrity/slopnators/sl_undeclared_operation.js +3 -1
  99. package/dist/integrity/slopnators/sl_undeclared_operation.ts +3 -1
  100. package/dist/integrity/slopnators/sl_undeclared_variant.js +6 -2
  101. package/dist/integrity/slopnators/sl_undeclared_variant.ts +6 -2
  102. package/dist/integrity/slopnators/sl_ungoverned_island.js +3 -4
  103. package/dist/integrity/slopnators/sl_ungoverned_island.ts +3 -4
  104. package/dist/integrity/slopnators/sl_unkept_rows.js +1 -1
  105. package/dist/integrity/slopnators/sl_unkept_rows.ts +1 -1
  106. package/dist/integrity/slopnators/sl_unpaired_member.js +13 -8
  107. package/dist/integrity/slopnators/sl_unpaired_member.ts +16 -8
  108. package/dist/integrity/slopnators/sl_unpaired_slopnator.js +16 -3
  109. package/dist/integrity/slopnators/sl_unpaired_slopnator.ts +16 -3
  110. package/dist/integrity/slopnators/sl_unthreaded.d.ts +1 -0
  111. package/dist/integrity/slopnators/sl_unthreaded.js +18 -10
  112. package/dist/integrity/slopnators/sl_unthreaded.ts +19 -11
  113. package/dist/integrity/slopnators/sl_untranslated_key.js +1 -1
  114. package/dist/integrity/slopnators/sl_untranslated_key.ts +1 -1
  115. package/dist/integrity/slopnators/sl_unversioned.js +16 -2
  116. package/dist/integrity/slopnators/sl_unversioned.ts +16 -2
  117. package/dist/integrity/sweep.js +17 -3
  118. package/dist/integrity/sweep.ts +20 -3
  119. package/dist/knowledge/attach.js +0 -6
  120. package/dist/knowledge/attach.ts +0 -6
  121. package/dist/knowledge/generators/docsgen.js +12 -3
  122. package/dist/knowledge/generators/docsgen.ts +12 -2
  123. package/dist/knowledge/generators/glossary.js +1 -1
  124. package/dist/knowledge/generators/glossary.ts +1 -1
  125. package/dist/operations/attach.js +2 -26
  126. package/dist/operations/attach.ts +2 -27
  127. package/dist/operations/dispatch.js +2 -3
  128. package/dist/operations/dispatch.ts +2 -3
  129. package/dist/operations/generators/capability.js +4 -7
  130. package/dist/operations/generators/capability.ts +3 -6
  131. package/dist/operations/generators/compile.js +8 -13
  132. package/dist/operations/generators/compile.ts +8 -4
  133. package/dist/operations/generators/permits.js +4 -13
  134. package/dist/operations/generators/permits.ts +3 -3
  135. package/dist/operations/generators/seed.js +5 -2
  136. package/dist/operations/generators/seed.ts +6 -2
  137. package/dist/operations/generators/trial.js +10 -10
  138. package/dist/operations/generators/trial.ts +10 -10
  139. package/dist/operations/http.js +4 -1
  140. package/dist/operations/http.ts +6 -1
  141. package/package.json +2 -2
  142. package/dist/core/cli.d.ts +0 -2
  143. package/dist/core/cli.js +0 -1761
  144. package/dist/core/cli.ts +0 -2004
  145. package/dist/core/generators/meta.d.ts +0 -2
  146. package/dist/core/generators/meta.js +0 -829
  147. package/dist/core/generators/meta.ts +0 -1006
  148. package/dist/derivation/generators/derivation.d.ts +0 -3
  149. package/dist/derivation/generators/derivation.js +0 -273
  150. package/dist/derivation/generators/derivation.ts +0 -347
  151. package/dist/derivation/makers/release.d.ts +0 -1
  152. package/dist/derivation/makers/release.js +0 -107
  153. package/dist/derivation/makers/release.ts +0 -135
  154. package/dist/integrations/generators/secret.d.ts +0 -1
  155. package/dist/integrations/generators/secret.js +0 -233
  156. package/dist/integrations/generators/secret.ts +0 -289
  157. package/dist/integrations/generators/target.d.ts +0 -1
  158. package/dist/integrations/generators/target.js +0 -775
  159. package/dist/integrations/generators/target.ts +0 -944
  160. package/dist/integrity/generators/rule.d.ts +0 -2
  161. package/dist/integrity/generators/rule.js +0 -213
  162. package/dist/integrity/generators/rule.ts +0 -271
  163. package/dist/integrity/generators/seal.d.ts +0 -4
  164. package/dist/integrity/generators/seal.js +0 -101
  165. package/dist/integrity/generators/seal.ts +0 -117
  166. package/dist/integrity/sealed.d.ts +0 -1
  167. package/dist/integrity/sealed.js +0 -56
  168. package/dist/integrity/sealed.ts +0 -56
  169. package/dist/knowledge/generators/skills.d.ts +0 -1
  170. package/dist/knowledge/generators/skills.js +0 -222
  171. package/dist/knowledge/generators/skills.ts +0 -263
  172. package/dist/operations/generators/grant.d.ts +0 -1
  173. package/dist/operations/generators/grant.js +0 -267
  174. package/dist/operations/generators/grant.ts +0 -336
  175. package/dist/operations/generators/operation.d.ts +0 -1
  176. package/dist/operations/generators/operation.js +0 -811
  177. package/dist/operations/generators/operation.ts +0 -972
  178. package/dist/operations/makers/capability.d.ts +0 -1
  179. package/dist/operations/makers/capability.js +0 -117
  180. package/dist/operations/makers/capability.ts +0 -166
  181. package/dist/operations/makers/trial.d.ts +0 -1
  182. package/dist/operations/makers/trial.js +0 -413
  183. package/dist/operations/makers/trial.ts +0 -520
@@ -1,4 +1,4 @@
1
- import { type Constraint } from './constraint.ts';
1
+ import { type Constraint, type Proof } from './constraint.ts';
2
2
  export declare const NOT_WRITTEN: unique symbol;
3
3
  export declare const SHIPPED: string;
4
4
  export declare const SEEDED: string;
@@ -48,14 +48,6 @@ export type Visiting = Reading & {
48
48
  export declare const reads: (one: Slopnator) => one is Reading;
49
49
  export declare const visits: (one: Slopnator) => one is Visiting;
50
50
  export declare const sweeps: (one: Slopnator) => one is Reading;
51
- export interface Sourced {
52
- readonly at: string;
53
- readonly source: string;
54
- }
55
- export type Proof = string | {
56
- readonly files: readonly Sourced[];
57
- readonly at: string;
58
- };
59
51
  export interface Byproduct {
60
52
  readonly path: string;
61
53
  readonly content: string;
@@ -69,11 +61,6 @@ export declare class UnloadableSlopnatorError extends Error {
69
61
  export declare class UnreadableRulesError extends Error {
70
62
  constructor(at: string, because: string);
71
63
  }
72
- export declare class BrokenSealError extends Error {
73
- constructor(at: string, why: string);
74
- }
75
- export declare function unsealed(home?: string): readonly string[];
76
- export declare function verify(): void;
77
64
  export declare function load(root: string, all: readonly Constraint[]): Promise<ReadonlyMap<string, Slopnator>>;
78
65
  export declare function proofsOf(rule: Constraint, slopnators: ReadonlyMap<string, Slopnator>): {
79
66
  readonly wrong: readonly Proof[];
@@ -7,18 +7,15 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
7
7
  return path;
8
8
  };
9
9
  import { spawnSync } from 'node:child_process';
10
- import { createHash } from 'node:crypto';
11
- import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs';
12
- import { dirname, join, sep } from 'node:path';
10
+ import { existsSync, readFileSync, readdirSync, writeFileSync } from "../core/files.js";
11
+ import { dirname, join } from 'node:path';
13
12
  import { fileURLToPath, pathToFileURL } from 'node:url';
14
13
  import { invoked } from "../core/invoked.js";
15
14
  import { listBounds, quoted, withSeed } from "../core/rows.js";
16
15
  import { CONSTRAINTS } from "./constraint.js";
17
- import { SEALED } from "./sealed.js";
18
16
  import { findTree, inTree } from "../core/tree.js";
19
17
  export const NOT_WRITTEN = Symbol.for('thread.slopnator.not_written');
20
18
  const HOME = dirname(fileURLToPath(import.meta.url));
21
- const BUILT = dirname(dirname(HOME));
22
19
  export const SHIPPED = `${HOME}/slopnators`;
23
20
  export const SEEDED = `${findTree().name}/slopnators`;
24
21
  function homes(root) {
@@ -103,40 +100,7 @@ export class UnreadableRulesError extends Error {
103
100
  this.name = 'UnreadableRulesError';
104
101
  }
105
102
  }
106
- export class BrokenSealError extends Error {
107
- constructor(at, why) {
108
- super(`${at} ${why} — this package is not the one that was published, so nothing it refuses or allows can be trusted. ` +
109
- 'Reinstall it (`pnpm install --frozen-lockfile` re-verifies the published bytes), or if you meant to change it, run `thread seal` and publish that.');
110
- this.name = 'BrokenSealError';
111
- }
112
- }
113
- const INSTALLED = HOME.includes(`${sep}node_modules${sep}`);
114
- export function unsealed(home = HOME) {
115
- const broken = [];
116
- for (const [at, hash] of Object.entries(SEALED)) {
117
- let held;
118
- try {
119
- held = readFileSync(join(home, at));
120
- }
121
- catch {
122
- broken.push(`${at} is missing`);
123
- continue;
124
- }
125
- if (createHash('sha256').update(held).digest('hex') !== hash)
126
- broken.push(`${at} differs from the seal`);
127
- }
128
- return broken;
129
- }
130
- export function verify() {
131
- if (!INSTALLED)
132
- return;
133
- const broken = unsealed(BUILT);
134
- const first = broken[0];
135
- if (first !== undefined)
136
- throw new BrokenSealError(first.split(' ')[0] ?? '', first.split(' ').slice(1).join(' '));
137
- }
138
103
  export async function load(root, all) {
139
- verify();
140
104
  const found = new Map();
141
105
  for (const rule of all) {
142
106
  const name = slopnatorName(rule.id);
@@ -161,7 +125,12 @@ export async function load(root, all) {
161
125
  return found;
162
126
  }
163
127
  export function proofsOf(rule, slopnators) {
164
- const slopnated = slopnators.get(slopnatorName(rule.id))?.proves;
128
+ const slopnator = slopnators.get(slopnatorName(rule.id));
129
+ const slopnated = slopnator?.proves;
130
+ const own = (slopnated?.wrong.length ?? 0) + (slopnated?.right.length ?? 0);
131
+ if (slopnator !== undefined && !reads(slopnator) && own > 0) {
132
+ return { wrong: slopnated?.wrong ?? [], right: slopnated?.right ?? [] };
133
+ }
165
134
  return { wrong: [rule.wrong, ...(slopnated?.wrong ?? [])], right: [rule.right, ...(slopnated?.right ?? [])] };
166
135
  }
167
136
  export function scaffold() {
@@ -176,7 +145,6 @@ export const slopnator: Slopnator = {
176
145
  }
177
146
  export function write(root, byproduct) {
178
147
  const path = join(root, byproduct.path);
179
- mkdirSync(dirname(path), { recursive: true });
180
148
  writeFileSync(path, byproduct.content, 'utf8');
181
149
  }
182
150
  export function onDisk(root) {
@@ -1,23 +1,19 @@
1
1
  import { spawnSync } from 'node:child_process'
2
- import { createHash } from 'node:crypto'
3
- import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs'
4
- import { dirname, join, sep } from 'node:path'
2
+ import { existsSync, readFileSync, readdirSync, writeFileSync } from '../core/files.ts'
3
+ import { dirname, join } from 'node:path'
5
4
  import { fileURLToPath, pathToFileURL } from 'node:url'
6
5
 
7
6
  import { invoked } from '../core/invoked.ts'
8
7
 
9
8
  import { listBounds, quoted, withSeed } from '../core/rows.ts'
10
9
 
11
- import { CONSTRAINTS, type Constraint } from './constraint.ts'
12
- import { SEALED } from './sealed.ts'
10
+ import { CONSTRAINTS, type Constraint, type Proof, type Sourced } from './constraint.ts'
13
11
  import { findTree, inTree } from '../core/tree.ts'
14
12
 
15
13
  export const NOT_WRITTEN = Symbol.for('thread.slopnator.not_written')
16
14
 
17
15
  const HOME = dirname(fileURLToPath(import.meta.url))
18
16
 
19
- const BUILT = dirname(dirname(HOME))
20
-
21
17
  export const SHIPPED = `${HOME}/slopnators`
22
18
 
23
19
  export const SEEDED = `${findTree().name}/slopnators`
@@ -98,13 +94,6 @@ export const visits = (one: Slopnator): one is Visiting => 'holds' in one && one
98
94
 
99
95
  export const sweeps = (one: Slopnator): one is Reading => 'holds' in one && one.on === undefined
100
96
 
101
- export interface Sourced {
102
- readonly at: string
103
- readonly source: string
104
- }
105
-
106
- export type Proof = string | { readonly files: readonly Sourced[]; readonly at: string }
107
-
108
97
  export interface Byproduct {
109
98
  readonly path: string
110
99
  readonly content: string
@@ -170,42 +159,7 @@ export class UnreadableRulesError extends Error {
170
159
  }
171
160
  }
172
161
 
173
- export class BrokenSealError extends Error {
174
- constructor(at: string, why: string) {
175
- super(
176
- `${at} ${why} — this package is not the one that was published, so nothing it refuses or allows can be trusted. ` +
177
- 'Reinstall it (`pnpm install --frozen-lockfile` re-verifies the published bytes), or if you meant to change it, run `thread seal` and publish that.',
178
- )
179
- this.name = 'BrokenSealError'
180
- }
181
- }
182
-
183
- const INSTALLED = HOME.includes(`${sep}node_modules${sep}`)
184
-
185
- export function unsealed(home: string = HOME): readonly string[] {
186
- const broken: string[] = []
187
- for (const [at, hash] of Object.entries(SEALED)) {
188
- let held: Buffer
189
- try {
190
- held = readFileSync(join(home, at))
191
- } catch {
192
- broken.push(`${at} is missing`)
193
- continue
194
- }
195
- if (createHash('sha256').update(held).digest('hex') !== hash) broken.push(`${at} differs from the seal`)
196
- }
197
- return broken
198
- }
199
-
200
- export function verify(): void {
201
- if (!INSTALLED) return
202
- const broken = unsealed(BUILT)
203
- const first = broken[0]
204
- if (first !== undefined) throw new BrokenSealError(first.split(' ')[0] ?? '', first.split(' ').slice(1).join(' '))
205
- }
206
-
207
162
  export async function load(root: string, all: readonly Constraint[]): Promise<ReadonlyMap<string, Slopnator>> {
208
- verify()
209
163
  const found = new Map<string, Slopnator>()
210
164
  for (const rule of all) {
211
165
  const name = slopnatorName(rule.id)
@@ -234,7 +188,12 @@ export function proofsOf(
234
188
  rule: Constraint,
235
189
  slopnators: ReadonlyMap<string, Slopnator>,
236
190
  ): { readonly wrong: readonly Proof[]; readonly right: readonly Proof[] } {
237
- const slopnated = slopnators.get(slopnatorName(rule.id))?.proves
191
+ const slopnator = slopnators.get(slopnatorName(rule.id))
192
+ const slopnated = slopnator?.proves
193
+ const own = (slopnated?.wrong.length ?? 0) + (slopnated?.right.length ?? 0)
194
+ if (slopnator !== undefined && !reads(slopnator) && own > 0) {
195
+ return { wrong: slopnated?.wrong ?? [], right: slopnated?.right ?? [] }
196
+ }
238
197
  return { wrong: [rule.wrong, ...(slopnated?.wrong ?? [])], right: [rule.right, ...(slopnated?.right ?? [])] }
239
198
  }
240
199
 
@@ -251,7 +210,6 @@ export const slopnator: Slopnator = {
251
210
 
252
211
  export function write(root: string, byproduct: Byproduct): void {
253
212
  const path = join(root, byproduct.path)
254
- mkdirSync(dirname(path), { recursive: true })
255
213
  writeFileSync(path, byproduct.content, 'utf8')
256
214
  }
257
215
 
@@ -23,8 +23,10 @@ export const slopnator = {
23
23
  right: [
24
24
  {
25
25
  files: [
26
- { at: 'threads/_names_it.ts', source: "export const OWNER: Threaded = {\n declares: [\n {\n at: 'scripts/_probe_mid.ts',\n },\n ],\n}\n" },
27
- { at: 'scripts/_probe_mid.ts', source: "export const MID: Threaded = {\n declares: [\n {\n at: 'scripts/_probe_end.ts',\n },\n ],\n}\n" },
26
+ { at: 'thread/core/thread.ts', source: "export interface Threaded {\n readonly id?: string\n readonly at?: string\n readonly describes?: string\n readonly declares?: readonly Threaded[]\n readonly derives?: readonly Threaded[]\n readonly seeds?: readonly Threaded[]\n}\n" },
27
+ { at: 'threads/thread.ts', source: "import type { Threaded } from '../thread/core/thread.ts'\n\nexport const THREAD: Threaded = {\n declares: [\n {\n at: 'threads/_names_it.ts',\n },\n ],\n}\n" },
28
+ { at: 'threads/_names_it.ts', source: "import type { Threaded } from '../thread/core/thread.ts'\n\nexport const OWNER: Threaded = {\n declares: [\n {\n at: 'scripts/_probe_mid.ts',\n },\n ],\n}\n" },
29
+ { at: 'scripts/_probe_mid.ts', source: "import type { Threaded } from '../thread/core/thread.ts'\n\nexport const MID: Threaded = {\n declares: [\n {\n at: 'scripts/_probe_end.ts',\n },\n ],\n}\n" },
28
30
  { at: 'scripts/_probe_end.ts', source: 'export const END = 1\n' },
29
31
  ],
30
32
  at: 'scripts/_probe_mid.ts',
@@ -24,8 +24,10 @@ export const slopnator: Slopnator = {
24
24
  right: [
25
25
  {
26
26
  files: [
27
- { at: 'threads/_names_it.ts', source: "export const OWNER: Threaded = {\n declares: [\n {\n at: 'scripts/_probe_mid.ts',\n },\n ],\n}\n" },
28
- { at: 'scripts/_probe_mid.ts', source: "export const MID: Threaded = {\n declares: [\n {\n at: 'scripts/_probe_end.ts',\n },\n ],\n}\n" },
27
+ { at: 'thread/core/thread.ts', source: "export interface Threaded {\n readonly id?: string\n readonly at?: string\n readonly describes?: string\n readonly declares?: readonly Threaded[]\n readonly derives?: readonly Threaded[]\n readonly seeds?: readonly Threaded[]\n}\n" },
28
+ { at: 'threads/thread.ts', source: "import type { Threaded } from '../thread/core/thread.ts'\n\nexport const THREAD: Threaded = {\n declares: [\n {\n at: 'threads/_names_it.ts',\n },\n ],\n}\n" },
29
+ { at: 'threads/_names_it.ts', source: "import type { Threaded } from '../thread/core/thread.ts'\n\nexport const OWNER: Threaded = {\n declares: [\n {\n at: 'scripts/_probe_mid.ts',\n },\n ],\n}\n" },
30
+ { at: 'scripts/_probe_mid.ts', source: "import type { Threaded } from '../thread/core/thread.ts'\n\nexport const MID: Threaded = {\n declares: [\n {\n at: 'scripts/_probe_end.ts',\n },\n ],\n}\n" },
29
31
  { at: 'scripts/_probe_end.ts', source: 'export const END = 1\n' },
30
32
  ],
31
33
  at: 'scripts/_probe_mid.ts',
@@ -20,9 +20,30 @@ export const slopnator = {
20
20
  },
21
21
  proves: {
22
22
  wrong: [
23
- "export default defineEvents({ specVersion: 1, events: [] })",
24
- "export default definePermissions({ specVersion: 1, entities: [] })",
25
- "export default defineMap({ specVersion: 1, screens: [] })",
23
+ {
24
+ files: [
25
+ { at: 'threads/thread.ts', source: "export const THREAD: Threaded = {\n declares: [\n { id: 'events', at: 'src/islands/events.ts', governs: ['app/_declare/events.ts'] },\n ],\n}\n" },
26
+ { at: 'src/islands/events.ts', source: 'export const EventsIslandSchema = {}\nexport function defineEvents() {}\n' },
27
+ { at: 'probe.tsx', source: 'export default defineEvents({ specVersion: 1, events: [] })\n' },
28
+ ],
29
+ at: 'probe.tsx',
30
+ },
31
+ {
32
+ files: [
33
+ { at: 'threads/thread.ts', source: "export const THREAD: Threaded = {\n declares: [\n { id: 'permissions', at: 'src/islands/permissions.ts', governs: ['app/_declare/permissions.ts'] },\n ],\n}\n" },
34
+ { at: 'src/islands/permissions.ts', source: 'export const PermissionsIslandSchema = {}\nexport function definePermissions() {}\n' },
35
+ { at: 'probe.tsx', source: 'export default definePermissions({ specVersion: 1, entities: [] })\n' },
36
+ ],
37
+ at: 'probe.tsx',
38
+ },
39
+ {
40
+ files: [
41
+ { at: 'threads/thread.ts', source: "export const THREAD: Threaded = {\n declares: [\n { id: 'navigation', at: 'src/islands/navigation.ts', governs: ['app/_declare/map.ts'] },\n ],\n}\n" },
42
+ { at: 'src/islands/navigation.ts', source: 'export const NavigationIslandSchema = {}\nexport function defineMap() {}\n' },
43
+ { at: 'probe.tsx', source: 'export default defineMap({ specVersion: 1, screens: [] })\n' },
44
+ ],
45
+ at: 'probe.tsx',
46
+ },
26
47
  ],
27
48
  right: [
28
49
  "import events from 'app/_declare/events'",
@@ -26,9 +26,30 @@ export const slopnator: Slopnator = {
26
26
  },
27
27
  proves: {
28
28
  wrong: [
29
- "export default defineEvents({ specVersion: 1, events: [] })",
30
- "export default definePermissions({ specVersion: 1, entities: [] })",
31
- "export default defineMap({ specVersion: 1, screens: [] })",
29
+ {
30
+ files: [
31
+ { at: 'threads/thread.ts', source: "export const THREAD: Threaded = {\n declares: [\n { id: 'events', at: 'src/islands/events.ts', governs: ['app/_declare/events.ts'] },\n ],\n}\n" },
32
+ { at: 'src/islands/events.ts', source: 'export const EventsIslandSchema = {}\nexport function defineEvents() {}\n' },
33
+ { at: 'probe.tsx', source: 'export default defineEvents({ specVersion: 1, events: [] })\n' },
34
+ ],
35
+ at: 'probe.tsx',
36
+ },
37
+ {
38
+ files: [
39
+ { at: 'threads/thread.ts', source: "export const THREAD: Threaded = {\n declares: [\n { id: 'permissions', at: 'src/islands/permissions.ts', governs: ['app/_declare/permissions.ts'] },\n ],\n}\n" },
40
+ { at: 'src/islands/permissions.ts', source: 'export const PermissionsIslandSchema = {}\nexport function definePermissions() {}\n' },
41
+ { at: 'probe.tsx', source: 'export default definePermissions({ specVersion: 1, entities: [] })\n' },
42
+ ],
43
+ at: 'probe.tsx',
44
+ },
45
+ {
46
+ files: [
47
+ { at: 'threads/thread.ts', source: "export const THREAD: Threaded = {\n declares: [\n { id: 'navigation', at: 'src/islands/navigation.ts', governs: ['app/_declare/map.ts'] },\n ],\n}\n" },
48
+ { at: 'src/islands/navigation.ts', source: 'export const NavigationIslandSchema = {}\nexport function defineMap() {}\n' },
49
+ { at: 'probe.tsx', source: 'export default defineMap({ specVersion: 1, screens: [] })\n' },
50
+ ],
51
+ at: 'probe.tsx',
52
+ },
32
53
  ],
33
54
  right: [
34
55
  "import events from 'app/_declare/events'",
@@ -1,4 +1,4 @@
1
- import { readFileSync } from 'node:fs';
1
+ import { readFileSync } from "../../core/files.js";
2
2
  import { resolve } from 'node:path';
3
3
  import { atsIn } from "./sl_unthreaded.js";
4
4
  import { reached } from "../../core/descend.js";
@@ -68,13 +68,17 @@ export const slopnator = {
68
68
  wrong: [
69
69
  {
70
70
  files: [
71
- { at: 'threads/_drift_probe.ts', source: "export const M: Threaded = {\n derives: [\n {\n at: 'scripts/_generated/gate.mjs',\n by: 'pnpm gate:generate',\n runs: 'pnpm no-such-check',\n },\n ],\n}\n" },
71
+ { at: 'thread/core/thread.ts', source: "export interface Threaded {\n readonly id?: string\n readonly at?: string\n readonly describes?: string\n readonly declares?: readonly Threaded[]\n readonly derives?: readonly Threaded[]\n readonly seeds?: readonly Threaded[]\n}\n" },
72
+ { at: 'threads/thread.ts', source: "import type { Threaded } from '../thread/core/thread.ts'\n\nexport const THREAD: Threaded = {\n declares: [\n {\n at: 'threads/_drift_probe.ts',\n },\n ],\n}\n" },
73
+ { at: 'threads/_drift_probe.ts', source: "import type { Threaded } from '../thread/core/thread.ts'\n\nexport const M: Threaded = {\n derives: [\n {\n at: 'scripts/_generated/gate.mjs',\n by: 'pnpm gate:generate',\n },\n ],\n}\n" },
72
74
  ],
73
75
  at: 'threads/_drift_probe.ts',
74
76
  },
75
77
  {
76
78
  files: [
77
- { at: 'threads/_drift_probe.ts', source: "export const M: Threaded = {\n derives: [\n {\n at: 'scripts/finding.ts',\n },\n ],\n}\n" },
79
+ { at: 'thread/core/thread.ts', source: "export interface Threaded {\n readonly id?: string\n readonly at?: string\n readonly describes?: string\n readonly declares?: readonly Threaded[]\n readonly derives?: readonly Threaded[]\n readonly seeds?: readonly Threaded[]\n}\n" },
80
+ { at: 'threads/thread.ts', source: "import type { Threaded } from '../thread/core/thread.ts'\n\nexport const THREAD: Threaded = {\n declares: [\n {\n at: 'threads/_drift_probe.ts',\n },\n ],\n}\n" },
81
+ { at: 'threads/_drift_probe.ts', source: "import type { Threaded } from '../thread/core/thread.ts'\n\nexport const M: Threaded = {\n derives: [\n {\n at: 'scripts/finding.ts',\n },\n ],\n}\n" },
78
82
  ],
79
83
  at: 'threads/_drift_probe.ts',
80
84
  },
@@ -82,7 +86,9 @@ export const slopnator = {
82
86
  right: [
83
87
  {
84
88
  files: [
85
- { at: 'threads/_drift_probe.ts', source: "export const M: Threaded = {\n derives: [\n {\n at: 'scripts/_generated/gate.mjs',\n by: 'pnpm gate:generate',\n runs: 'pnpm gate:check',\n },\n ],\n}\n" },
89
+ { at: 'thread/core/thread.ts', source: "export interface Threaded {\n readonly id?: string\n readonly at?: string\n readonly describes?: string\n readonly declares?: readonly Threaded[]\n readonly derives?: readonly Threaded[]\n readonly seeds?: readonly Threaded[]\n}\n" },
90
+ { at: 'threads/thread.ts', source: "import type { Threaded } from '../thread/core/thread.ts'\n\nexport const THREAD: Threaded = {\n declares: [\n {\n at: 'threads/_drift_probe.ts',\n },\n ],\n}\n" },
91
+ { at: 'threads/_drift_probe.ts', source: "import type { Threaded } from '../thread/core/thread.ts'\n\nexport const M: Threaded = {\n derives: [\n {\n at: 'scripts/_generated/gate.mjs',\n by: 'pnpm gate:generate',\n runs: 'pnpm gate:check',\n },\n ],\n}\n" },
86
92
  ],
87
93
  at: 'threads/_drift_probe.ts',
88
94
  },
@@ -1,4 +1,4 @@
1
- import { readFileSync } from 'node:fs'
1
+ import { readFileSync } from '../../core/files.ts'
2
2
  import { resolve } from 'node:path'
3
3
 
4
4
  import type { Slopnator } from '../slopnator.ts'
@@ -75,13 +75,17 @@ export const slopnator: Slopnator = {
75
75
  wrong: [
76
76
  {
77
77
  files: [
78
- { at: 'threads/_drift_probe.ts', source: "export const M: Threaded = {\n derives: [\n {\n at: 'scripts/_generated/gate.mjs',\n by: 'pnpm gate:generate',\n runs: 'pnpm no-such-check',\n },\n ],\n}\n" },
78
+ { at: 'thread/core/thread.ts', source: "export interface Threaded {\n readonly id?: string\n readonly at?: string\n readonly describes?: string\n readonly declares?: readonly Threaded[]\n readonly derives?: readonly Threaded[]\n readonly seeds?: readonly Threaded[]\n}\n" },
79
+ { at: 'threads/thread.ts', source: "import type { Threaded } from '../thread/core/thread.ts'\n\nexport const THREAD: Threaded = {\n declares: [\n {\n at: 'threads/_drift_probe.ts',\n },\n ],\n}\n" },
80
+ { at: 'threads/_drift_probe.ts', source: "import type { Threaded } from '../thread/core/thread.ts'\n\nexport const M: Threaded = {\n derives: [\n {\n at: 'scripts/_generated/gate.mjs',\n by: 'pnpm gate:generate',\n },\n ],\n}\n" },
79
81
  ],
80
82
  at: 'threads/_drift_probe.ts',
81
83
  },
82
84
  {
83
85
  files: [
84
- { at: 'threads/_drift_probe.ts', source: "export const M: Threaded = {\n derives: [\n {\n at: 'scripts/finding.ts',\n },\n ],\n}\n" },
86
+ { at: 'thread/core/thread.ts', source: "export interface Threaded {\n readonly id?: string\n readonly at?: string\n readonly describes?: string\n readonly declares?: readonly Threaded[]\n readonly derives?: readonly Threaded[]\n readonly seeds?: readonly Threaded[]\n}\n" },
87
+ { at: 'threads/thread.ts', source: "import type { Threaded } from '../thread/core/thread.ts'\n\nexport const THREAD: Threaded = {\n declares: [\n {\n at: 'threads/_drift_probe.ts',\n },\n ],\n}\n" },
88
+ { at: 'threads/_drift_probe.ts', source: "import type { Threaded } from '../thread/core/thread.ts'\n\nexport const M: Threaded = {\n derives: [\n {\n at: 'scripts/finding.ts',\n },\n ],\n}\n" },
85
89
  ],
86
90
  at: 'threads/_drift_probe.ts',
87
91
  },
@@ -89,7 +93,9 @@ export const slopnator: Slopnator = {
89
93
  right: [
90
94
  {
91
95
  files: [
92
- { at: 'threads/_drift_probe.ts', source: "export const M: Threaded = {\n derives: [\n {\n at: 'scripts/_generated/gate.mjs',\n by: 'pnpm gate:generate',\n runs: 'pnpm gate:check',\n },\n ],\n}\n" },
96
+ { at: 'thread/core/thread.ts', source: "export interface Threaded {\n readonly id?: string\n readonly at?: string\n readonly describes?: string\n readonly declares?: readonly Threaded[]\n readonly derives?: readonly Threaded[]\n readonly seeds?: readonly Threaded[]\n}\n" },
97
+ { at: 'threads/thread.ts', source: "import type { Threaded } from '../thread/core/thread.ts'\n\nexport const THREAD: Threaded = {\n declares: [\n {\n at: 'threads/_drift_probe.ts',\n },\n ],\n}\n" },
98
+ { at: 'threads/_drift_probe.ts', source: "import type { Threaded } from '../thread/core/thread.ts'\n\nexport const M: Threaded = {\n derives: [\n {\n at: 'scripts/_generated/gate.mjs',\n by: 'pnpm gate:generate',\n runs: 'pnpm gate:check',\n },\n ],\n}\n" },
93
99
  ],
94
100
  at: 'threads/_drift_probe.ts',
95
101
  },
@@ -1,4 +1,4 @@
1
- import { existsSync, readFileSync } from 'node:fs';
1
+ import { existsSync, readFileSync } from "../../core/files.js";
2
2
  import { resolve } from 'node:path';
3
3
  import { declaresIsland, here, rowsIn } from "./sl_unthreaded.js";
4
4
  import { findTree } from "../../core/tree.js";
@@ -44,19 +44,15 @@ export const slopnator = {
44
44
  wrong: [
45
45
  {
46
46
  files: [
47
- {
48
- at: 'threads/_inert_probe.ts',
49
- source: "export const M: Islanding = {\n declares: [\n { id: 'entities', at: 'packages/core/spec/src/islands/entities.ts' },\n ],\n}\n",
50
- },
47
+ { at: 'threads/_inert_probe.ts', source: "export const M: Threaded = {\n declares: [\n { id: 'entities', at: 'src/islands/entities.ts' },\n ],\n}\n" },
48
+ { at: 'src/islands/entities.ts', source: 'export const EntitiesIslandSchema = {}\n' },
51
49
  ],
52
50
  at: 'threads/_inert_probe.ts',
53
51
  },
54
52
  {
55
53
  files: [
56
- {
57
- at: 'threads/_inert_probe.ts',
58
- source: "export const M: Islanding = {\n declares: [\n { id: 'events', at: 'packages/core/spec/src/islands/events.ts', governs: [] },\n ],\n}\n",
59
- },
54
+ { at: 'threads/_inert_probe.ts', source: "export const M: Threaded = {\n declares: [\n { id: 'events', at: 'src/islands/events.ts', governs: [] },\n ],\n}\n" },
55
+ { at: 'src/islands/events.ts', source: 'export const EventsIslandSchema = {}\n' },
60
56
  ],
61
57
  at: 'threads/_inert_probe.ts',
62
58
  },
@@ -64,10 +60,8 @@ export const slopnator = {
64
60
  right: [
65
61
  {
66
62
  files: [
67
- {
68
- at: 'threads/_inert_probe.ts',
69
- source: "export const M: Islanding = {\n declares: [\n { id: 'events', at: 'packages/core/spec/src/islands/events.ts', governs: ['app/_declare/events.ts'] },\n ],\n}\n",
70
- },
63
+ { at: 'threads/_inert_probe.ts', source: "export const M: Threaded = {\n declares: [\n { id: 'events', at: 'src/islands/events.ts', governs: ['app/_declare/events.ts'] },\n ],\n}\n" },
64
+ { at: 'src/islands/events.ts', source: 'export const EventsIslandSchema = {}\n' },
71
65
  ],
72
66
  at: 'threads/_inert_probe.ts',
73
67
  },
@@ -1,4 +1,4 @@
1
- import { existsSync, readFileSync } from 'node:fs'
1
+ import { existsSync, readFileSync } from '../../core/files.ts'
2
2
  import { resolve } from 'node:path'
3
3
 
4
4
  import type { Slopnator } from '../slopnator.ts'
@@ -47,21 +47,15 @@ export const slopnator: Slopnator = {
47
47
  wrong: [
48
48
  {
49
49
  files: [
50
- {
51
- at: 'threads/_inert_probe.ts',
52
- source:
53
- "export const M: Islanding = {\n declares: [\n { id: 'entities', at: 'packages/core/spec/src/islands/entities.ts' },\n ],\n}\n",
54
- },
50
+ { at: 'threads/_inert_probe.ts', source: "export const M: Threaded = {\n declares: [\n { id: 'entities', at: 'src/islands/entities.ts' },\n ],\n}\n" },
51
+ { at: 'src/islands/entities.ts', source: 'export const EntitiesIslandSchema = {}\n' },
55
52
  ],
56
53
  at: 'threads/_inert_probe.ts',
57
54
  },
58
55
  {
59
56
  files: [
60
- {
61
- at: 'threads/_inert_probe.ts',
62
- source:
63
- "export const M: Islanding = {\n declares: [\n { id: 'events', at: 'packages/core/spec/src/islands/events.ts', governs: [] },\n ],\n}\n",
64
- },
57
+ { at: 'threads/_inert_probe.ts', source: "export const M: Threaded = {\n declares: [\n { id: 'events', at: 'src/islands/events.ts', governs: [] },\n ],\n}\n" },
58
+ { at: 'src/islands/events.ts', source: 'export const EventsIslandSchema = {}\n' },
65
59
  ],
66
60
  at: 'threads/_inert_probe.ts',
67
61
  },
@@ -69,11 +63,8 @@ export const slopnator: Slopnator = {
69
63
  right: [
70
64
  {
71
65
  files: [
72
- {
73
- at: 'threads/_inert_probe.ts',
74
- source:
75
- "export const M: Islanding = {\n declares: [\n { id: 'events', at: 'packages/core/spec/src/islands/events.ts', governs: ['app/_declare/events.ts'] },\n ],\n}\n",
76
- },
66
+ { at: 'threads/_inert_probe.ts', source: "export const M: Threaded = {\n declares: [\n { id: 'events', at: 'src/islands/events.ts', governs: ['app/_declare/events.ts'] },\n ],\n}\n" },
67
+ { at: 'src/islands/events.ts', source: 'export const EventsIslandSchema = {}\n' },
77
68
  ],
78
69
  at: 'threads/_inert_probe.ts',
79
70
  },
@@ -41,35 +41,35 @@ export const slopnator = {
41
41
  {
42
42
  files: [
43
43
  {
44
- at: 'packages/core/src/integrity/slopnators/sl_probe_inert.ts',
44
+ at: 'thread/integrity/slopnators/sl_probe_inert.ts',
45
45
  source: 'export const slopnator = {\n on: [],\n holds: () => NOT_WRITTEN,\n proves: { wrong: [], right: [] },\n}\n',
46
46
  },
47
47
  ],
48
- at: 'packages/core/src/integrity/slopnators/sl_probe_inert.ts',
48
+ at: 'thread/integrity/slopnators/sl_probe_inert.ts',
49
49
  },
50
50
  {
51
51
  files: [
52
52
  {
53
- at: 'packages/core/src/integrity/slopnators/sl_probe_inert.ts',
53
+ at: 'thread/integrity/slopnators/sl_probe_inert.ts',
54
54
  source: "export const slopnator = {\n holds: (_node, at) => at.text.includes('nope') && 'found',\n proves: { wrong: [], right: ['const held = 1'] },\n}\n",
55
55
  },
56
56
  ],
57
- at: 'packages/core/src/integrity/slopnators/sl_probe_inert.ts',
57
+ at: 'thread/integrity/slopnators/sl_probe_inert.ts',
58
58
  },
59
59
  ],
60
60
  right: [
61
61
  {
62
62
  files: [
63
63
  {
64
- at: 'packages/core/src/integrity/slopnators/sl_probe_inert.ts',
64
+ at: 'thread/integrity/slopnators/sl_probe_inert.ts',
65
65
  source: "export const slopnator = {\n holds: (_node, at) => at.text.includes('nope') && 'found',\n proves: { wrong: ['nope'], right: ['const held = 1'] },\n}\n",
66
66
  },
67
67
  ],
68
- at: 'packages/core/src/integrity/slopnators/sl_probe_inert.ts',
68
+ at: 'thread/integrity/slopnators/sl_probe_inert.ts',
69
69
  },
70
70
  {
71
- files: [{ at: 'packages/core/src/integrity/slopnators/sl_probe_inert.ts', source: 'export const held = 1\n' }],
72
- at: 'packages/core/src/integrity/slopnators/sl_probe_inert.ts',
71
+ files: [{ at: 'thread/integrity/slopnators/sl_probe_inert.ts', source: 'export const held = 1\n' }],
72
+ at: 'thread/integrity/slopnators/sl_probe_inert.ts',
73
73
  },
74
74
  ],
75
75
  },
@@ -58,35 +58,35 @@ export const slopnator: Slopnator = {
58
58
  {
59
59
  files: [
60
60
  {
61
- at: 'packages/core/src/integrity/slopnators/sl_probe_inert.ts',
61
+ at: 'thread/integrity/slopnators/sl_probe_inert.ts',
62
62
  source: 'export const slopnator = {\n on: [],\n holds: () => NOT_WRITTEN,\n proves: { wrong: [], right: [] },\n}\n',
63
63
  },
64
64
  ],
65
- at: 'packages/core/src/integrity/slopnators/sl_probe_inert.ts',
65
+ at: 'thread/integrity/slopnators/sl_probe_inert.ts',
66
66
  },
67
67
  {
68
68
  files: [
69
69
  {
70
- at: 'packages/core/src/integrity/slopnators/sl_probe_inert.ts',
70
+ at: 'thread/integrity/slopnators/sl_probe_inert.ts',
71
71
  source: "export const slopnator = {\n holds: (_node, at) => at.text.includes('nope') && 'found',\n proves: { wrong: [], right: ['const held = 1'] },\n}\n",
72
72
  },
73
73
  ],
74
- at: 'packages/core/src/integrity/slopnators/sl_probe_inert.ts',
74
+ at: 'thread/integrity/slopnators/sl_probe_inert.ts',
75
75
  },
76
76
  ],
77
77
  right: [
78
78
  {
79
79
  files: [
80
80
  {
81
- at: 'packages/core/src/integrity/slopnators/sl_probe_inert.ts',
81
+ at: 'thread/integrity/slopnators/sl_probe_inert.ts',
82
82
  source: "export const slopnator = {\n holds: (_node, at) => at.text.includes('nope') && 'found',\n proves: { wrong: ['nope'], right: ['const held = 1'] },\n}\n",
83
83
  },
84
84
  ],
85
- at: 'packages/core/src/integrity/slopnators/sl_probe_inert.ts',
85
+ at: 'thread/integrity/slopnators/sl_probe_inert.ts',
86
86
  },
87
87
  {
88
- files: [{ at: 'packages/core/src/integrity/slopnators/sl_probe_inert.ts', source: 'export const held = 1\n' }],
89
- at: 'packages/core/src/integrity/slopnators/sl_probe_inert.ts',
88
+ files: [{ at: 'thread/integrity/slopnators/sl_probe_inert.ts', source: 'export const held = 1\n' }],
89
+ at: 'thread/integrity/slopnators/sl_probe_inert.ts',
90
90
  },
91
91
  ],
92
92
  },