@smthrs/kernel 1.0.0-rc.5 → 1.0.0-rc.7

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 (99) hide show
  1. package/README.md +18 -18
  2. package/dist/cjs/ChildProcessSpawner.d.ts +4 -4
  3. package/dist/cjs/ChildProcessSpawner.d.ts.map +1 -1
  4. package/dist/cjs/ChildProcessSpawner.js +4 -4
  5. package/dist/cjs/ChildProcessSpawner.js.map +1 -1
  6. package/dist/cjs/CommandLine.d.ts +2 -2
  7. package/dist/cjs/CommandLine.d.ts.map +1 -1
  8. package/dist/cjs/CommandLine.js.map +1 -1
  9. package/dist/cjs/ContainedSpawner.d.ts +2 -2
  10. package/dist/cjs/ContainedSpawner.d.ts.map +1 -1
  11. package/dist/cjs/ContainedSpawner.js +2 -2
  12. package/dist/cjs/ContainedSpawner.js.map +2 -2
  13. package/dist/cjs/FileSystem.d.ts.map +1 -1
  14. package/dist/cjs/FileSystem.js +4 -3
  15. package/dist/cjs/FileSystem.js.map +2 -2
  16. package/dist/cjs/HostServices.d.ts +3 -3
  17. package/dist/cjs/HostServices.d.ts.map +1 -1
  18. package/dist/cjs/HostServices.js +2 -2
  19. package/dist/cjs/HostServices.js.map +1 -1
  20. package/dist/cjs/HttpClient.d.ts +5 -5
  21. package/dist/cjs/HttpClient.d.ts.map +1 -1
  22. package/dist/cjs/HttpClient.js +9 -9
  23. package/dist/cjs/HttpClient.js.map +1 -1
  24. package/dist/cjs/ProcessConfinement.d.ts +1 -1
  25. package/dist/cjs/ProcessConfinement.d.ts.map +1 -1
  26. package/dist/cjs/ProcessConfinement.js.map +1 -1
  27. package/dist/cjs/Rooted.d.ts +2 -2
  28. package/dist/cjs/Rooted.d.ts.map +1 -1
  29. package/dist/cjs/Rooted.js +2 -2
  30. package/dist/cjs/Rooted.js.map +1 -1
  31. package/dist/cjs/internal/Containment.d.ts +1 -1
  32. package/dist/cjs/internal/Containment.d.ts.map +1 -1
  33. package/dist/cjs/internal/Containment.js.map +1 -1
  34. package/dist/cjs/internal/Pipeline.d.ts +2 -2
  35. package/dist/cjs/internal/Pipeline.d.ts.map +1 -1
  36. package/dist/cjs/internal/Pipeline.js +2 -2
  37. package/dist/cjs/internal/Pipeline.js.map +2 -2
  38. package/dist/cjs/test/HostContract.d.ts +5 -5
  39. package/dist/cjs/test/HostContract.d.ts.map +1 -1
  40. package/dist/cjs/test/HostContract.js +4 -4
  41. package/dist/cjs/test/HostContract.js.map +1 -1
  42. package/dist/esm/ChildProcessSpawner.d.ts +4 -4
  43. package/dist/esm/ChildProcessSpawner.d.ts.map +1 -1
  44. package/dist/esm/ChildProcessSpawner.js +5 -5
  45. package/dist/esm/ChildProcessSpawner.js.map +1 -1
  46. package/dist/esm/CommandLine.d.ts +2 -2
  47. package/dist/esm/CommandLine.d.ts.map +1 -1
  48. package/dist/esm/CommandLine.js +1 -1
  49. package/dist/esm/CommandLine.js.map +1 -1
  50. package/dist/esm/ContainedSpawner.d.ts +2 -2
  51. package/dist/esm/ContainedSpawner.d.ts.map +1 -1
  52. package/dist/esm/ContainedSpawner.js +2 -2
  53. package/dist/esm/ContainedSpawner.js.map +1 -1
  54. package/dist/esm/FileSystem.d.ts.map +1 -1
  55. package/dist/esm/FileSystem.js +5 -4
  56. package/dist/esm/FileSystem.js.map +1 -1
  57. package/dist/esm/HostServices.d.ts +3 -3
  58. package/dist/esm/HostServices.d.ts.map +1 -1
  59. package/dist/esm/HostServices.js +2 -2
  60. package/dist/esm/HostServices.js.map +1 -1
  61. package/dist/esm/HttpClient.d.ts +5 -5
  62. package/dist/esm/HttpClient.d.ts.map +1 -1
  63. package/dist/esm/HttpClient.js +9 -9
  64. package/dist/esm/HttpClient.js.map +1 -1
  65. package/dist/esm/ProcessConfinement.d.ts +1 -1
  66. package/dist/esm/ProcessConfinement.d.ts.map +1 -1
  67. package/dist/esm/ProcessConfinement.js.map +1 -1
  68. package/dist/esm/Rooted.d.ts +2 -2
  69. package/dist/esm/Rooted.d.ts.map +1 -1
  70. package/dist/esm/Rooted.js +2 -2
  71. package/dist/esm/Rooted.js.map +1 -1
  72. package/dist/esm/internal/Containment.d.ts +1 -1
  73. package/dist/esm/internal/Containment.d.ts.map +1 -1
  74. package/dist/esm/internal/Containment.js.map +1 -1
  75. package/dist/esm/internal/Pipeline.d.ts +2 -2
  76. package/dist/esm/internal/Pipeline.d.ts.map +1 -1
  77. package/dist/esm/internal/Pipeline.js +2 -2
  78. package/dist/esm/internal/Pipeline.js.map +1 -1
  79. package/dist/esm/test/HostContract.d.ts +5 -5
  80. package/dist/esm/test/HostContract.d.ts.map +1 -1
  81. package/dist/esm/test/HostContract.js +4 -4
  82. package/dist/esm/test/HostContract.js.map +1 -1
  83. package/docs/api.md +2 -2
  84. package/docs/guides/adapt-a-new-host-platform.md +3 -3
  85. package/docs/installation.md +3 -3
  86. package/docs/quickstart.md +1 -1
  87. package/docs/testing.md +1 -1
  88. package/package.json +10 -11
  89. package/src/ChildProcessSpawner.ts +5 -5
  90. package/src/CommandLine.ts +2 -2
  91. package/src/ContainedSpawner.ts +2 -6
  92. package/src/FileSystem.ts +4 -4
  93. package/src/HostServices.ts +3 -3
  94. package/src/HttpClient.ts +9 -9
  95. package/src/ProcessConfinement.ts +1 -1
  96. package/src/Rooted.ts +2 -2
  97. package/src/internal/Containment.ts +1 -1
  98. package/src/internal/Pipeline.ts +2 -2
  99. package/src/test/HostContract.ts +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"HostContract.js","sourceRoot":"","sources":["../../../src/test/HostContract.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared contract suite for complete Host bundles.\n *\n * This module is emitted as ESM, CJS, and declarations and exported from\n * `@smthrs/kernel/test/contract`. It intentionally has a Vitest peer because\n * it registers a reusable behavioral contract for third-party Host bundles.\n *\n * @since 1.0.0-rc.0\n */\n\n// Every case here runs on real elapsed time — subprocess spawns, file locks,\n// mtimes, and poll loops — so the suite uses `it.live`; `it.effect`'s\n// TestClock never advances for them.\n\nimport { describe, expect, it } from \"@effect/vitest\"\nimport * as JjService from \"@smthrs/jj\"\nimport type { Jj, JjErrorCode } from \"@smthrs/jj\"\nimport { Deferred, Effect, Fiber, FileSystem, type Layer, Option, Path, Stream } from \"effect\"\nimport { HttpClient } from \"effect/unstable/http/HttpClient\"\nimport * as HttpClientRequest from \"effect/unstable/http/HttpClientRequest\"\nimport type * as HttpClientResponse from \"effect/unstable/http/HttpClientResponse\"\nimport * as ChildProcess from \"effect/unstable/process/ChildProcess\"\nimport { type ChildProcessHandle, ChildProcessSpawner } from \"effect/unstable/process/ChildProcessSpawner\"\nimport { tmpdir } from \"node:os\"\nimport { join } from \"node:path\"\nimport * as FileSystemBatchContract from \"./FileSystemBatchContract.ts\"\n\nexport { check as checkFileSystemBatch } from \"./FileSystemBatchContract.ts\"\n\n/**\n * A capability that must fail with a stable typed code.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface FailureCapability<Code extends string> {\n readonly expected: \"failure\"\n readonly code: Code\n}\n\n/**\n * Successful filesystem contract options.\n *\n * `scratchPath` is required only for hosts whose filesystem does not accept an\n * OS temp path — an in-memory double, say. Omitting it takes\n * {@link defaultScratchPath}, which is process-scoped and outside the working\n * tree.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface FileSystemSuccess {\n readonly expected: \"success\"\n readonly scratchPath?: string | undefined\n /** Operations this otherwise available host deliberately refuses. */\n readonly unsupported?: Partial<Record<FileSystemOperation, string>> | undefined\n}\n\n/**\n * Every method on Effect's closed filesystem service.\n * @category constants\n * @since 1.0.0-rc.0\n */\nexport const FileSystemOperations = [\n \"access\",\n \"copy\",\n \"copyFile\",\n \"chmod\",\n \"chown\",\n \"glob\",\n \"exists\",\n \"link\",\n \"makeDirectory\",\n \"makeTempDirectory\",\n \"makeTempDirectoryScoped\",\n \"makeTempFile\",\n \"makeTempFileScoped\",\n \"open\",\n \"readDirectory\",\n \"readFile\",\n \"readFileString\",\n \"readLink\",\n \"realPath\",\n \"remove\",\n \"rename\",\n \"sink\",\n \"stat\",\n \"stream\",\n \"symlink\",\n \"truncate\",\n \"utimes\",\n \"watch\",\n \"writeFile\",\n \"writeFileString\"\n] as const\n\n/**\n * One method of Effect's closed filesystem service.\n * @category models\n * @since 1.0.0-rc.0\n */\nexport type FileSystemOperation = typeof FileSystemOperations[number]\n\n/**\n * Successful Path contract expectation.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface PathSuccess {\n readonly expected: \"success\"\n}\n\n/**\n * Successful `ChildProcessSpawner` contract options.\n *\n * Defaults use the current Node or Bun executable. In-process browser\n * doubles can provide their own scripted commands and expected output.\n *\n * There is no timeout case: a wall-clock budget is `Effect.timeout` around any\n * effect, not a per-spawn option, so there is nothing host-specific left to\n * assert.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface ChildProcessSuccess {\n readonly expected: \"success\"\n readonly execCommand?: ChildProcess.Command | undefined\n readonly expectedStdout?: string | undefined\n readonly streamCommand?: ChildProcess.Command | undefined\n readonly expectedStreamText?: string | undefined\n /** A command carrying `cwd` and `env` options through to the child. */\n readonly optionsCommand?: ChildProcess.Command | undefined\n readonly expectedOptionsStdout?: string | undefined\n /**\n * How the host handles a command fed from a `stdin` stream: the expected\n * stdout when it supports one, or the typed code when it does not.\n */\n readonly stdin?:\n | { readonly command: ChildProcess.Command; readonly expectedStdout: string }\n | FailureCapability<string>\n | undefined\n /** A two-leg pipeline, or the exact typed refusal for hosts without one. */\n readonly pipeline?:\n | { readonly command: ChildProcess.Command; readonly expectedStdout: string }\n | FailureCapability<string>\n | undefined\n readonly interruptCommand?: ChildProcess.Command | undefined\n}\n\n/**\n * Successful Jj contract expectation.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface JjSuccess {\n readonly expected: \"success\"\n /** Makes the first and second snapshots observably different. */\n readonly prepareChange?: ((phase: \"first\" | \"second\") => Effect.Effect<void, unknown>) | undefined\n /** Nonexistent path at which the contract may add one temporary workspace. */\n readonly workspacePath?: string | undefined\n /** Path whose repository root the host must resolve. */\n readonly rootFrom?: string | undefined\n /** Optional methods this otherwise available backend explicitly refuses. */\n readonly unsupported?: Partial<Record<\"root\" | \"revert\", JjErrorCode>> | undefined\n}\n\n/**\n * Every method on the closed Jj host service.\n * @category constants\n * @since 1.0.0-rc.0\n */\nexport const JjOperations = [\n \"snapshot\",\n \"restore\",\n \"diff\",\n \"workspaceAdd\",\n \"workspaceForget\",\n \"status\",\n \"root\",\n \"revert\"\n] as const\n\n/**\n * One method of the closed Jj host service.\n * @category models\n * @since 1.0.0-rc.0\n */\nexport type JjOperation = typeof JjOperations[number]\n\n/**\n * Successful HTTP contract probe.\n *\n * A request is explicit so the shared suite never invents a live network call.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface HttpClientProbe {\n /** Exact request the host must execute. */\n readonly request: HttpClientRequest.HttpClientRequest\n /** Adapter-specific response proof. */\n readonly assertResponse: (response: HttpClientResponse.HttpClientResponse) => void\n}\n\n/**\n * Successful read/write/redirect HTTP contract probes.\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface HttpClientSuccess {\n readonly expected: \"success\"\n /** Safe read method. */\n readonly read: HttpClientProbe\n /** Body-carrying write method. */\n readonly write: HttpClientProbe\n /** Manual redirect response; the host must not follow it below the guard. */\n readonly redirect: HttpClientProbe\n}\n\n/**\n * Complete capability expectations for the closed five-tag Host surface.\n * Unsupported capabilities are asserted with their code and are never skipped.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface HostContractCapabilities {\n readonly fileSystem: FileSystemSuccess | FailureCapability<string>\n readonly path: PathSuccess | FailureCapability<string>\n readonly childProcess: ChildProcessSuccess | FailureCapability<string>\n readonly jj: JjSuccess | FailureCapability<JjErrorCode>\n readonly httpClient: HttpClientSuccess | FailureCapability<string>\n}\n\n/**\n * The full layer output required by the contract.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport type HostContractLayer = Layer.Layer<\n FileSystem.FileSystem | Path.Path | ChildProcessSpawner | Jj | HttpClient,\n unknown\n>\n\n/**\n * Normalizes the code a Host failure is identified by, across the three shapes\n * the closed surface produces: a `code` field (`JjError`), a nested\n * `reason._tag` (`PlatformError`, `HttpClientError`), and a bare `_tag`.\n * Anything else is uncoded.\n *\n * @category testing\n * @since 1.0.0-rc.0\n */\nexport const errorCode = (error: unknown): string | undefined => {\n if (typeof error !== \"object\" || error === null) return undefined\n if (\"code\" in error && typeof error.code === \"string\") return error.code\n if (\n \"reason\" in error &&\n typeof error.reason === \"object\" &&\n error.reason !== null &&\n \"_tag\" in error.reason &&\n typeof error.reason._tag === \"string\"\n ) {\n return error.reason._tag\n }\n if (\"_tag\" in error && typeof error._tag === \"string\") return error._tag\n return undefined\n}\n\n/**\n * Asserts that `effect` fails with `code`. Succeeding is itself a contract\n * violation: a capability declared unsupported must never quietly work.\n *\n * @category testing\n * @since 1.0.0-rc.0\n */\nexport const assertFailure = <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n code: string\n): Effect.Effect<void, never, R> =>\n effect.pipe(\n Effect.match({\n onFailure: (error) => {\n expect(errorCode(error)).toBe(code)\n },\n onSuccess: () => {\n throw new Error(`expected typed failure ${code}`)\n }\n })\n )\n\nlet scratchSeq = 0\n\n/**\n * Allocates the scratch file path a contract bundle writes through when the\n * caller declares no `scratchPath` of its own.\n *\n * The path is absolute under the OS temp directory and scoped by both process\n * id and an allocation counter. A repo-relative default would put the file in\n * the working tree, where it is neither ignored by git nor private to one test\n * process: concurrent `vitest run` invocations would then race the same path,\n * and the suite's `ensuring` remove could truncate a sibling's file between its\n * write and its read.\n *\n * @category testing\n * @since 1.0.0-rc.0\n */\nexport const defaultScratchPath = (suite: string): string => {\n const slug = suite.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-+|-+$/g, \"\") || \"host\"\n // Ambient `process.pid` on purpose: this is a Node-only test harness that\n // must name a path unique to THIS operating-system process before any layer\n // exists to ask. Injecting it would only move the same read one frame out.\n return join(tmpdir(), `flows-host-contract-${process.pid}-${++scratchSeq}-${slug}`)\n}\n\n/** Everything a {@link HostContractLayer} provides; a case may use nothing else. */\ntype HostServices = Layer.Success<HostContractLayer>\n\nconst provide = <A, E>(\n effect: Effect.Effect<A, E, HostServices>,\n layer: HostContractLayer\n): Effect.Effect<A, E | unknown> => effect.pipe(Effect.provide(layer))\n\nconst run = <A, E>(effect: Effect.Effect<A, E, HostServices>, layer: HostContractLayer) => provide(effect, layer)\n\nconst unsupported = ChildProcess.make(\"host-contract-unsupported\")\n\nconst unsupportedChildProcess = (operation: \"string\" | \"stream\", code: string) =>\n Effect.gen(function*() {\n const spawner = yield* ChildProcessSpawner\n yield* operation === \"stream\"\n ? assertFailure(Stream.runDrain(spawner.streamString(unsupported)), code)\n : assertFailure(spawner.string(unsupported), code)\n })\n\nconst fileSystemProbe = (\n fs: FileSystem.FileSystem,\n operation: FileSystemOperation,\n root: string\n): Effect.Effect<unknown, unknown> => {\n const at = (name: string): string => `${root}/${operation}-${name}`\n const source = `${root}/source.txt`\n const bytes = new TextEncoder().encode(\"host-contract\")\n switch (operation) {\n case \"access\":\n return fs.access(source)\n case \"copy\":\n return fs.copy(source, at(\"copy.txt\"))\n case \"copyFile\":\n return fs.copyFile(source, at(\"copy-file.txt\"))\n case \"chmod\":\n return fs.chmod(source, 0o600)\n case \"chown\":\n return Effect.flatMap(fs.stat(source), (info) =>\n fs.chown(\n source,\n Option.getOrElse(info.uid, () => 0),\n Option.getOrElse(info.gid, () => 0)\n ))\n case \"glob\":\n return fs.glob(\"**/*.txt\", { root })\n case \"exists\":\n return Effect.tap(fs.exists(source), (exists) => Effect.sync(() => expect(exists).toBe(true)))\n case \"link\":\n return fs.link(source, at(\"hard-link.txt\"))\n case \"makeDirectory\":\n return fs.makeDirectory(at(\"directory\"), { recursive: true })\n case \"makeTempDirectory\":\n return fs.makeTempDirectory({ directory: root })\n case \"makeTempDirectoryScoped\":\n return Effect.scoped(fs.makeTempDirectoryScoped({ directory: root }))\n case \"makeTempFile\":\n return fs.makeTempFile({ directory: root })\n case \"makeTempFileScoped\":\n return Effect.scoped(fs.makeTempFileScoped({ directory: root }))\n case \"open\":\n return Effect.scoped(fs.open(source, { flag: \"r\" }))\n case \"readDirectory\":\n return Effect.tap(fs.readDirectory(root), (entries) =>\n Effect.sync(() => {\n expect(Array.isArray(entries)).toBe(true)\n expect(entries.every((entry) => typeof entry === \"string\")).toBe(true)\n }))\n case \"readFile\":\n return Effect.gen(function*() {\n const first = yield* fs.readFile(source)\n expect(first).toBeInstanceOf(Uint8Array)\n const original = first[0]\n expect(original).toBeDefined()\n first[0] = original! ^ 0xff\n const second = yield* fs.readFile(source)\n expect(second[0]).toBe(original)\n })\n case \"readFileString\":\n return fs.readFileString(source)\n case \"readLink\": {\n const link = at(\"symbolic-link.txt\")\n return fs.symlink(source, link).pipe(Effect.andThen(fs.readLink(link)))\n }\n case \"realPath\":\n return fs.realPath(source)\n case \"remove\": {\n const path = at(\"remove.txt\")\n return fs.writeFile(path, bytes).pipe(Effect.andThen(fs.remove(path)))\n }\n case \"rename\": {\n const from = at(\"rename-from.txt\")\n return fs.writeFile(from, bytes).pipe(Effect.andThen(fs.rename(from, at(\"rename-to.txt\"))))\n }\n case \"sink\":\n return Stream.run(Stream.succeed(bytes), fs.sink(at(\"sink.txt\")))\n case \"stat\":\n return Effect.tap(fs.stat(source), (info) =>\n Effect.sync(() => {\n expect(typeof info.size).toBe(\"bigint\")\n expect(typeof info.type).toBe(\"string\")\n }))\n case \"stream\":\n return Stream.runForEach(\n fs.stream(source),\n (chunk) => Effect.sync(() => expect(chunk).toBeInstanceOf(Uint8Array))\n )\n case \"symlink\":\n return fs.symlink(source, at(\"symlink.txt\"))\n case \"truncate\": {\n const path = at(\"truncate.txt\")\n return fs.writeFile(path, bytes).pipe(Effect.andThen(fs.truncate(path, 1)))\n }\n case \"utimes\":\n return fs.utimes(source, new Date(0), new Date(0))\n case \"watch\":\n return Effect.gen(function*() {\n const watched = yield* Stream.runHead(fs.watch(root)).pipe(\n Effect.timeout(\"5 seconds\"),\n Effect.forkChild({ startImmediately: true })\n )\n // Keep producing events until the watcher observes one: subscribing\n // can take longer than any fixed initial delay. The foreign Promise\n // also works when the supplied host provides a frozen TestClock.\n yield* Effect.raceFirst(\n Fiber.join(watched),\n fs.writeFile(at(\"watched.txt\"), bytes).pipe(\n Effect.andThen(Effect.promise(() => new Promise((resolve) => setTimeout(resolve, 10)))),\n Effect.forever\n )\n )\n })\n case \"writeFile\":\n return Effect.gen(function*() {\n const input = bytes.slice()\n const expected = input[0]\n expect(expected).toBeDefined()\n yield* fs.writeFile(at(\"write.txt\"), input)\n input[0] = expected! ^ 0xff\n expect((yield* fs.readFile(at(\"write.txt\")))[0]).toBe(expected)\n })\n case \"writeFileString\":\n return fs.writeFileString(at(\"write-string.txt\"), \"host-contract\")\n }\n}\n\n/** The default stdin probe: echo back one line read from the child's stdin. */\nconst defaultStdinCommand = ChildProcess.make(\n process.execPath,\n [\n \"-e\",\n `let input = \"\"; process.stdin.setEncoding(\"utf8\"); process.stdin.on(\"data\", chunk => input += chunk); process.stdin.on(\"end\", () => process.stdout.write(input.replace(/\\\\r?\\\\n$/, \"\")));`\n ],\n { stdin: Stream.fromArray([new TextEncoder().encode(\"stdin\\n\")]) }\n)\n\n/** The default two-leg process probe. */\nconst defaultPipelineCommand = ChildProcess.pipeTo(\n ChildProcess.make(process.execPath, [\"-e\", `process.stdout.write(\"host-contract-pipeline\")`]),\n ChildProcess.make(process.execPath, [\"-e\", \"process.stdin.pipe(process.stdout)\"])\n)\n\n/** The default multi-leg cancellation probe. */\nconst defaultInterruptCommand = ChildProcess.pipeTo(\n ChildProcess.make(process.execPath, [\"-e\", \"setTimeout(() => {}, 10_000)\"]),\n ChildProcess.make(process.execPath, [\"-e\", \"process.stdin.pipe(process.stdout)\"])\n)\n\n/**\n * Registers the shared Host contract with Vitest.\n *\n * Every invocation creates ten cases: complete service presence,\n * FileSystem, Path, five child-process lifecycle cases, Jj, and\n * HttpClient.\n *\n * @category testing\n * @since 1.0.0-rc.0\n */\nexport const runHostContract = (\n name: string,\n layer: HostContractLayer,\n caps: HostContractCapabilities\n): void => {\n const fileSystemCap = caps.fileSystem\n const pathCap = caps.path\n const childProcessCap = caps.childProcess\n const jjCap = caps.jj\n const httpClientCap = caps.httpClient\n const scratchPath = fileSystemCap.expected === \"success\"\n ? fileSystemCap.scratchPath ?? defaultScratchPath(name)\n : \"\"\n\n describe(`${name} Host contract`, () => {\n it.live(\"provides every tag in the closed Host service list\", () =>\n run(\n Effect.gen(function*() {\n yield* FileSystem.FileSystem\n yield* Path.Path\n yield* ChildProcessSpawner\n yield* JjService.Jj\n yield* HttpClient\n }),\n layer\n ))\n\n it.live(\"declares every FileSystem operation\", () =>\n run(\n fileSystemCap.expected === \"failure\"\n ? Effect.gen(function*() {\n const fs = yield* FileSystem.FileSystem\n yield* Effect.forEach(\n FileSystemOperations,\n (operation) =>\n assertFailure(\n fileSystemProbe(fs, operation, \"/host-contract/unsupported\"),\n fileSystemCap.code\n ),\n { discard: true }\n )\n })\n : Effect.gen(function*() {\n const fs = yield* FileSystem.FileSystem\n const root = scratchPath\n const bytes = new TextEncoder().encode(\"host-contract\")\n yield* Effect.gen(function*() {\n yield* fs.makeDirectory(root, { recursive: true })\n yield* fs.writeFile(`${root}/source.txt`, bytes)\n yield* FileSystemBatchContract.check(fs, root)\n yield* Effect.forEach(\n FileSystemOperations,\n (operation) => {\n const probe = fileSystemProbe(fs, operation, root)\n const code = fileSystemCap.unsupported?.[operation]\n return code === undefined ? probe : assertFailure(probe, code)\n },\n { discard: true }\n )\n }).pipe(\n Effect.ensuring(fs.remove(root, { recursive: true, force: true }).pipe(Effect.ignore))\n )\n }),\n layer\n ))\n\n it.live(\"declares Path behavior\", () =>\n run(\n pathCap.expected === \"failure\"\n ? Effect.gen(function*() {\n const path = yield* Path.Path\n yield* assertFailure(\n Effect.try({\n try: () => path.fromFileUrl(new URL(\"file:///host-contract/value\")),\n catch: (error) => error\n }),\n pathCap.code\n )\n })\n : Effect.gen(function*() {\n const path = yield* Path.Path\n expect(path.normalize(\"/host-contract/./nested/../value\")).toBe(`${path.sep}host-contract${path.sep}value`)\n }),\n layer\n ))\n\n it.live(\"declares buffered child-process behavior\", () =>\n run(\n childProcessCap.expected === \"failure\"\n ? unsupportedChildProcess(\"string\", childProcessCap.code)\n : Effect.gen(function*() {\n const spawner = yield* ChildProcessSpawner\n const command = childProcessCap.execCommand ??\n ChildProcess.make(process.execPath, [\"-e\", `process.stdout.write(\"host-contract\")`])\n expect(yield* spawner.string(command)).toBe(childProcessCap.expectedStdout ?? \"host-contract\")\n expect(yield* spawner.exitCode(command)).toBe(0)\n }),\n layer\n ))\n\n it.live(\"declares child-process streaming behavior\", () =>\n run(\n childProcessCap.expected === \"failure\"\n ? unsupportedChildProcess(\"stream\", childProcessCap.code)\n : Effect.gen(function*() {\n const spawner = yield* ChildProcessSpawner\n const output = yield* Stream.mkString(\n spawner.streamString(\n childProcessCap.streamCommand ??\n ChildProcess.make(process.execPath, [\"-e\", `process.stdout.write(\"host-contract-stream\")`])\n )\n )\n expect(output).toContain(childProcessCap.expectedStreamText ?? \"host-contract-stream\")\n }),\n layer\n ))\n\n it.live(\"declares child-process cwd and env option behavior\", () =>\n run(\n childProcessCap.expected === \"failure\"\n ? unsupportedChildProcess(\"string\", childProcessCap.code)\n : Effect.gen(function*() {\n const spawner = yield* ChildProcessSpawner\n const output = yield* spawner.string(\n childProcessCap.optionsCommand ??\n ChildProcess.make(process.execPath, [\"-e\", \"process.stdout.write(process.env.HOST_CONTRACT_ENV)\"], {\n cwd: tmpdir(),\n env: { HOST_CONTRACT_ENV: \"env\" },\n extendEnv: true\n })\n )\n expect(output).toBe(childProcessCap.expectedOptionsStdout ?? \"env\")\n }),\n layer\n ))\n\n it.live(\"declares child-process stdin behavior\", () =>\n run(\n Effect.gen(function*() {\n const spawner = yield* ChildProcessSpawner\n const stdinCap = childProcessCap.expected === \"failure\"\n ? childProcessCap\n : childProcessCap.stdin ?? { command: defaultStdinCommand, expectedStdout: \"stdin\" }\n if (\"expected\" in stdinCap) {\n yield* assertFailure(spawner.string(defaultStdinCommand), stdinCap.code)\n return\n }\n expect(yield* spawner.string(stdinCap.command)).toBe(stdinCap.expectedStdout)\n }),\n layer\n ))\n\n it.live(\"declares child-process pipeline behavior\", () =>\n run(\n Effect.gen(function*() {\n const spawner = yield* ChildProcessSpawner\n const pipelineCap = childProcessCap.expected === \"failure\"\n ? childProcessCap\n : childProcessCap.pipeline ?? {\n command: defaultPipelineCommand,\n expectedStdout: \"host-contract-pipeline\"\n }\n if (\"expected\" in pipelineCap) {\n yield* assertFailure(spawner.string(defaultPipelineCommand), pipelineCap.code)\n return\n }\n expect(yield* spawner.string(pipelineCap.command)).toBe(pipelineCap.expectedStdout)\n }),\n layer\n ))\n\n it.live(\"declares child-process interruption behavior\", () =>\n run(\n childProcessCap.expected === \"failure\"\n ? unsupportedChildProcess(\"stream\", childProcessCap.code)\n : Effect.gen(function*() {\n const spawner = yield* ChildProcessSpawner\n const ready = yield* Deferred.make<ChildProcessHandle>()\n const fiber = yield* Effect.scoped(\n Effect.gen(function*() {\n const handle = yield* spawner.spawn(\n childProcessCap.interruptCommand ?? defaultInterruptCommand\n )\n yield* Deferred.succeed(ready, handle)\n yield* handle.exitCode\n })\n ).pipe(\n Effect.forkChild({ startImmediately: true })\n )\n const handle = yield* Deferred.await(ready)\n expect(yield* handle.isRunning).toBe(true)\n yield* Fiber.interrupt(fiber)\n expect(yield* handle.isRunning).toBe(false)\n }),\n layer\n ))\n\n it.live(\"declares every Jj operation\", () =>\n run(\n jjCap.expected === \"failure\"\n ? Effect.gen(function*() {\n const jj = yield* JjService.Jj\n const root = jj.root\n const revert = jj.revert\n expect(root).toBeTypeOf(\"function\")\n expect(revert).toBeTypeOf(\"function\")\n yield* Effect.forEach([\n jj.snapshot(\"host contract\"),\n jj.restore(\"host-contract-change\"),\n jj.diff(\"host-contract-from\", \"host-contract-to\"),\n jj.workspaceAdd(\"host-contract\", \"/host-contract/workspace\", \"host-contract-change\"),\n jj.workspaceForget(\"host-contract\"),\n jj.status(),\n root!(\"/host-contract\"),\n revert!(\"host-contract-change\")\n ], (probe) =>\n assertFailure(probe, jjCap.code), { discard: true })\n })\n : Effect.gen(function*() {\n const jj = yield* JjService.Jj\n const root = jj.root\n const revert = jj.revert\n expect(root).toBeTypeOf(\"function\")\n expect(revert).toBeTypeOf(\"function\")\n yield* (jjCap.prepareChange?.(\"first\") ?? Effect.void)\n const first = yield* jj.snapshot(\"host contract first\")\n expect(first.changeId.length).toBeGreaterThan(0)\n yield* (jjCap.prepareChange?.(\"second\") ?? Effect.void)\n const second = yield* jj.snapshot(\"host contract second\")\n expect(second.changeId.length).toBeGreaterThan(0)\n expect(typeof (yield* jj.diff(first.changeId, second.changeId))).toBe(\"string\")\n const revertCode = jjCap.unsupported?.revert\n if (revertCode === undefined) {\n const reverted = yield* revert!(second.changeId)\n expect(Array.isArray(reverted.reverted)).toBe(true)\n expect(reverted.reverted.every((path) =>\n typeof path === \"string\"\n )).toBe(true)\n } else {\n yield* assertFailure(revert!(second.changeId), revertCode)\n }\n yield* jj.restore(first.changeId)\n const workspaceName = `host-contract-${process.pid}-${++scratchSeq}`\n yield* jj.workspaceAdd(\n workspaceName,\n jjCap.workspacePath ?? defaultScratchPath(`${name}-jj-workspace`),\n first.changeId\n )\n yield* jj.workspaceForget(workspaceName)\n expect(typeof (yield* jj.status())).toBe(\"string\")\n const rootCode = jjCap.unsupported?.root\n const rootFrom = jjCap.rootFrom ?? \".\"\n if (rootCode === undefined) {\n expect((yield* root!(rootFrom)).length).toBeGreaterThan(0)\n } else {\n yield* assertFailure(root!(rootFrom), rootCode)\n }\n }),\n layer\n ))\n\n it.live(\"declares HTTP read, write, and redirect behavior\", () =>\n run(\n httpClientCap.expected === \"failure\"\n ? Effect.gen(function*() {\n const client = yield* HttpClient\n yield* Effect.forEach([\n HttpClientRequest.get(\"http://127.0.0.1:1/host-contract/read\"),\n HttpClientRequest.post(\"http://127.0.0.1:1/host-contract/write\").pipe(\n HttpClientRequest.bodyText(\"host-contract\")\n ),\n HttpClientRequest.get(\"http://127.0.0.1:1/host-contract/redirect\")\n ], (request) =>\n assertFailure(client.execute(request), httpClientCap.code), { discard: true })\n })\n : Effect.gen(function*() {\n const client = yield* HttpClient\n for (const probe of [httpClientCap.read, httpClientCap.write, httpClientCap.redirect]) {\n const response = yield* client.execute(probe.request)\n expect(typeof response.status).toBe(\"number\")\n expect(typeof response.headers).toBe(\"object\")\n probe.assertResponse(response)\n }\n }),\n layer\n ))\n })\n}\n"]}
1
+ {"version":3,"file":"HostContract.js","sourceRoot":"","sources":["../../../src/test/HostContract.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared contract suite for complete Host bundles.\n *\n * This module is emitted as ESM, CJS, and declarations and exported from\n * `@smthrs/kernel/test/contract`. It intentionally has a Vitest peer because\n * it registers a reusable behavioral contract for third-party Host bundles.\n *\n * @since 1.0.0-rc.0\n */\n\n// Every case here runs on real elapsed time — subprocess spawns, file locks,\n// mtimes, and poll loops — so the suite uses `it.live`; `it.effect`'s\n// TestClock never advances for them.\n\nimport { describe, expect, it } from \"@effect/vitest\"\nimport * as JjService from \"@smthrs/jj\"\nimport type { Jj, JjErrorCode } from \"@smthrs/jj\"\nimport { Deferred, Effect, Fiber, FileSystem, type Layer, Option, Path, Stream } from \"effect\"\nimport { HttpClient } from \"effect/http/HttpClient\"\nimport * as HttpClientRequest from \"effect/http/HttpClientRequest\"\nimport type * as HttpClientResponse from \"effect/http/HttpClientResponse\"\nimport * as ChildProcess from \"effect/process/ChildProcess\"\nimport { type ChildProcessHandle, ChildProcessSpawner } from \"effect/process/ChildProcessSpawner\"\nimport { tmpdir } from \"node:os\"\nimport { join } from \"node:path\"\nimport * as FileSystemBatchContract from \"./FileSystemBatchContract.ts\"\n\nexport { check as checkFileSystemBatch } from \"./FileSystemBatchContract.ts\"\n\n/**\n * A capability that must fail with a stable typed code.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface FailureCapability<Code extends string> {\n readonly expected: \"failure\"\n readonly code: Code\n}\n\n/**\n * Successful filesystem contract options.\n *\n * `scratchPath` is required only for hosts whose filesystem does not accept an\n * OS temp path — an in-memory double, say. Omitting it takes\n * {@link defaultScratchPath}, which is process-scoped and outside the working\n * tree.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface FileSystemSuccess {\n readonly expected: \"success\"\n readonly scratchPath?: string | undefined\n /** Operations this otherwise available host deliberately refuses. */\n readonly unsupported?: Partial<Record<FileSystemOperation, string>> | undefined\n}\n\n/**\n * Every method on Effect's closed filesystem service.\n * @category constants\n * @since 1.0.0-rc.0\n */\nexport const FileSystemOperations = [\n \"access\",\n \"copy\",\n \"copyFile\",\n \"chmod\",\n \"chown\",\n \"glob\",\n \"exists\",\n \"link\",\n \"makeDirectory\",\n \"makeTempDirectory\",\n \"makeTempDirectoryScoped\",\n \"makeTempFile\",\n \"makeTempFileScoped\",\n \"open\",\n \"readDirectory\",\n \"readFile\",\n \"readFileString\",\n \"readLink\",\n \"realPath\",\n \"remove\",\n \"rename\",\n \"sink\",\n \"stat\",\n \"stream\",\n \"symlink\",\n \"truncate\",\n \"utimes\",\n \"watch\",\n \"writeFile\",\n \"writeFileString\"\n] as const\n\n/**\n * One method of Effect's closed filesystem service.\n * @category models\n * @since 1.0.0-rc.0\n */\nexport type FileSystemOperation = typeof FileSystemOperations[number]\n\n/**\n * Successful Path contract expectation.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface PathSuccess {\n readonly expected: \"success\"\n}\n\n/**\n * Successful `ChildProcessSpawner` contract options.\n *\n * Defaults use the current Node or Bun executable. In-process browser\n * doubles can provide their own scripted commands and expected output.\n *\n * There is no timeout case: a wall-clock budget is `Effect.timeout` around any\n * effect, not a per-spawn option, so there is nothing host-specific left to\n * assert.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface ChildProcessSuccess {\n readonly expected: \"success\"\n readonly execCommand?: ChildProcess.Command | undefined\n readonly expectedStdout?: string | undefined\n readonly streamCommand?: ChildProcess.Command | undefined\n readonly expectedStreamText?: string | undefined\n /** A command carrying `cwd` and `env` options through to the child. */\n readonly optionsCommand?: ChildProcess.Command | undefined\n readonly expectedOptionsStdout?: string | undefined\n /**\n * How the host handles a command fed from a `stdin` stream: the expected\n * stdout when it supports one, or the typed code when it does not.\n */\n readonly stdin?:\n | { readonly command: ChildProcess.Command; readonly expectedStdout: string }\n | FailureCapability<string>\n | undefined\n /** A two-leg pipeline, or the exact typed refusal for hosts without one. */\n readonly pipeline?:\n | { readonly command: ChildProcess.Command; readonly expectedStdout: string }\n | FailureCapability<string>\n | undefined\n readonly interruptCommand?: ChildProcess.Command | undefined\n}\n\n/**\n * Successful Jj contract expectation.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface JjSuccess {\n readonly expected: \"success\"\n /** Makes the first and second snapshots observably different. */\n readonly prepareChange?: ((phase: \"first\" | \"second\") => Effect.Effect<void, unknown>) | undefined\n /** Nonexistent path at which the contract may add one temporary workspace. */\n readonly workspacePath?: string | undefined\n /** Path whose repository root the host must resolve. */\n readonly rootFrom?: string | undefined\n /** Optional methods this otherwise available backend explicitly refuses. */\n readonly unsupported?: Partial<Record<\"root\" | \"revert\", JjErrorCode>> | undefined\n}\n\n/**\n * Every method on the closed Jj host service.\n * @category constants\n * @since 1.0.0-rc.0\n */\nexport const JjOperations = [\n \"snapshot\",\n \"restore\",\n \"diff\",\n \"workspaceAdd\",\n \"workspaceForget\",\n \"status\",\n \"root\",\n \"revert\"\n] as const\n\n/**\n * One method of the closed Jj host service.\n * @category models\n * @since 1.0.0-rc.0\n */\nexport type JjOperation = typeof JjOperations[number]\n\n/**\n * Successful HTTP contract probe.\n *\n * A request is explicit so the shared suite never invents a live network call.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface HttpClientProbe {\n /** Exact request the host must execute. */\n readonly request: HttpClientRequest.HttpClientRequest\n /** Adapter-specific response proof. */\n readonly assertResponse: (response: HttpClientResponse.HttpClientResponse) => void\n}\n\n/**\n * Successful read/write/redirect HTTP contract probes.\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface HttpClientSuccess {\n readonly expected: \"success\"\n /** Safe read method. */\n readonly read: HttpClientProbe\n /** Body-carrying write method. */\n readonly write: HttpClientProbe\n /** Manual redirect response; the host must not follow it below the guard. */\n readonly redirect: HttpClientProbe\n}\n\n/**\n * Complete capability expectations for the closed five-tag Host surface.\n * Unsupported capabilities are asserted with their code and are never skipped.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface HostContractCapabilities {\n readonly fileSystem: FileSystemSuccess | FailureCapability<string>\n readonly path: PathSuccess | FailureCapability<string>\n readonly childProcess: ChildProcessSuccess | FailureCapability<string>\n readonly jj: JjSuccess | FailureCapability<JjErrorCode>\n readonly httpClient: HttpClientSuccess | FailureCapability<string>\n}\n\n/**\n * The full layer output required by the contract.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport type HostContractLayer = Layer.Layer<\n FileSystem.FileSystem | Path.Path | ChildProcessSpawner | Jj | HttpClient,\n unknown\n>\n\n/**\n * Normalizes the code a Host failure is identified by, across the three shapes\n * the closed surface produces: a `code` field (`JjError`), a nested\n * `reason._tag` (`PlatformError`, `HttpClientError`), and a bare `_tag`.\n * Anything else is uncoded.\n *\n * @category testing\n * @since 1.0.0-rc.0\n */\nexport const errorCode = (error: unknown): string | undefined => {\n if (typeof error !== \"object\" || error === null) return undefined\n if (\"code\" in error && typeof error.code === \"string\") return error.code\n if (\n \"reason\" in error &&\n typeof error.reason === \"object\" &&\n error.reason !== null &&\n \"_tag\" in error.reason &&\n typeof error.reason._tag === \"string\"\n ) {\n return error.reason._tag\n }\n if (\"_tag\" in error && typeof error._tag === \"string\") return error._tag\n return undefined\n}\n\n/**\n * Asserts that `effect` fails with `code`. Succeeding is itself a contract\n * violation: a capability declared unsupported must never quietly work.\n *\n * @category testing\n * @since 1.0.0-rc.0\n */\nexport const assertFailure = <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n code: string\n): Effect.Effect<void, never, R> =>\n effect.pipe(\n Effect.match({\n onFailure: (error) => {\n expect(errorCode(error)).toBe(code)\n },\n onSuccess: () => {\n throw new Error(`expected typed failure ${code}`)\n }\n })\n )\n\nlet scratchSeq = 0\n\n/**\n * Allocates the scratch file path a contract bundle writes through when the\n * caller declares no `scratchPath` of its own.\n *\n * The path is absolute under the OS temp directory and scoped by both process\n * id and an allocation counter. A repo-relative default would put the file in\n * the working tree, where it is neither ignored by git nor private to one test\n * process: concurrent `vitest run` invocations would then race the same path,\n * and the suite's `ensuring` remove could truncate a sibling's file between its\n * write and its read.\n *\n * @category testing\n * @since 1.0.0-rc.0\n */\nexport const defaultScratchPath = (suite: string): string => {\n const slug = suite.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-+|-+$/g, \"\") || \"host\"\n // Ambient `process.pid` on purpose: this is a Node-only test harness that\n // must name a path unique to THIS operating-system process before any layer\n // exists to ask. Injecting it would only move the same read one frame out.\n return join(tmpdir(), `flows-host-contract-${process.pid}-${++scratchSeq}-${slug}`)\n}\n\n/** Everything a {@link HostContractLayer} provides; a case may use nothing else. */\ntype HostServices = Layer.Success<HostContractLayer>\n\nconst provide = <A, E>(\n effect: Effect.Effect<A, E, HostServices>,\n layer: HostContractLayer\n): Effect.Effect<A, E | unknown> => effect.pipe(Effect.provide(layer))\n\nconst run = <A, E>(effect: Effect.Effect<A, E, HostServices>, layer: HostContractLayer) => provide(effect, layer)\n\nconst unsupported = ChildProcess.make(\"host-contract-unsupported\")\n\nconst unsupportedChildProcess = (operation: \"string\" | \"stream\", code: string) =>\n Effect.gen(function*() {\n const spawner = yield* ChildProcessSpawner\n yield* operation === \"stream\"\n ? assertFailure(Stream.runDrain(spawner.streamString(unsupported)), code)\n : assertFailure(spawner.string(unsupported), code)\n })\n\nconst fileSystemProbe = (\n fs: FileSystem.FileSystem,\n operation: FileSystemOperation,\n root: string\n): Effect.Effect<unknown, unknown> => {\n const at = (name: string): string => `${root}/${operation}-${name}`\n const source = `${root}/source.txt`\n const bytes = new TextEncoder().encode(\"host-contract\")\n switch (operation) {\n case \"access\":\n return fs.access(source)\n case \"copy\":\n return fs.copy(source, at(\"copy.txt\"))\n case \"copyFile\":\n return fs.copyFile(source, at(\"copy-file.txt\"))\n case \"chmod\":\n return fs.chmod(source, 0o600)\n case \"chown\":\n return Effect.flatMap(fs.stat(source), (info) =>\n fs.chown(\n source,\n Option.getOrElse(info.uid, () => 0),\n Option.getOrElse(info.gid, () => 0)\n ))\n case \"glob\":\n return fs.glob(\"**/*.txt\", { root })\n case \"exists\":\n return Effect.tap(fs.exists(source), (exists) => Effect.sync(() => expect(exists).toBe(true)))\n case \"link\":\n return fs.link(source, at(\"hard-link.txt\"))\n case \"makeDirectory\":\n return fs.makeDirectory(at(\"directory\"), { recursive: true })\n case \"makeTempDirectory\":\n return fs.makeTempDirectory({ directory: root })\n case \"makeTempDirectoryScoped\":\n return Effect.scoped(fs.makeTempDirectoryScoped({ directory: root }))\n case \"makeTempFile\":\n return fs.makeTempFile({ directory: root })\n case \"makeTempFileScoped\":\n return Effect.scoped(fs.makeTempFileScoped({ directory: root }))\n case \"open\":\n return Effect.scoped(fs.open(source, { flag: \"r\" }))\n case \"readDirectory\":\n return Effect.tap(fs.readDirectory(root), (entries) =>\n Effect.sync(() => {\n expect(Array.isArray(entries)).toBe(true)\n expect(entries.every((entry) => typeof entry === \"string\")).toBe(true)\n }))\n case \"readFile\":\n return Effect.gen(function*() {\n const first = yield* fs.readFile(source)\n expect(first).toBeInstanceOf(Uint8Array)\n const original = first[0]\n expect(original).toBeDefined()\n first[0] = original! ^ 0xff\n const second = yield* fs.readFile(source)\n expect(second[0]).toBe(original)\n })\n case \"readFileString\":\n return fs.readFileString(source)\n case \"readLink\": {\n const link = at(\"symbolic-link.txt\")\n return fs.symlink(source, link).pipe(Effect.andThen(fs.readLink(link)))\n }\n case \"realPath\":\n return fs.realPath(source)\n case \"remove\": {\n const path = at(\"remove.txt\")\n return fs.writeFile(path, bytes).pipe(Effect.andThen(fs.remove(path)))\n }\n case \"rename\": {\n const from = at(\"rename-from.txt\")\n return fs.writeFile(from, bytes).pipe(Effect.andThen(fs.rename(from, at(\"rename-to.txt\"))))\n }\n case \"sink\":\n return Stream.run(Stream.succeed(bytes), fs.sink(at(\"sink.txt\")))\n case \"stat\":\n return Effect.tap(fs.stat(source), (info) =>\n Effect.sync(() => {\n expect(typeof info.size).toBe(\"bigint\")\n expect(typeof info.type).toBe(\"string\")\n }))\n case \"stream\":\n return Stream.runForEach(\n fs.stream(source),\n (chunk) => Effect.sync(() => expect(chunk).toBeInstanceOf(Uint8Array))\n )\n case \"symlink\":\n return fs.symlink(source, at(\"symlink.txt\"))\n case \"truncate\": {\n const path = at(\"truncate.txt\")\n return fs.writeFile(path, bytes).pipe(Effect.andThen(fs.truncate(path, 1)))\n }\n case \"utimes\":\n return fs.utimes(source, new Date(0), new Date(0))\n case \"watch\":\n return Effect.gen(function*() {\n const watched = yield* Stream.runHead(fs.watch(root)).pipe(\n Effect.timeout(\"5 seconds\"),\n Effect.forkChild({ startImmediately: true })\n )\n // Keep producing events until the watcher observes one: subscribing\n // can take longer than any fixed initial delay. The foreign Promise\n // also works when the supplied host provides a frozen TestClock.\n yield* Effect.raceFirst(\n Fiber.join(watched),\n fs.writeFile(at(\"watched.txt\"), bytes).pipe(\n Effect.andThen(Effect.promise(() => new Promise((resolve) => setTimeout(resolve, 10)))),\n Effect.forever\n )\n )\n })\n case \"writeFile\":\n return Effect.gen(function*() {\n const input = bytes.slice()\n const expected = input[0]\n expect(expected).toBeDefined()\n yield* fs.writeFile(at(\"write.txt\"), input)\n input[0] = expected! ^ 0xff\n expect((yield* fs.readFile(at(\"write.txt\")))[0]).toBe(expected)\n })\n case \"writeFileString\":\n return fs.writeFileString(at(\"write-string.txt\"), \"host-contract\")\n }\n}\n\n/** The default stdin probe: echo back one line read from the child's stdin. */\nconst defaultStdinCommand = ChildProcess.make(\n process.execPath,\n [\n \"-e\",\n `let input = \"\"; process.stdin.setEncoding(\"utf8\"); process.stdin.on(\"data\", chunk => input += chunk); process.stdin.on(\"end\", () => process.stdout.write(input.replace(/\\\\r?\\\\n$/, \"\")));`\n ],\n { stdin: Stream.fromArray([new TextEncoder().encode(\"stdin\\n\")]) }\n)\n\n/** The default two-leg process probe. */\nconst defaultPipelineCommand = ChildProcess.pipeTo(\n ChildProcess.make(process.execPath, [\"-e\", `process.stdout.write(\"host-contract-pipeline\")`]),\n ChildProcess.make(process.execPath, [\"-e\", \"process.stdin.pipe(process.stdout)\"])\n)\n\n/** The default multi-leg cancellation probe. */\nconst defaultInterruptCommand = ChildProcess.pipeTo(\n ChildProcess.make(process.execPath, [\"-e\", \"setTimeout(() => {}, 10_000)\"]),\n ChildProcess.make(process.execPath, [\"-e\", \"process.stdin.pipe(process.stdout)\"])\n)\n\n/**\n * Registers the shared Host contract with Vitest.\n *\n * Every invocation creates ten cases: complete service presence,\n * FileSystem, Path, five child-process lifecycle cases, Jj, and\n * HttpClient.\n *\n * @category testing\n * @since 1.0.0-rc.0\n */\nexport const runHostContract = (\n name: string,\n layer: HostContractLayer,\n caps: HostContractCapabilities\n): void => {\n const fileSystemCap = caps.fileSystem\n const pathCap = caps.path\n const childProcessCap = caps.childProcess\n const jjCap = caps.jj\n const httpClientCap = caps.httpClient\n const scratchPath = fileSystemCap.expected === \"success\"\n ? fileSystemCap.scratchPath ?? defaultScratchPath(name)\n : \"\"\n\n describe(`${name} Host contract`, () => {\n it.live(\"provides every tag in the closed Host service list\", () =>\n run(\n Effect.gen(function*() {\n yield* FileSystem.FileSystem\n yield* Path.Path\n yield* ChildProcessSpawner\n yield* JjService.Jj\n yield* HttpClient\n }),\n layer\n ))\n\n it.live(\"declares every FileSystem operation\", () =>\n run(\n fileSystemCap.expected === \"failure\"\n ? Effect.gen(function*() {\n const fs = yield* FileSystem.FileSystem\n yield* Effect.forEach(\n FileSystemOperations,\n (operation) =>\n assertFailure(\n fileSystemProbe(fs, operation, \"/host-contract/unsupported\"),\n fileSystemCap.code\n ),\n { discard: true }\n )\n })\n : Effect.gen(function*() {\n const fs = yield* FileSystem.FileSystem\n const root = scratchPath\n const bytes = new TextEncoder().encode(\"host-contract\")\n yield* Effect.gen(function*() {\n yield* fs.makeDirectory(root, { recursive: true })\n yield* fs.writeFile(`${root}/source.txt`, bytes)\n yield* FileSystemBatchContract.check(fs, root)\n yield* Effect.forEach(\n FileSystemOperations,\n (operation) => {\n const probe = fileSystemProbe(fs, operation, root)\n const code = fileSystemCap.unsupported?.[operation]\n return code === undefined ? probe : assertFailure(probe, code)\n },\n { discard: true }\n )\n }).pipe(\n Effect.ensuring(fs.remove(root, { recursive: true, force: true }).pipe(Effect.ignore))\n )\n }),\n layer\n ))\n\n it.live(\"declares Path behavior\", () =>\n run(\n pathCap.expected === \"failure\"\n ? Effect.gen(function*() {\n const path = yield* Path.Path\n yield* assertFailure(\n Effect.try({\n try: () => path.fromFileUrl(new URL(\"file:///host-contract/value\")),\n catch: (error) => error\n }),\n pathCap.code\n )\n })\n : Effect.gen(function*() {\n const path = yield* Path.Path\n expect(path.normalize(\"/host-contract/./nested/../value\")).toBe(`${path.sep}host-contract${path.sep}value`)\n }),\n layer\n ))\n\n it.live(\"declares buffered child-process behavior\", () =>\n run(\n childProcessCap.expected === \"failure\"\n ? unsupportedChildProcess(\"string\", childProcessCap.code)\n : Effect.gen(function*() {\n const spawner = yield* ChildProcessSpawner\n const command = childProcessCap.execCommand ??\n ChildProcess.make(process.execPath, [\"-e\", `process.stdout.write(\"host-contract\")`])\n expect(yield* spawner.string(command)).toBe(childProcessCap.expectedStdout ?? \"host-contract\")\n expect(yield* spawner.exitCode(command)).toBe(0)\n }),\n layer\n ))\n\n it.live(\"declares child-process streaming behavior\", () =>\n run(\n childProcessCap.expected === \"failure\"\n ? unsupportedChildProcess(\"stream\", childProcessCap.code)\n : Effect.gen(function*() {\n const spawner = yield* ChildProcessSpawner\n const output = yield* Stream.mkString(\n spawner.streamString(\n childProcessCap.streamCommand ??\n ChildProcess.make(process.execPath, [\"-e\", `process.stdout.write(\"host-contract-stream\")`])\n )\n )\n expect(output).toContain(childProcessCap.expectedStreamText ?? \"host-contract-stream\")\n }),\n layer\n ))\n\n it.live(\"declares child-process cwd and env option behavior\", () =>\n run(\n childProcessCap.expected === \"failure\"\n ? unsupportedChildProcess(\"string\", childProcessCap.code)\n : Effect.gen(function*() {\n const spawner = yield* ChildProcessSpawner\n const output = yield* spawner.string(\n childProcessCap.optionsCommand ??\n ChildProcess.make(process.execPath, [\"-e\", \"process.stdout.write(process.env.HOST_CONTRACT_ENV)\"], {\n cwd: tmpdir(),\n env: { HOST_CONTRACT_ENV: \"env\" },\n extendEnv: true\n })\n )\n expect(output).toBe(childProcessCap.expectedOptionsStdout ?? \"env\")\n }),\n layer\n ))\n\n it.live(\"declares child-process stdin behavior\", () =>\n run(\n Effect.gen(function*() {\n const spawner = yield* ChildProcessSpawner\n const stdinCap = childProcessCap.expected === \"failure\"\n ? childProcessCap\n : childProcessCap.stdin ?? { command: defaultStdinCommand, expectedStdout: \"stdin\" }\n if (\"expected\" in stdinCap) {\n yield* assertFailure(spawner.string(defaultStdinCommand), stdinCap.code)\n return\n }\n expect(yield* spawner.string(stdinCap.command)).toBe(stdinCap.expectedStdout)\n }),\n layer\n ))\n\n it.live(\"declares child-process pipeline behavior\", () =>\n run(\n Effect.gen(function*() {\n const spawner = yield* ChildProcessSpawner\n const pipelineCap = childProcessCap.expected === \"failure\"\n ? childProcessCap\n : childProcessCap.pipeline ?? {\n command: defaultPipelineCommand,\n expectedStdout: \"host-contract-pipeline\"\n }\n if (\"expected\" in pipelineCap) {\n yield* assertFailure(spawner.string(defaultPipelineCommand), pipelineCap.code)\n return\n }\n expect(yield* spawner.string(pipelineCap.command)).toBe(pipelineCap.expectedStdout)\n }),\n layer\n ))\n\n it.live(\"declares child-process interruption behavior\", () =>\n run(\n childProcessCap.expected === \"failure\"\n ? unsupportedChildProcess(\"stream\", childProcessCap.code)\n : Effect.gen(function*() {\n const spawner = yield* ChildProcessSpawner\n const ready = yield* Deferred.make<ChildProcessHandle>()\n const fiber = yield* Effect.scoped(\n Effect.gen(function*() {\n const handle = yield* spawner.spawn(\n childProcessCap.interruptCommand ?? defaultInterruptCommand\n )\n yield* Deferred.succeed(ready, handle)\n yield* handle.exitCode\n })\n ).pipe(\n Effect.forkChild({ startImmediately: true })\n )\n const handle = yield* Deferred.await(ready)\n expect(yield* handle.isRunning).toBe(true)\n yield* Fiber.interrupt(fiber)\n expect(yield* handle.isRunning).toBe(false)\n }),\n layer\n ))\n\n it.live(\"declares every Jj operation\", () =>\n run(\n jjCap.expected === \"failure\"\n ? Effect.gen(function*() {\n const jj = yield* JjService.Jj\n const root = jj.root\n const revert = jj.revert\n expect(root).toBeTypeOf(\"function\")\n expect(revert).toBeTypeOf(\"function\")\n yield* Effect.forEach([\n jj.snapshot(\"host contract\"),\n jj.restore(\"host-contract-change\"),\n jj.diff(\"host-contract-from\", \"host-contract-to\"),\n jj.workspaceAdd(\"host-contract\", \"/host-contract/workspace\", \"host-contract-change\"),\n jj.workspaceForget(\"host-contract\"),\n jj.status(),\n root!(\"/host-contract\"),\n revert!(\"host-contract-change\")\n ], (probe) =>\n assertFailure(probe, jjCap.code), { discard: true })\n })\n : Effect.gen(function*() {\n const jj = yield* JjService.Jj\n const root = jj.root\n const revert = jj.revert\n expect(root).toBeTypeOf(\"function\")\n expect(revert).toBeTypeOf(\"function\")\n yield* (jjCap.prepareChange?.(\"first\") ?? Effect.void)\n const first = yield* jj.snapshot(\"host contract first\")\n expect(first.changeId.length).toBeGreaterThan(0)\n yield* (jjCap.prepareChange?.(\"second\") ?? Effect.void)\n const second = yield* jj.snapshot(\"host contract second\")\n expect(second.changeId.length).toBeGreaterThan(0)\n expect(typeof (yield* jj.diff(first.changeId, second.changeId))).toBe(\"string\")\n const revertCode = jjCap.unsupported?.revert\n if (revertCode === undefined) {\n const reverted = yield* revert!(second.changeId)\n expect(Array.isArray(reverted.reverted)).toBe(true)\n expect(reverted.reverted.every((path) =>\n typeof path === \"string\"\n )).toBe(true)\n } else {\n yield* assertFailure(revert!(second.changeId), revertCode)\n }\n yield* jj.restore(first.changeId)\n const workspaceName = `host-contract-${process.pid}-${++scratchSeq}`\n yield* jj.workspaceAdd(\n workspaceName,\n jjCap.workspacePath ?? defaultScratchPath(`${name}-jj-workspace`),\n first.changeId\n )\n yield* jj.workspaceForget(workspaceName)\n expect(typeof (yield* jj.status())).toBe(\"string\")\n const rootCode = jjCap.unsupported?.root\n const rootFrom = jjCap.rootFrom ?? \".\"\n if (rootCode === undefined) {\n expect((yield* root!(rootFrom)).length).toBeGreaterThan(0)\n } else {\n yield* assertFailure(root!(rootFrom), rootCode)\n }\n }),\n layer\n ))\n\n it.live(\"declares HTTP read, write, and redirect behavior\", () =>\n run(\n httpClientCap.expected === \"failure\"\n ? Effect.gen(function*() {\n const client = yield* HttpClient\n yield* Effect.forEach([\n HttpClientRequest.get(\"http://127.0.0.1:1/host-contract/read\"),\n HttpClientRequest.post(\"http://127.0.0.1:1/host-contract/write\").pipe(\n HttpClientRequest.bodyText(\"host-contract\")\n ),\n HttpClientRequest.get(\"http://127.0.0.1:1/host-contract/redirect\")\n ], (request) =>\n assertFailure(client.execute(request), httpClientCap.code), { discard: true })\n })\n : Effect.gen(function*() {\n const client = yield* HttpClient\n for (const probe of [httpClientCap.read, httpClientCap.write, httpClientCap.redirect]) {\n const response = yield* client.execute(probe.request)\n expect(typeof response.status).toBe(\"number\")\n expect(typeof response.headers).toBe(\"object\")\n probe.assertResponse(response)\n }\n }),\n layer\n ))\n })\n}\n"]}
package/docs/api.md CHANGED
@@ -853,7 +853,7 @@ The `proc:spawn` decorator over Effect's own spawner tag.
853
853
  ### ChildProcessSpawner.ChildProcessSpawner and make
854
854
 
855
855
  ```ts
856
- export { ChildProcessSpawner, make } from "effect/unstable/process/ChildProcessSpawner"
856
+ export { ChildProcessSpawner, make } from "effect/process/ChildProcessSpawner"
857
857
  ```
858
858
 
859
859
  Effect's tag and constructor, re-exported unchanged so the kernel namespace
@@ -1262,7 +1262,7 @@ client tag. There is no Smithers transport port beneath it.
1262
1262
  ### HttpClient.HttpClient and make
1263
1263
 
1264
1264
  ```ts
1265
- export { HttpClient, make } from "effect/unstable/http/HttpClient"
1265
+ export { HttpClient, make } from "effect/http/HttpClient"
1266
1266
  ```
1267
1267
 
1268
1268
  Effect's tag and constructor, unchanged.
@@ -21,7 +21,7 @@ with a stable code instead of omitting the service:
21
21
  ```ts
22
22
  import { CommandLine } from "@smthrs/kernel"
23
23
  import { Effect, Layer, PlatformError } from "effect"
24
- import { ChildProcessSpawner, make as makeSpawner } from "effect/unstable/process/ChildProcessSpawner"
24
+ import { ChildProcessSpawner, make as makeSpawner } from "effect/process/ChildProcessSpawner"
25
25
 
26
26
  const layerSpawnerUnsupported: Layer.Layer<ChildProcessSpawner> = Layer.succeed(ChildProcessSpawner)(
27
27
  makeSpawner((command) =>
@@ -93,7 +93,7 @@ behavioral contract every host bundle must satisfy. It registers Vitest cases,
93
93
  so install the peers first:
94
94
 
95
95
  ```bash
96
- pnpm add -D @effect/vitest@4.0.0-rc.115 vitest@5.0.0
96
+ pnpm add -D @effect/vitest vitest@5.0.0
97
97
  ```
98
98
 
99
99
  Then declare, per slot, whether your bundle supports the capability and what it
@@ -102,7 +102,7 @@ answers when it does not:
102
102
  ```ts
103
103
  import { runHostContract } from "@smthrs/kernel/test/contract"
104
104
  import { Layer } from "effect"
105
- import * as ChildProcess from "effect/unstable/process/ChildProcess"
105
+ import * as ChildProcess from "effect/process/ChildProcess"
106
106
 
107
107
  runHostContract("MyHost", Layer.mergeAll(fs, path, spawner, jj, http), {
108
108
  fileSystem: {
@@ -33,8 +33,8 @@ or one you add under `packages/`, and depends on it with a workspace specifier:
33
33
  The package requires Node.js 26.4.0 or later and ships as ESM, CommonJS, and
34
34
  TypeScript declarations. Its Smithers dependencies install with it:
35
35
  [`@smthrs/capability`](/api/capability), [`@smthrs/jj`](/api/jj), and
36
- [`@smthrs/journal`](/api/journal). The host supplies the exact
37
- `effect@4.0.0-rc.115` peer so the library never installs a second runtime.
36
+ [`@smthrs/journal`](/api/journal). The host supplies the
37
+ `effect@^4.0.4` peer so the library never installs a second runtime.
38
38
 
39
39
  The root entry point carries no Node built-ins. A package test bundles the
40
40
  whole root dependency graph for the browser and asserts that no
@@ -89,7 +89,7 @@ in the consuming workspace package:
89
89
  ```
90
90
 
91
91
  `test/contract` registers Vitest cases, so importing it requires the declared
92
- peers, `@effect/vitest@4.0.0-rc.115` and `vitest@5.0.0`. Both are optional: a
92
+ peers, `@effect/vitest` at the same version as your `effect` and `vitest@5.0.0`. Both are optional: a
93
93
  consumer that imports only the kernel or `test/TestGrantStore` needs neither.
94
94
  See [Testing](./testing.md) for what each one covers.
95
95
 
@@ -23,7 +23,7 @@ request an operator resolves.
23
23
  - A test runner, for the second half:
24
24
 
25
25
  ```bash
26
- pnpm add -D @effect/vitest@4.0.0-rc.115 vitest@5.0.0
26
+ pnpm add -D @effect/vitest vitest@5.0.0
27
27
  ```
28
28
 
29
29
  ## Build the raw host
package/docs/testing.md CHANGED
@@ -84,7 +84,7 @@ multi-leg pipelines. The Node, Bun, browser, test, and deliberately
84
84
  unsupported bundles all run it.
85
85
 
86
86
  It registers Vitest cases, so it requires the declared peers
87
- (`@effect/vitest@4.0.0-rc.115` and `vitest@5.0.0`) and Node process and
87
+ (`@effect/vitest` at the version of your `effect`, and `vitest@5.0.0`) and Node process and
88
88
  temporary-directory fixtures. See
89
89
  [Adapt a new host platform](./guides/adapt-a-new-host-platform.md) for how to
90
90
  declare your bundle's capabilities to it.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@smthrs/kernel",
3
3
  "type": "module",
4
- "version": "1.0.0-rc.5",
4
+ "version": "1.0.0-rc.7",
5
5
  "license": "MIT",
6
6
  "smthrs": {
7
7
  "group": "engine"
@@ -295,14 +295,13 @@
295
295
  "tag": "next"
296
296
  },
297
297
  "dependencies": {
298
- "@smthrs/capability": "1.0.0-rc.5",
299
- "@smthrs/crypto": "1.0.0-rc.5",
300
- "@smthrs/jj": "1.0.0-rc.5",
301
- "@smthrs/journal": "1.0.0-rc.5"
298
+ "@smthrs/capability": "1.0.0-rc.7",
299
+ "@smthrs/crypto": "1.0.0-rc.7",
300
+ "@smthrs/jj": "1.0.0-rc.7",
301
+ "@smthrs/journal": "1.0.0-rc.7"
302
302
  },
303
303
  "peerDependencies": {
304
- "@effect/vitest": "4.0.0-rc.115",
305
- "effect": "4.0.0-rc.115",
304
+ "effect": "^4.0.4",
306
305
  "vitest": "5.0.0"
307
306
  },
308
307
  "peerDependenciesMeta": {
@@ -315,14 +314,14 @@
315
314
  },
316
315
  "devDependencies": {
317
316
  "@effect/language-service": "0.87.2",
318
- "@effect/platform-node": "4.0.0-rc.115",
319
- "@effect/vitest": "4.0.0-rc.115",
317
+ "@effect/platform-node": "4.0.4",
318
+ "@effect/vitest": "4.0.4",
320
319
  "@eslint/js": "9.39.5",
321
- "@smthrs/database": "1.0.0-rc.5",
320
+ "@smthrs/database": "1.0.0-rc.7",
322
321
  "@types/node": "26.4.1",
323
322
  "@vitest/coverage-v8": "5.0.0",
324
323
  "dprint": "0.57.1",
325
- "effect": "4.0.0-rc.115",
324
+ "effect": "4.0.4",
326
325
  "esbuild": "0.28.2",
327
326
  "eslint": "9.39.5",
328
327
  "eslint-import-resolver-typescript": "4.4.5",
@@ -2,7 +2,7 @@
2
2
  * Permission-aware process spawning.
3
3
  *
4
4
  * Smithers has no shell service of its own — process execution is Effect's
5
- * `effect/unstable/process`. The only thing the kernel adds is the
5
+ * `effect/process`. The only thing the kernel adds is the
6
6
  * `proc:spawn` capability check and the host confinement wrapper, applied to
7
7
  * the one primitive every other helper is derived from.
8
8
  *
@@ -25,8 +25,8 @@
25
25
  import { toPlatformError } from "@smthrs/capability/Permission"
26
26
  import { Effect, FileSystem, Layer, Option, Path, type Scope } from "effect"
27
27
  import { type PlatformError, systemError } from "effect/PlatformError"
28
- import * as ChildProcess from "effect/unstable/process/ChildProcess"
29
- import { ChildProcessSpawner, make as makeSpawner } from "effect/unstable/process/ChildProcessSpawner"
28
+ import * as ChildProcess from "effect/process/ChildProcess"
29
+ import { ChildProcessSpawner, make as makeSpawner } from "effect/process/ChildProcessSpawner"
30
30
  import * as CommandLine from "./CommandLine.ts"
31
31
  import { GrantStore } from "./GrantStore.ts"
32
32
  import * as Containment from "./internal/Containment.ts"
@@ -200,7 +200,7 @@ const environmentNames = (command: ChildProcess.StandardCommand): ReadonlyArray<
200
200
  * @category services
201
201
  * @since 1.0.0-rc.0
202
202
  */
203
- export { ChildProcessSpawner } from "effect/unstable/process/ChildProcessSpawner"
203
+ export { ChildProcessSpawner } from "effect/process/ChildProcessSpawner"
204
204
 
205
205
  /**
206
206
  * Derives the full six-method surface from one `spawn`, so `exitCode`,
@@ -210,7 +210,7 @@ export { ChildProcessSpawner } from "effect/unstable/process/ChildProcessSpawner
210
210
  * @category constructors
211
211
  * @since 1.0.0-rc.0
212
212
  */
213
- export { make } from "effect/unstable/process/ChildProcessSpawner"
213
+ export { make } from "effect/process/ChildProcessSpawner"
214
214
 
215
215
  /**
216
216
  * Constructs an unavailable spawner stub.
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @since 1.0.0-rc.0
3
3
  *
4
- * Rendering an `effect/unstable/process` `Command` back to a shell command
4
+ * Rendering an `effect/process` `Command` back to a shell command
5
5
  * line.
6
6
  *
7
7
  * Two callers need the same string and must agree on it exactly:
@@ -19,7 +19,7 @@
19
19
  * browser-safe side of the package.
20
20
  */
21
21
 
22
- import type * as ChildProcess from "effect/unstable/process/ChildProcess"
22
+ import type * as ChildProcess from "effect/process/ChildProcess"
23
23
  import { isInheritedName } from "./ChildProcessEnvironment.ts"
24
24
 
25
25
  /** Tokens made only of these characters need no quoting in a POSIX shell. */
@@ -28,14 +28,10 @@ import * as Effect from "effect/Effect"
28
28
  import * as Exit from "effect/Exit"
29
29
  import * as Layer from "effect/Layer"
30
30
  import * as PlatformError from "effect/PlatformError"
31
+ import * as ChildProcess from "effect/process/ChildProcess"
32
+ import { type ChildProcessHandle, ChildProcessSpawner, make as makeSpawner } from "effect/process/ChildProcessSpawner"
31
33
  import * as Schedule from "effect/Schedule"
32
34
  import * as Scope from "effect/Scope"
33
- import * as ChildProcess from "effect/unstable/process/ChildProcess"
34
- import {
35
- type ChildProcessHandle,
36
- ChildProcessSpawner,
37
- make as makeSpawner
38
- } from "effect/unstable/process/ChildProcessSpawner"
39
35
  import * as CommandLine from "./CommandLine.ts"
40
36
  import * as Containment from "./internal/Containment.ts"
41
37
  import * as Pipeline from "./internal/Pipeline.ts"
package/src/FileSystem.ts CHANGED
@@ -20,7 +20,6 @@
20
20
  import { permissionDenied, type PermissionError, toPlatformError } from "@smthrs/capability/Permission"
21
21
  import {
22
22
  Effect,
23
- Encoding,
24
23
  FileSystem as EffectFileSystem,
25
24
  Layer,
26
25
  Option,
@@ -31,6 +30,7 @@ import {
31
30
  Sink,
32
31
  Stream
33
32
  } from "effect"
33
+ import { Base64 } from "effect/encoding"
34
34
  import * as Batch from "./FileSystemBatch.ts"
35
35
  import { GrantStore } from "./GrantStore.ts"
36
36
  import { makeCapability } from "./internal/makeCapability.ts"
@@ -387,7 +387,7 @@ export const withIsolatedFileSystem = (
387
387
  rename: (request) => fileSystem.rename(request.from, request.to),
388
388
  stat: (request) => fileSystem.stat(request.path),
389
389
  writeFile: (request) =>
390
- Encoding.decodeBase64(request.data).pipe(
390
+ Base64.decode(request.data).pipe(
391
391
  Effect.fromResult,
392
392
  Effect.orDie,
393
393
  Effect.flatMap((data) => fileSystem.writeFile(request.path, data, request.options))
@@ -622,7 +622,7 @@ export const confined = (
622
622
  return run({
623
623
  operation: "writeFile",
624
624
  path: normalize(value),
625
- data: Encoding.encodeBase64(data),
625
+ data: Base64.encode(data),
626
626
  options
627
627
  })
628
628
  }
@@ -1462,7 +1462,7 @@ export const layer: Layer.Layer<
1462
1462
  return atomicOne("fs:write", value, "writeFile", {
1463
1463
  operation: "writeFile",
1464
1464
  path: normalize(value),
1465
- data: Encoding.encodeBase64(bytes),
1465
+ data: Base64.encode(bytes),
1466
1466
  options: captured
1467
1467
  })
1468
1468
  })
@@ -17,8 +17,8 @@
17
17
 
18
18
  import { Jj as JjPort } from "@smthrs/jj"
19
19
  import { FileSystem as EffectFileSystem, Layer, Path as EffectPath } from "effect"
20
- import { HttpClient as HttpClientPort } from "effect/unstable/http/HttpClient"
21
- import { ChildProcessSpawner as ChildProcessSpawnerPort } from "effect/unstable/process/ChildProcessSpawner"
20
+ import { HttpClient as HttpClientPort } from "effect/http/HttpClient"
21
+ import { ChildProcessSpawner as ChildProcessSpawnerPort } from "effect/process/ChildProcessSpawner"
22
22
  import * as ChildProcessSpawner from "./ChildProcessSpawner.ts"
23
23
  import * as FileSystem from "./FileSystem.ts"
24
24
  import * as HttpClient from "./HttpClient.ts"
@@ -60,7 +60,7 @@ import * as Path from "./Path.ts"
60
60
  * swappable via `Effect.provideService`, and never decorated here — a `Clock`
61
61
  * or a `Random` carries no host authority to guard, so they are not ours to
62
62
  * define. `ChildProcessSpawner` is the same story one layer out: process spawning is
63
- * `effect/unstable/process`, and the slot holds Effect's tag rather than a
63
+ * `effect/process`, and the slot holds Effect's tag rather than a
64
64
  * Smithers wrapper around it.
65
65
  *
66
66
  * @category models
package/src/HttpClient.ts CHANGED
@@ -44,13 +44,13 @@ import {
44
44
  type PermissionErrorPayload
45
45
  } from "@smthrs/capability/Permission"
46
46
  import { Context, Effect, Layer, Option } from "effect"
47
- import * as FetchHttpClient from "effect/unstable/http/FetchHttpClient"
48
- import * as Headers from "effect/unstable/http/Headers"
49
- import * as HttpBody from "effect/unstable/http/HttpBody"
50
- import * as EffectHttpClient from "effect/unstable/http/HttpClient"
51
- import * as HttpClientError from "effect/unstable/http/HttpClientError"
52
- import * as HttpClientRequest from "effect/unstable/http/HttpClientRequest"
53
- import * as UrlParams from "effect/unstable/http/UrlParams"
47
+ import * as FetchHttpClient from "effect/http/FetchHttpClient"
48
+ import * as Headers from "effect/http/Headers"
49
+ import * as HttpBody from "effect/http/HttpBody"
50
+ import * as EffectHttpClient from "effect/http/HttpClient"
51
+ import * as HttpClientError from "effect/http/HttpClientError"
52
+ import * as HttpClientRequest from "effect/http/HttpClientRequest"
53
+ import * as UrlParams from "effect/http/UrlParams"
54
54
  import { GrantStore, type Service as GrantService } from "./GrantStore.ts"
55
55
  import { makeCapability } from "./internal/makeCapability.ts"
56
56
 
@@ -115,7 +115,7 @@ const invalidRequest = (request: HttpClientRequest.HttpClientRequest): HttpClien
115
115
  * @category services
116
116
  * @since 1.0.0-rc.0
117
117
  */
118
- export { HttpClient } from "effect/unstable/http/HttpClient"
118
+ export { HttpClient } from "effect/http/HttpClient"
119
119
 
120
120
  /**
121
121
  * Constructs a client from a low-level request runner, keeping Effect's own
@@ -124,7 +124,7 @@ export { HttpClient } from "effect/unstable/http/HttpClient"
124
124
  * @category constructors
125
125
  * @since 1.0.0-rc.0
126
126
  */
127
- export { make } from "effect/unstable/http/HttpClient"
127
+ export { make } from "effect/http/HttpClient"
128
128
 
129
129
  /**
130
130
  * The model identity an outgoing request is made on behalf of, if any.
@@ -14,7 +14,7 @@ import {
14
14
  import type { GrantStoreError } from "@smthrs/capability/Permission"
15
15
  import { Context, Effect, Layer, type Path, type Scope } from "effect"
16
16
  import type { PlatformError } from "effect/PlatformError"
17
- import type * as ChildProcess from "effect/unstable/process/ChildProcess"
17
+ import type * as ChildProcess from "effect/process/ChildProcess"
18
18
  import type { Policy, PolicyRule, Service as GrantService } from "./GrantStore.ts"
19
19
 
20
20
  /** Workspace-relative trees; `.` names the workspace. No path opens its parent.
package/src/Rooted.ts CHANGED
@@ -11,8 +11,8 @@
11
11
  */
12
12
 
13
13
  import { Context, Effect, FileSystem, Layer, Path } from "effect"
14
- import * as ChildProcess from "effect/unstable/process/ChildProcess"
15
- import * as ChildProcessSpawner from "effect/unstable/process/ChildProcessSpawner"
14
+ import * as ChildProcess from "effect/process/ChildProcess"
15
+ import * as ChildProcessSpawner from "effect/process/ChildProcessSpawner"
16
16
  import * as Containment from "./internal/Containment.ts"
17
17
 
18
18
  /**
@@ -3,7 +3,7 @@
3
3
  * @since 1.0.0
4
4
  */
5
5
 
6
- import type { ChildProcessSpawner } from "effect/unstable/process/ChildProcessSpawner"
6
+ import type { ChildProcessSpawner } from "effect/process/ChildProcessSpawner"
7
7
 
8
8
  // The registry key also works when a service crosses the ESM/CJS projections.
9
9
  // This declares a trusted lifecycle contract; it cannot prove a supplied
@@ -6,10 +6,10 @@
6
6
  import * as Effect from "effect/Effect"
7
7
  import * as Exit from "effect/Exit"
8
8
  import type * as PlatformError from "effect/PlatformError"
9
+ import * as ChildProcess from "effect/process/ChildProcess"
10
+ import { type ChildProcessHandle, makeHandle } from "effect/process/ChildProcessSpawner"
9
11
  import type * as Scope from "effect/Scope"
10
12
  import * as Stream from "effect/Stream"
11
- import * as ChildProcess from "effect/unstable/process/ChildProcess"
12
- import { type ChildProcessHandle, makeHandle } from "effect/unstable/process/ChildProcessSpawner"
13
13
 
14
14
  type Spawn = (
15
15
  command: ChildProcess.StandardCommand