Upgrade scriptc to 0.0.28 (#336)

* Upgrade scriptc to 0.0.28

- Pin scriptc and its compiler/runtime lock data to 0.0.28.
- Refresh service contracts, compatibility fixtures, calibration, and documentation.
- Regenerate the service compile-surface reference; the 0.0.28 surface manifest carries no entry changes from 0.0.27.

* docs: state the carrier default correctly on the packages page
This commit is contained in:
Chris Tate
2026-08-12 19:56:19 -05:00
committed by GitHub
parent d7aeea1ea9
commit c71a7b4638
15 changed files with 57 additions and 57 deletions
+1 -1
View File
@@ -590,7 +590,7 @@ fn tsCoreStage(
// Ordinary service TypeScript is staged without core-subset rewrites.
// The one service-boundary lowering turns NS1067's `{ kind, message }`
// throw into the tagged Error shape scriptc 0.0.27 can catch from an
// throw into the tagged Error shape scriptc 0.0.28 can catch from an
// imported op; no deterministic profile fences participate here.
const service_stage_run = b.addSystemCommand(&.{node});
service_stage_run.addFileArg(dep.path("packages/core/scripts/stage_external_services.mjs"));
@@ -47,7 +47,7 @@ The question behind "can I use npm?" is almost always one of these five:
Put ordinary static-tier TypeScript under `src/services/` when the work needs Node built-ins, regexes, JSON, `Map`/`Set`, `Date`, classes, or ambient process authority. Each directly exported, non-default named synchronous function becomes an operation named `<module-basename>.<export>`. Its request and result may be shared, contract-encodable records; the core calls the generated constructor from `@native-sdk/services`, so success and failure still arrive as Msgs and record/replay remains offline.
This is compiled native code with no JavaScript engine. `native vendor . package@X.Y.Z` resolves an exact package graph once, with lifecycle scripts disabled, into checked-in `src/services/vendor/` sources and hash facts in app.zon. Builds are offline: every byte is verified and scriptc receives only the explicit `--npm-static` package list—never automatic or dynamic fallback. `native check` preserves scriptc's coverage note and refuses anything below 100% static coverage. A five-package scriptc 0.0.27 calibration passed three small source-shipping utilities and refused two (`nanoid` and `micromark`), so package support is intentionally selective. The host is a lazily spawned sibling executable on desktop today; [TypeScript Services](/docs/typescript/services) covers typed calls, streaming, cancellation, authority, crash recovery, and the current desktop scope.
This is compiled native code with no JavaScript engine. `native vendor . package@X.Y.Z` resolves an exact package graph once, with lifecycle scripts disabled, into checked-in `src/services/vendor/` sources and hash facts in app.zon. Builds are offline: every byte is verified and scriptc receives only the explicit `--npm-static` package list—never automatic or dynamic fallback. `native check` preserves scriptc's coverage note and refuses anything below 100% static coverage. A five-package scriptc 0.0.28 calibration passed three small source-shipping utilities and refused two (`nanoid` and `micromark`), so package support is intentionally selective. Services run on a supervised carrier — a separate child process by default, or an explicitly selected in-process worker-thread pool; [TypeScript Services](/docs/typescript/services) covers typed calls, streaming, cancellation, authority, crash recovery, and the current desktop scope.
## Calling APIs, AI endpoints included
+9 -9
View File
@@ -8,25 +8,25 @@
"name": "@native-sdk/core",
"version": "0.8.4",
"dependencies": {
"scriptc": "0.0.27"
"scriptc": "0.0.28"
},
"devDependencies": {
"@typescript/old": "npm:typescript@6.0.3"
}
},
"node_modules/@scriptc/compiler": {
"version": "0.0.27",
"integrity": "sha512-0CQNSfPnr6UD0ssC3QsaNhli/8yRgAheivlbcr9aqvc4bNDDHX40G33dD12urNXa9bQ36nts7ul1Nl57AGDLMQ==",
"version": "0.0.28",
"integrity": "sha512-zq41x81F209cPrW4T+qMGlcIu8joveB2S26vYePIktbmpCVe+ZwdLnDvAY6aTuktoqTVjXXcsR3ebxGyuGh7rQ==",
"license": "Apache-2.0",
"dependencies": {
"@scriptc/runtime": "0.0.27",
"@scriptc/runtime": "0.0.28",
"typescript": "7.0.2",
"typescript5": "npm:typescript@5.9.3"
}
},
"node_modules/@scriptc/runtime": {
"version": "0.0.27",
"integrity": "sha512-zInpRHTC4+Y8jhAmLWDlC1v4pe0UPjkWE3r1cgvloKdlJwIDrVnT24BBuK1ElT+aVJWF6JFm0SxDrnvOMyxizA==",
"version": "0.0.28",
"integrity": "sha512-x7wO/i75fW4sJ8wY16Tr8ImX1SBROy3BIDZK2H4fafAC0rBI1LsYnxJogHqdeahkxUPDkWwuXZPoPC1vxAljGg==",
"license": "Apache-2.0"
},
"node_modules/@typescript/old": {
@@ -344,11 +344,11 @@
}
},
"node_modules/scriptc": {
"version": "0.0.27",
"integrity": "sha512-tr4pTBP05kuvqF95+IQ9hvh3mpux+8y1OaiPXWAKKi/sayAUWC1JULwaDM11pkapEuunMWRG0ZMyRkij8l6sOA==",
"version": "0.0.28",
"integrity": "sha512-adYCjzHtD7XJyJg3g+gtkrTvONRqiRHsp8ZjkH2ot4FNCHPeix6ebqi88pyP9ZFHMh2bNZe2z3M3/2yHZFwOTg==",
"license": "Apache-2.0",
"dependencies": {
"@scriptc/compiler": "0.0.27"
"@scriptc/compiler": "0.0.28"
},
"bin": {
"scriptc": "dist/main.js"
+1 -1
View File
@@ -36,6 +36,6 @@
"@typescript/old": "npm:typescript@6.0.3"
},
"dependencies": {
"scriptc": "0.0.27"
"scriptc": "0.0.28"
}
}
+13 -13
View File
@@ -9,8 +9,8 @@ importers:
.:
dependencies:
scriptc:
specifier: 0.0.27
version: 0.0.27
specifier: 0.0.28
version: 0.0.28
devDependencies:
'@typescript/old':
specifier: npm:typescript@6.0.3
@@ -18,11 +18,11 @@ importers:
packages:
'@scriptc/compiler@0.0.27':
resolution: {integrity: sha512-0CQNSfPnr6UD0ssC3QsaNhli/8yRgAheivlbcr9aqvc4bNDDHX40G33dD12urNXa9bQ36nts7ul1Nl57AGDLMQ==}
'@scriptc/compiler@0.0.28':
resolution: {integrity: sha512-zq41x81F209cPrW4T+qMGlcIu8joveB2S26vYePIktbmpCVe+ZwdLnDvAY6aTuktoqTVjXXcsR3ebxGyuGh7rQ==}
'@scriptc/runtime@0.0.27':
resolution: {integrity: sha512-zInpRHTC4+Y8jhAmLWDlC1v4pe0UPjkWE3r1cgvloKdlJwIDrVnT24BBuK1ElT+aVJWF6JFm0SxDrnvOMyxizA==}
'@scriptc/runtime@0.0.28':
resolution: {integrity: sha512-x7wO/i75fW4sJ8wY16Tr8ImX1SBROy3BIDZK2H4fafAC0rBI1LsYnxJogHqdeahkxUPDkWwuXZPoPC1vxAljGg==}
'@typescript/typescript-aix-ppc64@7.0.2':
resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==}
@@ -144,8 +144,8 @@ packages:
cpu: [x64]
os: [win32]
scriptc@0.0.27:
resolution: {integrity: sha512-tr4pTBP05kuvqF95+IQ9hvh3mpux+8y1OaiPXWAKKi/sayAUWC1JULwaDM11pkapEuunMWRG0ZMyRkij8l6sOA==}
scriptc@0.0.28:
resolution: {integrity: sha512-adYCjzHtD7XJyJg3g+gtkrTvONRqiRHsp8ZjkH2ot4FNCHPeix6ebqi88pyP9ZFHMh2bNZe2z3M3/2yHZFwOTg==}
engines: {node: '>=20'}
hasBin: true
@@ -166,13 +166,13 @@ packages:
snapshots:
'@scriptc/compiler@0.0.27':
'@scriptc/compiler@0.0.28':
dependencies:
'@scriptc/runtime': 0.0.27
'@scriptc/runtime': 0.0.28
typescript: 7.0.2
typescript5: typescript@5.9.3
'@scriptc/runtime@0.0.27': {}
'@scriptc/runtime@0.0.28': {}
'@typescript/typescript-aix-ppc64@7.0.2':
optional: true
@@ -234,9 +234,9 @@ snapshots:
'@typescript/typescript-win32-x64@7.0.2':
optional: true
scriptc@0.0.27:
scriptc@0.0.28:
dependencies:
'@scriptc/compiler': 0.0.27
'@scriptc/compiler': 0.0.28
typescript@5.9.3: {}
@@ -1,7 +1,7 @@
#!/usr/bin/env node
// Stage the typed service executable: ordinary service TypeScript plus
// corewire's generated service_host_main.ts. One narrow mechanical lowering
// is required by scriptc 0.0.27: an escaping `throw { kind, message }` becomes
// is required by scriptc 0.0.28: an escaping `throw { kind, message }` becomes
// an Error subclass carrying kind in `.name`, the object form its reachable
// static catch tier cannot inspect yet. NS1067 rejects locally caught tagged
// records; shared core-class modules receive the same transform in this
@@ -53,7 +53,7 @@ test("an npm package outside the static tier fails check with the compiler note
name: "dynamic-only", version: "1.0.0", type: "module", types: "index.d.ts", exports: "./index.js",
}));
fs.writeFileSync(path.join(vendor, "index.d.ts"), "export default function probe(value: string): string;\n");
// randomFillSync is typed but has no static lowering in scriptc 0.0.27.
// randomFillSync is typed but has no static lowering in scriptc 0.0.28.
// The package itself remains marked "static" in coverage, so this pins
// Native SDK's stricter requirement that the total be 100%.
fs.writeFileSync(path.join(vendor, "index.js"), [
+11 -11
View File
@@ -44,7 +44,7 @@ export function parse(payload: Uint8Array): Uint8Array {
const contract = JSON.parse(result.servicesContract!);
assert.equal(contract.format, 3);
assert.equal(contract.protocol_version, 3);
assert.equal(contract.compiler_version, "0.0.27");
assert.equal(contract.compiler_version, "0.0.28");
assert.equal(contract.deterministic, false);
assert.deepEqual(contract.packages, []);
assert.deepEqual(contract.types, { records: [], enums: [], unions: [] });
@@ -596,7 +596,7 @@ test("the service compile lane refuses a contract whose compiler echo skews from
try {
const stage = path.join(root, "stage");
fs.mkdirSync(stage);
fs.writeFileSync(path.join(root, "package.json"), JSON.stringify({ dependencies: { scriptc: "0.0.27" } }));
fs.writeFileSync(path.join(root, "package.json"), JSON.stringify({ dependencies: { scriptc: "0.0.28" } }));
fs.writeFileSync(path.join(root, "services.contract.json"), JSON.stringify({ compiler_version: "0.0.21" }));
const script = path.join(path.dirname(fileURLToPath(import.meta.url)), "..", "scripts", "run_external_service_compiler.mjs");
const result = spawnSync(process.execPath, [
@@ -610,7 +610,7 @@ test("the service compile lane refuses a contract whose compiler echo skews from
"--compiler", process.execPath,
], { encoding: "utf8" });
assert.notEqual(result.status, 0);
assert.match(result.stderr, /contract echoes scriptc 0\.0\.21, but packages\/core pins 0\.0\.27/);
assert.match(result.stderr, /contract echoes scriptc 0\.0\.21, but packages\/core pins 0\.0\.28/);
} finally {
fs.rmSync(root, { recursive: true, force: true });
}
@@ -621,8 +621,8 @@ test("the service compile lane refuses a target that differs from the build host
try {
const stage = path.join(root, "stage");
fs.mkdirSync(stage);
fs.writeFileSync(path.join(root, "package.json"), JSON.stringify({ dependencies: { scriptc: "0.0.27" } }));
fs.writeFileSync(path.join(root, "services.contract.json"), JSON.stringify({ compiler_version: "0.0.27" }));
fs.writeFileSync(path.join(root, "package.json"), JSON.stringify({ dependencies: { scriptc: "0.0.28" } }));
fs.writeFileSync(path.join(root, "services.contract.json"), JSON.stringify({ compiler_version: "0.0.28" }));
const script = path.join(path.dirname(fileURLToPath(import.meta.url)), "..", "scripts", "run_external_service_compiler.mjs");
const result = spawnSync(process.execPath, [
script,
@@ -647,14 +647,14 @@ test("the service compile lane passes an explicit npm-static allowlist and prese
try {
const stage = path.join(root, "stage");
fs.mkdirSync(stage);
fs.writeFileSync(path.join(root, "package.json"), JSON.stringify({ dependencies: { scriptc: "0.0.27" } }));
fs.writeFileSync(path.join(root, "package.json"), JSON.stringify({ dependencies: { scriptc: "0.0.28" } }));
fs.writeFileSync(path.join(root, "services.contract.json"), JSON.stringify({
compiler_version: "0.0.27",
compiler_version: "0.0.28",
packages: [{ name: "dynamic-only", version: "1.0.0", content_hash: "a".repeat(64) }],
}));
const compiler = path.join(root, "compiler.mjs");
fs.writeFileSync(compiler, `
if (process.argv.includes("-v")) { console.log("0.0.27"); process.exit(0); }
if (process.argv.includes("-v")) { console.log("0.0.28"); process.exit(0); }
const at = process.argv.indexOf("--npm-static");
if (at < 0 || process.argv[at + 1] !== "dynamic-only" || process.argv.includes("auto") || process.argv.includes("--dynamic")) {
console.error("wrong npm policy: " + process.argv.slice(2).join(" ")); process.exit(9);
@@ -687,15 +687,15 @@ test("the service compile lane refuses a package whose successful coverage verdi
try {
const stage = path.join(root, "stage");
fs.mkdirSync(stage);
fs.writeFileSync(path.join(root, "package.json"), JSON.stringify({ dependencies: { scriptc: "0.0.27" } }));
fs.writeFileSync(path.join(root, "package.json"), JSON.stringify({ dependencies: { scriptc: "0.0.28" } }));
fs.writeFileSync(path.join(root, "services.contract.json"), JSON.stringify({
compiler_version: "0.0.27",
compiler_version: "0.0.28",
packages: [{ name: "partial-static", version: "1.0.0", content_hash: "b".repeat(64) }],
}));
const compiler = path.join(root, "compiler.mjs");
fs.writeFileSync(compiler, `
import fs from "node:fs";
if (process.argv.includes("-v")) { console.log("0.0.27"); process.exit(0); }
if (process.argv.includes("-v")) { console.log("0.0.28"); process.exit(0); }
if (process.argv[2] === "coverage") {
console.log("scriptc coverage service_host_main.ts\\n\\n statements analyzed 10\\n compile statically 8 (80%)\\n\\n deferred to runtime 2 sites\\n ×2 unsupported package calls SC2020");
process.exit(0);
+9 -9
View File
@@ -41,10 +41,10 @@ function generatorFixture(entries: unknown[]) {
fs.mkdirSync(scriptDir, { recursive: true });
fs.mkdirSync(manifestDir, { recursive: true });
fs.copyFileSync(genScript, path.join(scriptDir, "gen_service_surface.mjs"));
fs.writeFileSync(path.join(core, "package.json"), JSON.stringify({ dependencies: { scriptc: "0.0.27" } }));
fs.writeFileSync(path.join(core, "package.json"), JSON.stringify({ dependencies: { scriptc: "0.0.28" } }));
fs.writeFileSync(path.join(manifestDir, "surface-manifest.json"), JSON.stringify({
schemaVersion: 1,
compilerVersion: "0.0.27",
compilerVersion: "0.0.28",
coverage: [],
entries,
}));
@@ -140,11 +140,11 @@ test("surface_manifest_diff refuses unknown schema versions", () => {
});
test("surface_manifest_diff refuses a stale install for the pinned spec", () => {
const script = diffToolFixture("0.0.27", "0.0.25");
const script = diffToolFixture("0.0.28", "0.0.25");
const run = spawnSync(process.execPath, [script, "pinned", "pinned"], { encoding: "utf8" });
assert.equal(run.status, 2);
assert.match(run.stderr, /installed compiler manifest is 0\.0\.25/);
assert.match(run.stderr, /package\.json pins scriptc 0\.0\.27/);
assert.match(run.stderr, /package\.json pins scriptc 0\.0\.28/);
});
test("identical manifests diff to no differences", () => {
@@ -267,7 +267,7 @@ test("the claim scan covers Markdown formatting and docs while ignoring unrelate
const unrelated = spawnSync(process.execPath, [fixture.script, "--check"], { encoding: "utf8" });
assert.equal(unrelated.status, 0, unrelated.stderr);
fs.writeFileSync(skill, "The pinned scriptc compiler\nversion `0.0.27` was used for this calibration.\n");
fs.writeFileSync(skill, "The pinned scriptc compiler\nversion `0.0.28` was used for this calibration.\n");
const current = spawnSync(process.execPath, [fixture.script, "--check"], { encoding: "utf8" });
assert.equal(current.status, 0, current.stderr);
@@ -275,19 +275,19 @@ test("the claim scan covers Markdown formatting and docs while ignoring unrelate
const stale = spawnSync(process.execPath, [fixture.script, "--check"], { encoding: "utf8" });
assert.equal(stale.status, 1);
assert.match(stale.stderr, /skills\/example\/SKILL\.md:2:/);
assert.match(stale.stderr, /compiler version 0\.0\.25 but the pin is 0\.0\.27/);
assert.match(stale.stderr, /compiler version 0\.0\.25 but the pin is 0\.0\.28/);
fs.writeFileSync(skill, "Compiler support was measured with scriptc version: `0.0.24`.\n");
const punctuated = spawnSync(process.execPath, [fixture.script, "--check"], { encoding: "utf8" });
assert.equal(punctuated.status, 1);
assert.match(punctuated.stderr, /skills\/example\/SKILL\.md:1:/);
assert.match(punctuated.stderr, /compiler version 0\.0\.24 but the pin is 0\.0\.27/);
assert.match(punctuated.stderr, /compiler version 0\.0\.24 but the pin is 0\.0\.28/);
fs.writeFileSync(skill, "The scriptc compiler pin is 0.0.23.\n");
const pinClaim = spawnSync(process.execPath, [fixture.script, "--check"], { encoding: "utf8" });
assert.equal(pinClaim.status, 1);
assert.match(pinClaim.stderr, /skills\/example\/SKILL\.md:1:/);
assert.match(pinClaim.stderr, /compiler version 0\.0\.23 but the pin is 0\.0\.27/);
assert.match(pinClaim.stderr, /compiler version 0\.0\.23 but the pin is 0\.0\.28/);
fs.writeFileSync(skill, "The Zig compiler version is 0.16.0.\n");
const otherCompiler = spawnSync(process.execPath, [fixture.script, "--check"], { encoding: "utf8" });
@@ -300,7 +300,7 @@ test("the claim scan covers Markdown formatting and docs while ignoring unrelate
fs.writeFileSync(skill, "The scriptc 0.0.22 calibration established this service surface.\n");
const scriptcCalibration = spawnSync(process.execPath, [fixture.script, "--check"], { encoding: "utf8" });
assert.equal(scriptcCalibration.status, 1);
assert.match(scriptcCalibration.stderr, /compiler version 0\.0\.22 but the pin is 0\.0\.27/);
assert.match(scriptcCalibration.stderr, /compiler version 0\.0\.22 but the pin is 0\.0\.28/);
for (const formattedVersion of ["**0.0.22**", "_0.0.21_", "```0.0.20```"]) {
fs.writeFileSync(skill, `The scriptc version is ${formattedVersion}.\n`);
+1 -1
View File
@@ -32,7 +32,7 @@
],
"dependencies": {
"@typescript/old": "npm:typescript@6.0.3",
"scriptc": "0.0.27"
"scriptc": "0.0.28"
},
"optionalDependencies": {
"@native-sdk/cli-darwin-arm64": "0.8.4",
+1 -1
View File
@@ -79,7 +79,7 @@ native vendor . escape-string-regexp@5.0.0
The command installs with lifecycle scripts disabled in a temporary directory, copies the flattened package graph into `src/services/vendor/`, retains package/license files, computes canonical tree hashes, and rewrites app.zon's `service_packages` with exact names, `X.Y.Z` versions, and hashes. Check those bytes and manifest facts into source control.
Builds never run npm or use the network. They verify package identity and every vendored byte, stage only declared packages, and invoke scriptc with `--npm-static <explicit-list>`. `auto`, dynamic-island fallback, and `--dynamic` are refused. Anything below 100% static coverage fails: `native check` preserves the coverage note verbatim and names the three options—choose another exact package, port/vendor a suitable implementation, or wait for compiler support. The checked-in scriptc 0.0.27 spike (`tests/ts-services/npm-static-spike.json`) passed three of five deliberately small candidates and refused `nanoid` and `micromark`; npm support is selective.
Builds never run npm or use the network. They verify package identity and every vendored byte, stage only declared packages, and invoke scriptc with `--npm-static <explicit-list>`. `auto`, dynamic-island fallback, and `--dynamic` are refused. Anything below 100% static coverage fails: `native check` preserves the coverage note verbatim and names the three options—choose another exact package, port/vendor a suitable implementation, or wait for compiler support. The checked-in scriptc 0.0.28 spike (`tests/ts-services/npm-static-spike.json`) passed three of five deliberately small candidates and refused `nanoid` and `micromark`; npm support is selective.
## Streaming, cancellation, and deadlines
@@ -6,7 +6,7 @@
Verify without writing:
node packages/core/scripts/gen_service_surface.mjs --check -->
# Service compile surface — scriptc 0.0.27
# Service compile surface — scriptc 0.0.28
What TypeScript under `src/services/` can use, as stated by the pinned
compiler itself (surface manifest schema 1, 527 entries:
+1 -1
View File
@@ -1,6 +1,6 @@
{
"date": "2026-08-12",
"compiler": "scriptc 0.0.27",
"compiler": "scriptc 0.0.28",
"policy": "explicit --npm-static; no auto or dynamic fallback",
"method": "packages/core/scripts/npm_static_spike.mjs against exact package bytes in the locked docs workspace",
"summary": "3 of 5 deliberately small candidates cleared 100% static coverage; nanoid and micromark were refused, so package support is selective",
+2 -2
View File
@@ -860,7 +860,7 @@ test "service projection derives host dispatch and registry from one contract" {
const contract: service.Contract = .{
.format = 3,
.protocol_version = 3,
.compiler_version = "0.0.27",
.compiler_version = "0.0.28",
.deterministic = false,
.packages = &.{},
.types = .{ .records = &.{}, .enums = &.{}, .unions = &.{} },
@@ -901,7 +901,7 @@ test "service projection derives host dispatch and registry from one contract" {
try std.testing.expect(std.mem.indexOf(u8, registry, ".name = \"feeds.parse\", .index = 0") != null);
try std.testing.expect(std.mem.indexOf(u8, registry, "0 => true") != null);
try std.testing.expect(std.mem.indexOf(u8, registry, "copyServiceBytes(bytes)") != null);
try std.testing.expect(std.mem.indexOf(u8, registry, "pub const compiler_version = \"0.0.27\"") != null);
try std.testing.expect(std.mem.indexOf(u8, registry, "pub const compiler_version = \"0.0.28\"") != null);
try std.testing.expect(std.mem.indexOf(u8, registry, "pub const contract_fingerprint = [_]u8{") != null);
const client = try emitClient(std.testing.allocator, contract);
+4 -4
View File
@@ -216,7 +216,7 @@ test "service contract validates typed operations and authority attestation" {
defer arena_state.deinit();
const arena = arena_state.allocator();
const good =
\\{"format":3,"protocol_version":3,"compiler_version":"0.0.27","deterministic":false,"packages":[],"types":{"records":[],"enums":[],"unions":[]},"operations":[{"name":"feeds.parse","client":"feedsParse","module":"src/services/feeds.ts","export":"parse","request":{"kind":"bytes"},"result":{"kind":"bytes"},"deadline_ms":null,"cancellable":false,"stream":null,"source_hash":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}]}
\\{"format":3,"protocol_version":3,"compiler_version":"0.0.28","deterministic":false,"packages":[],"types":{"records":[],"enums":[],"unions":[]},"operations":[{"name":"feeds.parse","client":"feedsParse","module":"src/services/feeds.ts","export":"parse","request":{"kind":"bytes"},"result":{"kind":"bytes"},"deadline_ms":null,"cancellable":false,"stream":null,"source_hash":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}]}
;
var diagnostics: [512]u8 = undefined;
var writer = std.Io.Writer.fixed(&diagnostics);
@@ -225,7 +225,7 @@ test "service contract validates typed operations and authority attestation" {
try std.testing.expectEqualStrings("feeds.parse", contract.operations[0].name);
const dollar =
\\{"format":3,"protocol_version":3,"compiler_version":"0.0.27","deterministic":false,"packages":[],"types":{"records":[],"enums":[],"unions":[]},"operations":[{"name":"feeds.$parse","client":"feeds$parse","module":"src/services/feeds.ts","export":"$parse","request":{"kind":"bytes"},"result":{"kind":"bytes"},"deadline_ms":null,"cancellable":true,"stream":null,"source_hash":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}]}
\\{"format":3,"protocol_version":3,"compiler_version":"0.0.28","deterministic":false,"packages":[],"types":{"records":[],"enums":[],"unions":[]},"operations":[{"name":"feeds.$parse","client":"feeds$parse","module":"src/services/feeds.ts","export":"$parse","request":{"kind":"bytes"},"result":{"kind":"bytes"},"deadline_ms":null,"cancellable":true,"stream":null,"source_hash":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}]}
;
var dollar_diagnostics: [512]u8 = undefined;
var dollar_writer = std.Io.Writer.fixed(&dollar_diagnostics);
@@ -233,7 +233,7 @@ test "service contract validates typed operations and authority attestation" {
try std.testing.expectEqualStrings("$parse", dollar_contract.operations[0].@"export");
const bad =
\\{"format":3,"protocol_version":3,"compiler_version":"0.0.27","deterministic":true,"packages":[],"types":{"records":[],"enums":[],"unions":[]},"operations":[{"name":"feeds.parse","client":"feedsParse","module":"src/services/feeds.ts","export":"parse","request":{"kind":"bytes"},"result":{"kind":"bytes"},"deadline_ms":null,"cancellable":false,"stream":null,"source_hash":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}]}
\\{"format":3,"protocol_version":3,"compiler_version":"0.0.28","deterministic":true,"packages":[],"types":{"records":[],"enums":[],"unions":[]},"operations":[{"name":"feeds.parse","client":"feedsParse","module":"src/services/feeds.ts","export":"parse","request":{"kind":"bytes"},"result":{"kind":"bytes"},"deadline_ms":null,"cancellable":false,"stream":null,"source_hash":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}]}
;
var bad_diagnostics: [512]u8 = undefined;
var bad_writer = std.Io.Writer.fixed(&bad_diagnostics);
@@ -241,7 +241,7 @@ test "service contract validates typed operations and authority attestation" {
try std.testing.expect(std.mem.indexOf(u8, bad_writer.buffered(), "deterministic=true") != null);
const skewed =
\\{"format":3,"protocol_version":3,"compiler_version":"0.0.27","deterministic":false,"packages":[],"types":{"records":[],"enums":[],"unions":[]},"operations":[{"name":"other.parse","client":"otherParse","module":"src/services/feeds.ts","export":"parse","request":{"kind":"bytes"},"result":{"kind":"bytes"},"deadline_ms":null,"cancellable":false,"stream":null,"source_hash":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}]}
\\{"format":3,"protocol_version":3,"compiler_version":"0.0.28","deterministic":false,"packages":[],"types":{"records":[],"enums":[],"unions":[]},"operations":[{"name":"other.parse","client":"otherParse","module":"src/services/feeds.ts","export":"parse","request":{"kind":"bytes"},"result":{"kind":"bytes"},"deadline_ms":null,"cancellable":false,"stream":null,"source_hash":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}]}
;
var skewed_diagnostics: [512]u8 = undefined;
var skewed_writer = std.Io.Writer.fixed(&skewed_diagnostics);