diff --git a/compiler/__tests__/parser.test.ts b/compiler/__tests__/parser.test.ts index 701eef4..e16b091 100644 --- a/compiler/__tests__/parser.test.ts +++ b/compiler/__tests__/parser.test.ts @@ -1,10 +1,6 @@ import { describe, it, expect } from 'vitest'; -import path from 'path'; -import { fileURLToPath } from 'url'; import { parseSpeckContent, parseSpeckFile } from '../src/parser.js'; -const __dirname = path.dirname(fileURLToPath(import.meta.url)); - describe('SpeckDL Parser', () => { describe('parseSpeckContent', () => { it('should parse a minimal speck definition with name', () => { @@ -104,60 +100,6 @@ speck Second { } }); - it('should parse input with multi-line record type (speckl#57)', () => { - const content = `speck Test { - input: { - operation: Operation, - maxRetries: Nat, - initialDelay: Real, - maxDelay: Real - } - output: { - success: Bool, - finalResult: String, - attemptCount: Nat, - totalDelay: Real - } -}`; - const ast = parseSpeckContent(content); - const input = ast.specks[0].members[0]; - const output = ast.specks[0].members[1]; - expect(input.type).toBe('input'); - expect(output.type).toBe('output'); - if (input.type === 'input') { - expect(input.typeExpr.type).toBe('record'); - expect(input.typeExpr.fields).toHaveLength(4); - expect(input.typeExpr.fields![0].name).toBe('operation'); - expect(input.typeExpr.fields![3].name).toBe('maxDelay'); - } - if (output.type === 'output') { - expect(output.typeExpr.type).toBe('record'); - expect(output.typeExpr.fields).toHaveLength(4); - expect(output.typeExpr.fields![0].name).toBe('success'); - expect(output.typeExpr.fields![3].name).toBe('totalDelay'); - } - }); - - it('should parse input with multi-line record type, comments inside (speckl#57)', () => { - // Edge case: line comments inside the block - const content = `speck Test { - input: { - // the operation to retry - operation: Operation, - // max number of retry attempts - retries: Nat - } -}`; - const ast = parseSpeckContent(content); - const input = ast.specks[0].members[0]; - if (input.type === 'input') { - expect(input.typeExpr.type).toBe('record'); - expect(input.typeExpr.fields).toHaveLength(2); - expect(input.typeExpr.fields![0].name).toBe('operation'); - expect(input.typeExpr.fields![1].name).toBe('retries'); - } - }); - it('should parse input with list type', () => { const content = `speck Test { input: [Nat] @@ -537,7 +479,7 @@ speck Second { }); it('should parse full TigerBeetle speck from file', () => { - const ast = parseSpeckFile(path.join(__dirname, 'tigerbeetle.speck')); + const ast = parseSpeckFile('./__tests__/tigerbeetle.speck'); expect(ast.specks).toHaveLength(1); const speck = ast.specks[0]; @@ -582,343 +524,4 @@ speck Second { } }); }); - - // Cycle 57: oneof syntax for proto wire-format discriminated unions. - describe('oneof blocks (cycle 57)', () => { - it('should parse a minimal oneof with two variants', () => { - const content = `speck One { - oneof Payload { - create_group: CreateGroup - add_steward: AddSteward - } -}`; - const ast = parseSpeckContent(content); - const oneof = ast.specks[0].members.find(m => m.type === 'oneof'); - expect(oneof).toBeDefined(); - if (oneof?.type === 'oneof') { - expect(oneof.name).toBe('Payload'); - expect(oneof.variants).toEqual([ - { fieldName: 'create_group', typeName: 'CreateGroup' }, - { fieldName: 'add_steward', typeName: 'AddSteward' }, - ]); - } - }); - - it('should tolerate trailing commas / semicolons (proto-style)', () => { - const content = `speck One { - oneof Payload { - create_group: CreateGroup, - add_steward: AddSteward; - } -}`; - const ast = parseSpeckContent(content); - const oneof = ast.specks[0].members.find(m => m.type === 'oneof'); - if (oneof?.type === 'oneof') { - expect(oneof.variants).toHaveLength(2); - } - }); - - it('should skip comments inside oneof blocks', () => { - const content = `speck One { - oneof Payload { - // bootstrap variant - create_group: CreateGroup - /* member action */ - add_member: AddMember - } -}`; - const ast = parseSpeckContent(content); - const oneof = ast.specks[0].members.find(m => m.type === 'oneof'); - if (oneof?.type === 'oneof') { - expect(oneof.variants.map(v => v.fieldName)).toEqual(['create_group', 'add_member']); - } - }); - - it('should coexist with interface and event blocks', () => { - const content = `speck Mix { - event CreateGroup { name: String } - interface AddSteward { new_steward: String } - oneof Payload { - create_group: CreateGroup - add_steward: AddSteward - } -}`; - const ast = parseSpeckContent(content); - const members = ast.specks[0].members; - expect(members.filter(m => m.type === 'event')).toHaveLength(1); - expect(members.filter(m => m.type === 'interface')).toHaveLength(1); - expect(members.filter(m => m.type === 'oneof')).toHaveLength(1); - }); - }); - - // Cycle 58: transition envelope — a proto message wrapping a oneof payload - // plus metadata fields. Federated-meetup's `Transition` message is the - // canonical example: prior_state, payload (oneof), steward_signatures, - // hlc, branch_id, signed_at. - describe('transition blocks (cycle 58)', () => { - it('should parse a minimal transition with regular fields', () => { - const content = `speck One { - transition Transition { - hlc: Bytes - branch_id: Nat - } -}`; - const ast = parseSpeckContent(content); - const t = ast.specks[0].members.find(m => m.type === 'transition'); - expect(t).toBeDefined(); - if (t?.type === 'transition') { - expect(t.name).toBe('Transition'); - expect(t.fields.map(f => f.name)).toEqual(['hlc', 'branch_id']); - expect(t.payloadOneof).toBeUndefined(); - expect(t.typeDiscriminator).toBeUndefined(); - } - }); - - it('should recognize payload: and record the reference', () => { - const content = `speck One { - oneof TransitionPayload { - create_group: CreateGroupPayload - } - transition Transition { - type: TransitionType - payload: TransitionPayload - hlc: Bytes - } -}`; - const ast = parseSpeckContent(content); - const t = ast.specks[0].members.find(m => m.type === 'transition'); - if (t?.type === 'transition') { - expect(t.payloadOneof).toBe('TransitionPayload'); - // payload must NOT appear in fields - expect(t.fields.map(f => f.name)).toEqual(['hlc']); - // type is a discriminator reference, not a regular field - expect(t.typeDiscriminator).toBe('TransitionType'); - expect(t.fields.find(f => f.name === 'type')).toBeUndefined(); - } - }); - - it('should tolerate trailing commas and comments', () => { - const content = `speck One { - transition Transition { - // timestamp from the signer - signed_at: Timestamp, - hlc: Bytes; - } -}`; - const ast = parseSpeckContent(content); - const t = ast.specks[0].members.find(m => m.type === 'transition'); - if (t?.type === 'transition') { - expect(t.fields.map(f => f.name)).toEqual(['signed_at', 'hlc']); - } - }); - }); - - // Cycle 59: `state as { ... }` to override the - // .proto generator's default `State` message name. - // This unblocks federated-meetup's proto migration: the consumer - // Go code imports `pb.StateSnapshot`, not `pb.FederatedMeetupState`. - describe('state as (cycle 59)', () => { - it('should record messageName override on StateNode', () => { - const content = `speck FederatedMeetup { - state as StateSnapshot { - branch_id: Nat, - stewards: StringList - } -}`; - const ast = parseSpeckContent(content); - const state = ast.specks[0].members.find(m => m.type === 'state'); - if (state?.type === 'state') { - expect(state.messageName).toBe('StateSnapshot'); - expect(state.variables.map(v => v.name)).toEqual(['branch_id', 'stewards']); - } - }); - - it('should leave messageName undefined when no `as` clause is present', () => { - const content = `speck FederatedMeetup { - state: { - branch_id: Nat - } -}`; - const ast = parseSpeckContent(content); - const state = ast.specks[0].members.find(m => m.type === 'state'); - if (state?.type === 'state') { - expect(state.messageName).toBeUndefined(); - } - }); - }); - - // Cycle 60: enum interfaces (e.g. CustodyTier) parse as `kind: 'enum'` - // and the .proto generator emits a real `enum X { ... }` block. - describe('enum interfaces (cycle 60)', () => { - it('should classify bare-identifier interfaces as enums', () => { - const content = `speck FederatedMeetup { - interface CustodyTier { - ColdHardware - HotSigning - ThresholdSplit - BackupOnly - Compromised - } -}`; - const ast = parseSpeckContent(content); - const tier = ast.specks[0].members.find(m => m.name === 'CustodyTier'); - if (tier?.type === 'interface') { - expect(tier.kind).toBe('enum'); - expect(tier.methods.map(m => m.name)).toEqual([ - 'ColdHardware', 'HotSigning', 'ThresholdSplit', 'BackupOnly', 'Compromised' - ]); - } - }); - }); - - // Cycle 61: top-of-file `event_suffix:` directive. When set, the .proto - // generator appends the suffix to every event message name. - describe('event_suffix directive (cycle 61)', () => { - it('should record eventSuffix on the SpeckNode', () => { - const content = `speck FederatedMeetup { - event_suffix: "Payload" - event CreateGroup { name: String } -}`; - const ast = parseSpeckContent(content); - expect(ast.specks[0].eventSuffix).toBe('Payload'); - }); - - it('should leave eventSuffix undefined when not set', () => { - const content = `speck FederatedMeetup { - event CreateGroup { name: String } -}`; - const ast = parseSpeckContent(content); - expect(ast.specks[0].eventSuffix).toBeUndefined(); - }); - - it('should tolerate quoted and bare values', () => { - const a = parseSpeckContent('speck A {\n event_suffix: "Payload"\n}'); - const b = parseSpeckContent('speck B {\n event_suffix: Payload\n}'); - expect(a.specks[0].eventSuffix).toBe('Payload'); - expect(b.specks[0].eventSuffix).toBe('Payload'); - }); - }); - - // Cycle 62: inline `//` comments on field declarations were bleeding - // into the type expression. Real federated-meetup had: - // mesh_ip: Bytes // 4 bytes (IPv4 overlay) - // emitted as `Bytes // 4 bytes (IPv4 overlay) mesh_ip = 2;` — - // broken syntax. The fix strips the comment before parsing the type. - describe('inline comment stripping (cycle 62)', () => { - it('should strip inline // comments from event field types', () => { - const content = `speck One { - event InitialMeshPeer { - host_wg_key: Bytes, // 32 bytes - mesh_ip: Bytes // 4 bytes (IPv4 overlay) - } -}`; - const ast = parseSpeckContent(content); - const ev = ast.specks[0].members.find(m => m.name === 'InitialMeshPeer'); - if (ev?.type === 'event') { - const meshIp = ev.fields.find(f => f.name === 'mesh_ip'); - expect(meshIp?.type.name).toBe('Bytes'); - expect(meshIp?.type.name).not.toContain('IPv4'); - } - }); - - it('should strip inline // comments from interface field types', () => { - const content = `speck One { - interface InitialMeshPeer { - host_wg_key: Bytes, // X25519 - mesh_ip: Bytes // 4 bytes (IPv4 overlay) - } -}`; - const ast = parseSpeckContent(content); - const iface = ast.specks[0].members.find(m => m.name === 'InitialMeshPeer'); - if (iface?.type === 'interface') { - const meshIp = iface.fields.find(f => f.name === 'mesh_ip'); - expect(meshIp?.type.name).toBe('Bytes'); - expect(meshIp?.type.name).not.toContain('IPv4'); - } - }); - }); - - // Cycle 63: 'state as { ... }' must dispatch through the - // same parseStateBlockMultiline path as 'state: { ... }'. Cycle 59 - // added the parser-side extraction of the `as` clause; this test - // confirms the block-dispatcher also routes the new header form. - describe('state as dispatch (cycle 63)', () => { - it('should dispatch state as StateSnapshot to parseStateBlockMultiline', () => { - const content = `speck FederatedMeetup { - state as StateSnapshot { - branch_id: Nat - } -}`; - const ast = parseSpeckContent(content); - const state = ast.specks[0].members.find(m => m.type === 'state'); - if (state?.type === 'state') { - expect(state.messageName).toBe('StateSnapshot'); - expect(state.variables.map(v => v.name)).toEqual(['branch_id']); - } - }); - }); - - // Cycle 65: default-value syntax `= ` on event fields was - // bleeding into the type expression. Real federated-meetup has - // initial_mesh_peers: List = [] - // emitted as `List = [] initial_mesh_peers = 1;` - // which protoc rejects. The fix strips `= ` from the type - // before parsing (the default is a Speckl semantic; the .proto wire - // format has no place for it). - describe('default value stripping (cycle 65)', () => { - it('should strip `= []` from event field type expressions', () => { - const content = `speck One { - event CreateGroup { - initial_mesh_peers: List = [] - } -}`; - const ast = parseSpeckContent(content); - const ev = ast.specks[0].members.find(m => m.name === 'CreateGroup'); - if (ev?.type === 'event') { - const f = ev.fields[0]; - expect(f.name).toBe('initial_mesh_peers'); - expect(f.type.type).toBe('list'); - expect(f.type.elementType?.name).toBe('InitialMeshPeer'); - // The full type string should not contain '= []' anywhere — verify - // via the elementType name and the parent's name (both undefined - // for List, so we check the parser did not preserve the default - // in any visible field). - const asAny = f.type as any; - expect(JSON.stringify(asAny)).not.toContain('= []'); - } - }); - }); - - // Cycle 73: List fields in interface records must be preserved in the AST. - // Previously the generator emitted empty type for these fields because - // it called speckTypeToProto(f.type.name) which returns '' when .name is - // undefined (List/Map/Set nodes use .elementType/.keyType/.valueType, - // not .name). The generator was fixed, but this test locks in the parser - // behavior so a regression is caught early. - describe('List in interface record fields (cycle 73)', () => { - it('should parse List fields in interface records', () => { - const content = `speck One { - interface Container { - items: List, - names: List - } - interface Ticket { - id: String - } -}`; - const ast = parseSpeckContent(content); - const iface = ast.specks[0].members.find(m => m.name === 'Container'); - expect(iface).toBeDefined(); - if (iface?.type === 'interface') { - expect(iface.fields).toBeDefined(); - expect(iface.fields.length).toBe(2); - expect(iface.fields[0].name).toBe('items'); - expect(iface.fields[0].type.type).toBe('list'); - expect(iface.fields[0].type.elementType?.name).toBe('Ticket'); - expect(iface.fields[1].name).toBe('names'); - expect(iface.fields[1].type.type).toBe('list'); - expect(iface.fields[1].type.elementType?.name).toBe('String'); - } - }); - }); }); diff --git a/compiler/dist/__tests__/compiler.test.js b/compiler/dist/__tests__/compiler.test.js index 5b67050..68485dc 100644 --- a/compiler/dist/__tests__/compiler.test.js +++ b/compiler/dist/__tests__/compiler.test.js @@ -1,13 +1,10 @@ import { describe, it, expect, beforeAll } from 'vitest'; import fs from 'fs'; import path from 'path'; -import { fileURLToPath } from 'url'; -import { execSync } from 'child_process'; import { parseSpeckFile } from '../parser.js'; import { generateProvenanceGraph } from '../generators/provenance.js'; import { generateCycloneDX } from '../generators/cyclonedx.js'; import { generateSPDX } from '../generators/spdx.js'; -const __dirname = path.dirname(fileURLToPath(import.meta.url)); describe('Compiler E2E', () => { let ast; const testOutputDir = './test-output'; @@ -18,7 +15,7 @@ describe('Compiler E2E', () => { } }); it('should parse RetryHandler.speck', () => { - const specPath = path.join(__dirname, '..', '..', '..', 'examples', 'RetryHandler.speck'); + const specPath = path.join(process.cwd(), '..', 'examples', 'RetryHandler.speck'); ast = parseSpeckFile(specPath); expect(ast).toBeDefined(); expect(ast.specks).toBeDefined(); @@ -57,164 +54,4 @@ describe('Compiler E2E', () => { expect(spdx.spdx).toBeDefined(); }); }); -// --------------------------------------------------------------------------- -// Regression tests for Z3 / TypeScript / Rust expression translation fixes. -// -// These tests compile the FederatedMeetupProduct spec against each backend -// (z3, typescript, rust) and assert that the generated output contains the -// expected translated patterns. They guard against regressions in: -// - implies() argument preservation (Z3 + TS + Rust) -// - multi-level field access flattening (Z3) -// - len()/length() normalization (Z3) -// - nil → speckl_nil translation (Z3) -// - != → (distinct X Y) wrapping (Z3) -// - constraint checks emitting real every() / iter().all() (TS + Rust) -// - 'in' operator → .has() in verify expressions (TS) -// - multiple verify blocks all emitted (memberKey dedup fix) (TS + Rust) -// --------------------------------------------------------------------------- -const SPEC_PATH = '/home/sscoble/projects/federated-meetup/specs/FederatedMeetupProduct.speckdl'; -const OUT_DIR = './out'; // CLI writes to ./out relative to compiler cwd -const COMPILER_DIR = '/home/sscoble/speckl/compiler'; -describe('Z3 / TS / Rust expression translation regressions', () => { - let z3Output; - let tsOutput; - let rustOutput; - beforeAll(() => { - // Clean out directory to avoid stale output - execSync(`rm -rf ${OUT_DIR}`, { cwd: COMPILER_DIR }); - execSync(`mkdir -p ${OUT_DIR}`, { cwd: COMPILER_DIR }); - // Compile to all three targets - execSync(`npx tsx src/index.ts ${SPEC_PATH} --target z3 --output ${OUT_DIR}`, { cwd: COMPILER_DIR, stdio: 'pipe' }); - z3Output = fs.readFileSync(path.join(COMPILER_DIR, OUT_DIR, 'FederatedMeetupProduct.smt2'), 'utf-8'); - execSync(`npx tsx src/index.ts ${SPEC_PATH} --target typescript --output ${OUT_DIR}`, { cwd: COMPILER_DIR, stdio: 'pipe' }); - tsOutput = fs.readFileSync(path.join(COMPILER_DIR, OUT_DIR, 'FederatedMeetupProduct.ts'), 'utf-8'); - execSync(`npx tsx src/index.ts ${SPEC_PATH} --target rust --output ${OUT_DIR}`, { cwd: COMPILER_DIR, stdio: 'pipe' }); - rustOutput = fs.readFileSync(path.join(COMPILER_DIR, OUT_DIR, 'FederatedMeetupProduct', 'src', 'lib.rs'), 'utf-8'); - }, 120_000); - // 1. Z3: implies() preserves both arguments → (=> P Q) not (=> true true) - it('Z3: implies() emits (=> P Q) preserving both arguments', () => { - expect(z3Output).toContain('(=>'); - expect(z3Output).toContain('(=> (= o_status Refunded) (distinct o_refunded_at speckl_nil))'); - // Ensure we did NOT regress to (=> true true) - expect(z3Output).not.toContain('(=> true true)'); - expect(z3Output).not.toContain('(=> true'); - }); - // 2. Z3: multi-level field access m.price.amount → m_price_amount - it('Z3: multi-level field access m.price.amount flattens to m_price_amount', () => { - expect(z3Output).toContain('m_price_amount'); - // Ensure we did NOT regress to single-level m_price or bare m.price.amount - expect(z3Output).not.toContain('m.price.amount'); - // The constraint m_price_amount >= 0 should be present - expect(z3Output).toContain('(>= m_price_amount 0)'); - }); - // 3. Z3: len() handled same as length() → speckl_len_Int - it('Z3: len() is translated to speckl_len_Int (same as length())', () => { - // The spec uses len(m.price.currency) — should become speckl_len_Int - expect(z3Output).toContain('(speckl_len_Int m_price_currency)'); - // Ensure we did NOT regress to bare len() or length() - expect(z3Output).not.toMatch(/\blen\s*\(/); - expect(z3Output).not.toMatch(/\blength\s*\(/); - }); - // 4. Z3: nil translated to speckl_nil - it('Z3: nil is translated to speckl_nil sentinel', () => { - expect(z3Output).toContain('(declare-const speckl_nil Int)'); - expect(z3Output).toContain('speckl_nil'); - // Ensure we did NOT regress to bare nil / null - expect(z3Output).not.toMatch(/\bnil\b/); - }); - // 5. Z3: != produces (distinct X Y) not bare 'distinct' - it('Z3: != produces wrapped (distinct X Y) not bare distinct', () => { - // The constraint g.hosting_tier != Free should emit (distinct g_hosting_tier Free) - expect(z3Output).toContain('(distinct g_hosting_tier Free)'); - // Ensure we did NOT regress to bare 'distinct g_hosting_tier Free' without parens - // (the fix wraps the operator in parens) - // A bare distinct would look like "g_hosting_tier distinct Free" without surrounding parens - expect(z3Output).not.toMatch(/[^(]\w+\s+distinct\s+\w+/); - }); - // 6. TS: implies(p,q) → (!p || q) not (p || q) - it('TS: implies(p, q) translates to (!p || q), not (p || q)', () => { - // constraint 6: implies(o.status == Refunded, o.refunded_at != nil) - // Should become (!(o.status === ...) || (o.refunded_at !== ...)) - expect(tsOutput).toContain('(!('); - expect(tsOutput).toContain('||'); - // The specific pattern: (!(o.status === ... || (o.refunded_at !== nil)) - expect(tsOutput).toMatch(/!\(o\.status === .* \|\| \(o\.refunded_at !== /); - // Ensure the CODE (not comments) has negation on p. - // A regression would have `return this.orders.every((o: any) => (o.status ===` - // (without the `!(` negation before `o.status`). - // Strip comments to avoid matching the original spec text in comments. - const tsNoComments = tsOutput.replace(/^\s*\/\/.*$/gm, ''); - // Positive: the every() body starts with (!(o.status — the (! is the negation - expect(tsNoComments).toMatch(/every\(\(o:\s*any\)\s*=>\s*\(!\(o\.status/); - // Negative: a regression would have every((o: any) => (o.status without the ! negation - expect(tsNoComments).not.toMatch(/every\(\(o:\s*any\)\s*=>\s*\(o\.status/); - }); - // 7. TS: constraint checks emit real every() not return true - it('TS: constraint checks emit real .every() calls, not return true', () => { - expect(tsOutput).toContain('.every('); - // Multiple constraints use every() — at least 8 constraints - const everyCount = (tsOutput.match(/\.every\(/g) || []).length; - expect(everyCount).toBeGreaterThanOrEqual(8); - // Ensure we did NOT regress to `return true` stubs - // A stub would have checkConstraintN() { return true; } - expect(tsOutput).not.toMatch(/checkConstraint\d+\(\):\s*boolean\s*\{\s*return\s*true\s*;\s*\}/); - }); - // 8. TS: 'in' operator in verify expressions → .has() not raw 'in' - it('TS: "in" operator in verify expressions translates to .has(), not raw in', () => { - // V1: always(implies(event == PurchaseTicket, ticket_id in tickets)) - // Should become tickets.has(ticket_id) - expect(tsOutput).toContain('.has('); - expect(tsOutput).toContain('tickets.has(ticket_id)'); - // Ensure we did NOT regress to raw 'in' operator (JS `in` checks property keys, not membership). - // A regression would look like `ticket_id in tickets` in CODE (not comments). - // Strip comments to avoid matching the original spec text in comments. - const tsNoComments = tsOutput.replace(/^\s*\/\/.*$/gm, ''); - expect(tsNoComments).not.toMatch(/\bticket_id\s+in\s+tickets\b/); - }); - // 9. TS/Rust: multiple verify blocks all emitted (memberKey dedup fix) - it('TS: all 6 verify blocks are emitted (memberKey dedup fix)', () => { - // The spec has 6 verify blocks; previously dedup killed all but the first - expect(tsOutput).toContain('verify1'); - expect(tsOutput).toContain('verify2'); - expect(tsOutput).toContain('verify3'); - expect(tsOutput).toContain('verify4'); - expect(tsOutput).toContain('verify5'); - expect(tsOutput).toContain('verify6'); - expect(tsOutput).not.toContain('verify7'); // only 6 verify blocks in spec - }); - it('Rust: all 6 verify blocks are emitted (memberKey dedup fix)', () => { - expect(rustOutput).toContain('verify_1'); - expect(rustOutput).toContain('verify_2'); - expect(rustOutput).toContain('verify_3'); - expect(rustOutput).toContain('verify_4'); - expect(rustOutput).toContain('verify_5'); - expect(rustOutput).toContain('verify_6'); - expect(rustOutput).not.toContain('verify_7'); - }); - // 10. Rust: constraint checks emit iter().all() not return true - it('Rust: constraint checks emit iter().all(), not return true stubs', () => { - expect(rustOutput).toContain('.iter().all('); - // Multiple constraints use iter().all() — at least 8 constraints - const iterAllCount = (rustOutput.match(/\.iter\(\)\.all\(/g) || []).length; - expect(iterAllCount).toBeGreaterThanOrEqual(8); - // Ensure we did NOT regress to `return true` stubs - expect(rustOutput).not.toMatch(/check_invariant_\d+\(&self\)\s*->\s*bool\s*\{\s*true\s*\}/); - }); - // 11. Rust: implies() → (!p || q) in Rust - it('Rust: implies(p, q) translates to (!p || q) in Rust', () => { - // constraint 6: implies(o.status == Refunded, o.refunded_at != nil) - // Should become (!(o.status == ... || (o.refunded_at != ...)) - expect(rustOutput).toContain('(!('); - expect(rustOutput).toMatch(/!\(o\.status == .* \|\| \(o\.refunded_at != /); - // Ensure the CODE (not comments) has negation on p. - // A regression would have `self.orders.iter().all(|o| (o.status ==` - // (without the `!(` negation before `o.status`). - // Strip comments to avoid matching the original spec text in comments. - const rustNoComments = rustOutput.replace(/^\s*\/\/.*$/gm, ''); - // Positive: the iter().all() body starts with (!(o.status — the (! is the negation - expect(rustNoComments).toMatch(/iter\(\)\.all\(\|o\|\s*\(!\(o\.status/); - // Negative: a regression would have iter().all(|o| (o.status without the ! negation - expect(rustNoComments).not.toMatch(/iter\(\)\.all\(\|o\|\s*\(o\.status/); - }); -}); //# sourceMappingURL=compiler.test.js.map \ No newline at end of file diff --git a/compiler/dist/__tests__/compiler.test.js.map b/compiler/dist/__tests__/compiler.test.js.map index f1185fa..6af290c 100644 --- a/compiler/dist/__tests__/compiler.test.js.map +++ b/compiler/dist/__tests__/compiler.test.js.map @@ -1 +1 @@ -{"version":3,"file":"compiler.test.js","sourceRoot":"","sources":["../../src/__tests__/compiler.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"compiler.test.js","sourceRoot":"","sources":["../../src/__tests__/compiler.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/compiler/dist/index.js b/compiler/dist/index.js index d58097d..e405d47 100644 --- a/compiler/dist/index.js +++ b/compiler/dist/index.js @@ -6,7 +6,6 @@ import { generateProvenanceGraph } from './generators/provenance.js'; import { generateCycloneDX } from './generators/cyclonedx.js'; import { generateSPDX } from './generators/spdx.js'; import { generateTypeScriptStateMachine } from './generators/typescript-state-machine.js'; -import { generateProtobuf } from './generators/protobuf.js'; import { generateZ3, parseInvariantsFromSource, parseNextFromSource } from './generators/z3.js'; import { generateRust } from './generators/rust.js'; import fs from 'fs'; @@ -42,7 +41,7 @@ async function main() { alias: 't', describe: 'Compilation target', type: 'string', - choices: ['typescript', 'z3', 'rust', 'protobuf', 'all'], + choices: ['typescript', 'z3', 'rust', 'all'], default: 'typescript', }) .option('verify-depth', { @@ -85,14 +84,6 @@ async function main() { console.log('\nGenerating Rust state machine...'); generateRust(ast, options.outputDir); } - // Generate protobuf schema if target is protobuf or all - // This is the load-bearing backend for the "no glue code" claim: - // the emitted .proto is the canonical wire format. Run `buf generate` - // on the output to produce Go/TS/Rust/C/Python/Java bindings. - if (options.target === 'protobuf' || options.target === 'all') { - console.log('\nGenerating protobuf schema (.proto)...'); - generateProtobuf(ast, options.outputDir); - } // Always generate provenance (it's the core output) if not z3-only or rust-only if (options.target !== 'z3' && options.target !== 'rust') { console.log('\nGenerating provenance graph (PROV-O JSON-LD)...'); diff --git a/compiler/dist/index.js.map b/compiler/dist/index.js.map index 8ea62ff..6202963 100644 --- a/compiler/dist/index.js.map +++ b/compiler/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/compiler/dist/parser.d.ts b/compiler/dist/parser.d.ts index 920c248..73f3835 100644 --- a/compiler/dist/parser.d.ts +++ b/compiler/dist/parser.d.ts @@ -2,12 +2,6 @@ export interface SpeckNode { type: 'speck'; name: string; members: MemberNode[]; - version?: string; - author?: string; - license?: string; - protoPackage?: string; - goPackage?: string; - eventSuffix?: string; } export interface ImportNode { type: 'import'; @@ -35,28 +29,10 @@ export interface VerifyNode { temporalExpr: string; depth?: number; } -export interface InterfaceField { - name: string; - type: TypeExpr; -} -export interface RpcMethod { - name: string; - requestType: string; - responseType: string; - clientStreaming?: boolean; - serverStreaming?: boolean; -} -export interface ServiceNode { - type: 'service'; - name: string; - rpcs: RpcMethod[]; -} export interface InterfaceNode { type: 'interface'; name: string; - kind: 'enum' | 'record' | 'service' | 'mixed'; methods: MethodSignature[]; - fields: InterfaceField[]; } export interface MethodSignature { name: string; @@ -74,26 +50,6 @@ export interface EventNode { type: TypeExpr; }[]; } -export interface OneofNode { - type: 'oneof'; - name: string; - variants: OneofVariant[]; -} -export interface OneofVariant { - fieldName: string; - typeName: string; -} -export interface TransitionNode { - type: 'transition'; - name: string; - fields: TransitionField[]; - payloadOneof?: string; - typeDiscriminator?: string; -} -export interface TransitionField { - name: string; - type: TypeExpr; -} export interface ProvenanceNode { type: 'provenance'; clauses: ProvenanceClause[]; @@ -147,7 +103,6 @@ export interface BOMNode { export interface StateNode { type: 'state'; variables: StateVar[]; - messageName?: string; } export interface StateVar { name: string; @@ -201,7 +156,7 @@ export type ActionStatement = { type: 'ifblock'; raw: string; }; -export type MemberNode = ImportNode | InputNode | OutputNode | ConstraintNode | VerifyNode | InterfaceNode | EventNode | OneofNode | TransitionNode | ProvenanceNode | ReviewNode | DerivesNode | SatisfiesNode | AuthorNode | SourceNode | BOMNode | StateNode | InitNode | ActionNode | ServiceNode; +export type MemberNode = ImportNode | InputNode | OutputNode | ConstraintNode | VerifyNode | InterfaceNode | EventNode | ProvenanceNode | ReviewNode | DerivesNode | SatisfiesNode | AuthorNode | SourceNode | BOMNode | StateNode | InitNode | ActionNode; export interface TypeExpr { type: 'primitive' | 'record' | 'list' | 'set' | 'map' | 'ident'; name?: string; diff --git a/compiler/dist/parser.d.ts.map b/compiler/dist/parser.d.ts.map index efb0bf1..2d7dd28 100644 --- a/compiler/dist/parser.d.ts.map +++ b/compiler/dist/parser.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,EAAE,CAAC;IAC3C,UAAU,EAAE,QAAQ,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,YAAY,GAAG,iBAAiB,GAAG,aAAa,GAAG,cAAc,CAAC;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;CACpC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,cAAc,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GACrD,qBAAqB,GAAG,cAAc,GAAG,kBAAkB,CAAC;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,KAAK,CAAC;IACZ,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAGD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/C;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,EAAE,CAAC;IAC3C,UAAU,EAAE,eAAe,EAAE,CAAC;CAC/B;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,GAC1E;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAErC,MAAM,MAAM,UAAU,GAClB,UAAU,GACV,SAAS,GACT,UAAU,GACV,cAAc,GACd,UAAU,GACV,aAAa,GACb,SAAS,GACT,cAAc,GACd,UAAU,GACV,WAAW,GACX,aAAa,GACb,UAAU,GACV,UAAU,GACV,OAAO,GACP,SAAS,GACT,QAAQ,GACR,UAAU,CAAC;AAEf,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,EAAE,CAAC;IAC5C,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,SAAS,CAAC,EAAE,QAAQ,CAAC;CACtB;AAED,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAGpD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,GAAG,CAwCzE"} \ No newline at end of file diff --git a/compiler/dist/parser.js b/compiler/dist/parser.js index 449d8f5..ba68502 100644 --- a/compiler/dist/parser.js +++ b/compiler/dist/parser.js @@ -51,13 +51,6 @@ function parseSpeck(lines, startIndex) { return null; const name = headerMatch[1]; const members = []; - // Cycle 73: refactored from static-field hack to local-object pattern. - // Previously, proto_package / go_package / event_suffix were stored - // on (parseSpeck as any)._protoPackage etc — static function fields - // that leaked between parse calls. Now collected in a local metadata - // object and spread into the return value. No reset needed because - // the object is local to this invocation. - const metadata = {}; let i = startIndex + 1; let braceCount = 1; while (i < lines.length && braceCount > 0) { @@ -67,35 +60,12 @@ function parseSpeck(lines, startIndex) { i++; continue; } - // ── Top-of-file protobuf metadata directives ──────────────── - // These attach to the SpeckNode and are NOT emitted as members. - // Format: `key: value` (string values may be quoted or bare). - // `author:`, `version:`, `license:` continue to be parsed as members - // (AuthorNode, etc.) for backward compatibility with the existing - // PROV-O / CycloneDX generators. - const metaMatch = line.match(/^(proto_package|go_package|event_suffix)\s*:\s*(.+)$/); - if (metaMatch) { - // Strip surrounding quotes if present - const value = metaMatch[2].trim().replace(/^['"]|['"]$/g, ''); - if (metaMatch[1] === 'proto_package') { - metadata.protoPackage = value; - } - else if (metaMatch[1] === 'go_package') { - metadata.goPackage = value; - } - else if (metaMatch[1] === 'event_suffix') { - metadata.eventSuffix = value; - } - i++; - continue; - } // Count braces on this line first const openCount = (rawLine.match(/{/g) || []).length; const closeCount = (rawLine.match(/}/g) || []).length; // Check for block-opening members (those that open braces on the same line) const blockStarters = ['state:', 'init:', 'action ', 'event ', 'provenance ', 'bom ', 'interface ', - 'state {', 'init {', 'verify ', 'constraint ', 'input:', 'output:', 'service ', 'oneof ', 'transition ', - 'state as ']; + 'state {', 'init {', 'verify ', 'constraint ']; const isBlockStarter = blockStarters.some(s => line.startsWith(s)); if (isBlockStarter && openCount > 0) { // Multi-line block: parse it and skip to its end @@ -114,8 +84,8 @@ function parseSpeck(lines, startIndex) { continue; } // Handle constraint/verify blocks that may span multiple lines without braces - // (e.g. constraint Name: forall r in [0..4]:, verify: always(implies(\n ...\n))) - if (line.startsWith('constraint ') || line.startsWith('verify ') || line.startsWith('verify:')) { + // (e.g. constraint Name: forall r in [0..4]:) + if (line.startsWith('constraint ') || line.startsWith('verify ')) { const member = parseMultiLineConstraintVerify(lines, i); if (member) { members.push(member); @@ -128,8 +98,7 @@ function parseSpeck(lines, startIndex) { nextLine.startsWith('state') || nextLine.startsWith('init') || nextLine.startsWith('action ') || nextLine.startsWith('event ') || nextLine.startsWith('interface ') || nextLine.startsWith('provenance ') || - nextLine.startsWith('service ') || nextLine.startsWith('bom ') || - nextLine.startsWith('}') || + nextLine.startsWith('bom ') || nextLine.startsWith('}') || nextLine.startsWith('next:') || nextLine.startsWith('invariant ')) { break; } @@ -151,10 +120,7 @@ function parseSpeck(lines, startIndex) { } i++; } - return { type: 'speck', name, members, - protoPackage: metadata.protoPackage, - goPackage: metadata.goPackage, - eventSuffix: metadata.eventSuffix }; + return { type: 'speck', name, members }; } function findBlockEnd(lines, startIndex, startBraceCount) { let braceCount = startBraceCount; @@ -203,12 +169,6 @@ function parseMemberBlock(lines, startIndex) { if (firstLine.startsWith('state {') || firstLine === 'state') { return parseStateBlockMultiline(lines, startIndex, startBraceCount); } - if (firstLine.startsWith('state as ')) { - // Cycle 63: `state as { ... }` form must dispatch - // through the same state-block parser so the `as` override on the - // first line is captured. - return parseStateBlockMultiline(lines, startIndex, startBraceCount); - } if (firstLine.startsWith('init:')) { return parseInitBlockMultiline(lines, startIndex, startBraceCount); } @@ -224,15 +184,6 @@ function parseMemberBlock(lines, startIndex) { if (firstLine.startsWith('interface ')) { return parseInterfaceBlockMultiline(lines, startIndex, startBraceCount); } - if (firstLine.startsWith('oneof ')) { - return parseOneofBlockMultiline(lines, startIndex, startBraceCount); - } - if (firstLine.startsWith('transition ')) { - return parseTransitionBlockMultiline(lines, startIndex, startBraceCount); - } - if (firstLine.startsWith('service ')) { - return parseServiceBlockMultiline(lines, startIndex, startBraceCount); - } if (firstLine.startsWith('provenance ')) { return { type: 'provenance', clauses: [] }; } @@ -245,64 +196,8 @@ function parseMemberBlock(lines, startIndex) { if (firstLine.startsWith('constraint ')) { return parseConstraintBlockMultiline(lines, startIndex, startBraceCount); } - if (firstLine.startsWith('input:') || firstLine.startsWith('output:')) { - return parseInputOutputBlock(lines, startIndex, startBraceCount); - } return null; } -/** - * Parse a multi-line `input: { ... }` or `output: { ... }` block. - * - * The first line opens with `input: {` or `output: {` and the matching `}` - * may be many lines later (with field declarations on intermediate lines). - * We collect all lines up to the matching `}` (brace-counted) and join the - * inner content into a single record string that `parseTypeExpr` already - * knows how to handle. - */ -function parseInputOutputBlock(lines, startIndex, startBraceCount) { - const header = lines[startIndex].trim(); - const isInput = header.startsWith('input:'); - const kind = isInput ? 'input' : 'output'; - // Collect inner content lines, brace-counting across the block. - // startBraceCount is the brace count on the header line (1 for `input: {`). - // We need to find the line where braceCount returns to 0 (i.e. the closing `}`). - const innerLines = []; - let braceCount = 0; - let i = startIndex; - // First pass: extract inner content from header line (everything after the first `{`). - const headerLine = lines[startIndex].trim(); - const headerNoComment = headerLine.replace(/\/\/.*$/, '').trim(); - const openIdx = headerNoComment.indexOf('{'); - if (openIdx >= 0) { - const after = headerNoComment.substring(openIdx + 1).trim(); - if (after) - innerLines.push(after); - } - braceCount = 1; // we're inside one `{` from the header - i = startIndex + 1; - while (i < lines.length && braceCount > 0) { - const raw = lines[i]; - const stripped = raw.trim(); - // Strip line comments (//...) — they cannot be inside a type expression. - const noComment = stripped.replace(/\/\/.*$/, '').trim(); - for (const ch of noComment) { - if (ch === '{') - braceCount++; - else if (ch === '}') - braceCount--; - } - if (braceCount > 0 && noComment) { - // Inside the block — keep content (skip the closing `}` line itself). - innerLines.push(noComment); - } - i++; - } - // Join inner content with newlines; `parseTypeExpr`'s record branch - // splits on commas and matches `name: type` pairs. - const recordExpr = '{ ' + innerLines.join(' ') + ' }'; - const typeExpr = parseTypeExpr(recordExpr); - return { type: kind, typeExpr }; -} function parseMember(line) { // input: if (line.startsWith('input:')) { @@ -342,14 +237,6 @@ function parseMember(line) { if (line.startsWith('event ')) { return parseEvent(line); } - // oneof: - if (line.startsWith('oneof ')) { - return parseOneof(line); - } - // transition: - if (line.startsWith('transition ')) { - return parseTransition(line); - } // provenance { if (line.startsWith('provenance ')) { return { type: 'provenance', clauses: [] }; @@ -626,14 +513,11 @@ function parseInterface(line) { throw new Error(`Failed to parse interface: ${line}`); } const name = match[1]; - // Header-only; parseInterfaceBlockMultiline fills in methods/fields/kind - // by scanning the lines inside the { ... } block. + // This is a simplified parser - in a real implementation, we'd need to handle multi-line interfaces return { type: 'interface', name, - kind: 'mixed', methods: [], - fields: [], }; } function parseEvent(line) { @@ -649,32 +533,6 @@ function parseEvent(line) { fields: [], }; } -// Cycle 57: parse `oneof Name {` (header only; parseOneofBlockMultiline fills variants). -function parseOneof(line) { - // oneof Name { - const match = line.match(/^oneof\s+(\w+)\s*{/); - if (!match) { - throw new Error(`Failed to parse oneof: ${line}`); - } - return { - type: 'oneof', - name: match[1], - variants: [], - }; -} -// Cycle 58: parse `transition Name {` (header only; parseTransitionBlockMultiline fills fields + payload-oneof). -function parseTransition(line) { - // transition Name { - const match = line.match(/^transition\s+(\w+)\s*{/); - if (!match) { - throw new Error(`Failed to parse transition: ${line}`); - } - return { - type: 'transition', - name: match[1], - fields: [], - }; -} function parseProvenanceBlock(lines, line) { // This is a simplified parser - in a real implementation, we'd parse the full block return { @@ -752,12 +610,6 @@ function parseSource(line) { }; } function parseStateBlockMultiline(lines, startIndex, startBraceCount) { - // Cycle 59: support `state as { ... }` to override the - // generated .proto message name. Default (no `as`) keeps the existing - // `message State { ... }` convention. - const headerLine = lines[startIndex].trim(); - const asMatch = headerLine.match(/^state\s+as\s+(\w+)\s*{/); - const messageName = asMatch ? asMatch[1] : undefined; const endIndex = findBlockEnd(lines, startIndex + 1, startBraceCount); const innerLines = lines.slice(startIndex + 1, endIndex).map(l => l.trim()).filter(l => l && !l.startsWith('//') && !l.startsWith('/*')); // State blocks separate fields with commas or newlines/semicolons. @@ -777,10 +629,7 @@ function parseStateBlockMultiline(lines, startIndex, startBraceCount) { } return acc + ' ' + line; }, ''); - const result = parseStateBlock(inner); - if (messageName !== undefined) - result.messageName = messageName; - return result; + return parseStateBlock(inner); } function parseInitBlockMultiline(lines, startIndex, startBraceCount) { const endIndex = findBlockEnd(lines, startIndex + 1, startBraceCount); @@ -964,24 +813,7 @@ function parseEventBlockMultiline(lines, startIndex, startBraceCount) { const innerLines = lines.slice(startIndex + 1, endIndex).map(l => l.trim()).filter(l => l && !l.startsWith('//') && !l.startsWith('/*')); const fields = []; for (const line of innerLines) { - // Cycle 62: strip inline `//` line-comments from the type expression - // before parsing. Without this, an event field like - // mesh_ip: Bytes // 4 bytes (IPv4 overlay) - // produces a TypeExpr whose name includes the comment text, which - // the .proto generator emits verbatim: - // bytes // 4 bytes (IPv4 overlay) mesh_ip = 2; - // (broken syntax — comment is in the type position). - const noComment = line.replace(/\/\/.*$/, '').trim(); - // Cycle 65: strip default-value suffix `= ` from the type - // expression. The federated-meetup speckdl has fields like - // initial_mesh_peers: List = [] - // where the default is meaningful in Speckl semantics (a state- - // machine init) but the .proto wire format doesn't carry a - // default — it's a generator concern. Without this, the type - // expression was emitted as `List = []` and - // protoc rejects the resulting syntax. - const noDefault = noComment.replace(/\s*=\s*[^,]+$/, '').trim(); - const match = noDefault.match(/^(\w+)\s*:\s*(.+?),?$/); + const match = line.match(/^(\w+)\s*:\s*(.+?),?$/); if (match) { fields.push({ name: match[1], type: parseTypeExpr(match[2].replace(/,$/, '').trim()) }); } @@ -994,20 +826,12 @@ function parseInterfaceBlockMultiline(lines, startIndex, startBraceCount) { const endIndex = findBlockEnd(lines, startIndex + 1, startBraceCount); const innerLines = lines.slice(startIndex + 1, endIndex).map(l => l.trim()).filter(l => l && !l.startsWith('//') && !l.startsWith('/*')); const methods = []; - const fields = []; for (const line of innerLines) { - // Cycle 62: strip inline `//` line-comments from each line before - // token-splitting. Without this, a field like - // mesh_ip: Bytes // 4 bytes (IPv4 overlay) - // has its comment text bleed into the parsed type expression, - // which the .proto generator emits verbatim — broken syntax. - const noComment = line.replace(/\/\/.*$/, '').trim(); - if (!noComment) - continue; - // Split on comma so multi-variant lines like "Idle, Parsing, Done" all parse - const tokens = noComment.split(',').map(s => s.trim()).filter(Boolean); + // name-only: enum-style values (e.g., "Idle", "Idle, Parsing" comma-separated) + // Split on comma and take each trimmed token + const tokens = line.split(',').map(s => s.trim()).filter(Boolean); for (const token of tokens) { - // Check 1: method signature form: name(params) -> returnType + // Check if it’s a name(params) -> returnType method signature const methodMatch = token.match(/^(\w+)\s*\(([^)]*)\)\s*->\s*(.+?),?$/); if (methodMatch) { const name = methodMatch[1]; @@ -1024,135 +848,14 @@ function parseInterfaceBlockMultiline(lines, startIndex, startBraceCount) { } } methods.push({ name, params, returnType: parseTypeExpr(returnTypeStr) }); - continue; } - // Check 2: field declaration form: field_name: TypeName - // Lowercase-starting identifier followed by ':' — record-style interface - const fieldMatch = token.match(/^(\w+)\s*:\s*(.+)$/); - if (fieldMatch && /^[a-z_]/.test(fieldMatch[1])) { - fields.push({ name: fieldMatch[1], type: parseTypeExpr(fieldMatch[2].trim()) }); - continue; - } - // Check 3: bare identifier (enum variant) — name only, no params - if (/^\w+$/.test(token)) { + else if (/^\w+$/.test(token)) { + // Name-only (enum-style) — treat as a method with no params and void return methods.push({ name: token, params: [], returnType: parseTypeExpr('Void') }); } } } - // Determine the kind based on what we collected - let kind = 'mixed'; - if (fields.length > 0 && methods.length === 0) { - kind = 'record'; - } - else if (methods.length > 0 && fields.length === 0) { - // Distinguish enum (all methods have empty params and Void return) from service - const allEnumLike = methods.every(m => m.params.length === 0 && m.returnType.name === 'Void'); - kind = allEnumLike ? 'enum' : 'service'; - } - return { ...header, kind, methods, fields }; -} -// Cycle 57: parse a `oneof Name { ... }` block. Each non-empty, non-comment -// inner line is `field_name: TypeName`. The wire field_name follows -// lowerCamelCase convention (TypeScript/Connect) and is emitted to .proto -// as snake_case by the generator. -function parseOneofBlockMultiline(lines, startIndex, startBraceCount) { - const firstLine = lines[startIndex].trim(); - const header = parseOneof(firstLine); - const endIndex = findBlockEnd(lines, startIndex + 1, startBraceCount); - const innerLines = lines.slice(startIndex + 1, endIndex).map(l => l.trim()).filter(l => l && !l.startsWith('//') && !l.startsWith('/*')); - const variants = []; - for (const line of innerLines) { - // Strip trailing comma or semicolon (proto-style "create_group: CreateGroup," is valid). - const trimmed = line.replace(/[,;]\s*$/, ''); - const m = trimmed.match(/^(\w+)\s*:\s*(\w+)\s*$/); - if (m) { - variants.push({ fieldName: m[1], typeName: m[2] }); - } - } - return { ...header, variants }; -} -// Cycle 58: parse a `transition Name { ... }` block. Each non-empty, -// non-comment inner line is `field_name: TypeName`. Two field names -// have special meaning: -// - `payload: ` — references a sibling `oneof` block; -// the proto generator will emit the variants inline as -// `oneof payload { ... }` inside the message body -// - `type: ` — the discriminator enum for the variants -// Other fields are emitted as ordinary proto message fields. -function parseTransitionBlockMultiline(lines, startIndex, startBraceCount) { - const firstLine = lines[startIndex].trim(); - const header = parseTransition(firstLine); - const endIndex = findBlockEnd(lines, startIndex + 1, startBraceCount); - const innerLines = lines.slice(startIndex + 1, endIndex).map(l => l.trim()).filter(l => l && !l.startsWith('//') && !l.startsWith('/*')); - const fields = []; - let payloadOneof; - let typeDiscriminator; - for (const line of innerLines) { - const trimmed = line.replace(/[,;]\s*$/, ''); - const m = trimmed.match(/^(\w+)\s*:\s*(.+)$/); - if (!m) - continue; - const fieldName = m[1]; - const typeStr = m[2].trim(); - if (fieldName === 'payload') { - // The type is the name of a sibling oneof block. - payloadOneof = typeStr; - // Don't add a regular field for payload — it becomes the oneof. - continue; - } - if (fieldName === 'type') { - // The type is the name of a discriminator enum. - typeDiscriminator = typeStr; - // Don't add a regular field for type — it's a special discriminator. - continue; - } - fields.push({ name: fieldName, type: parseTypeExpr(typeStr) }); - } - const result = { ...header, fields }; - if (payloadOneof !== undefined) - result.payloadOneof = payloadOneof; - if (typeDiscriminator !== undefined) - result.typeDiscriminator = typeDiscriminator; - return result; -} -function parseServiceBlockMultiline(lines, startIndex, startBraceCount) { - // service Name { - const firstLine = lines[startIndex].trim(); - const match = firstLine.match(/^service\s+(\w+)\s*{?/); - const name = match ? match[1] : 'UnnamedService'; - const endIndex = findBlockEnd(lines, startIndex + 1, startBraceCount); - const innerLines = lines.slice(startIndex + 1, endIndex).map(l => l.trim()).filter(l => l && !l.startsWith('//') && !l.startsWith('/*')); - const rpcs = []; - for (const line of innerLines) { - // rpc MethodName(RequestType) returns (ResponseType); - // Also support streaming: rpc M(stream R) returns (S); or rpc M(R) returns (stream S); - const rpcMatch = line.match(/^rpc\s+(\w+)\s*\(\s*(stream\s+)?(\w+)\s*\)\s*returns\s*\(\s*(stream\s+)?(\w+)\s*\)\s*;?$/); - if (rpcMatch) { - const methodName = rpcMatch[1]; - const clientStream = !!rpcMatch[2]; - const requestType = rpcMatch[3]; - const serverStream = !!rpcMatch[4]; - const responseType = rpcMatch[5]; - rpcs.push({ - name: methodName, - requestType, - responseType, - clientStreaming: clientStream, - serverStreaming: serverStream, - }); - } - else { - // Cycle 73: error on unrecognized lines inside service blocks. - // Previously, a typo like `rc_purchase_ticket(...)` (missing the `p` - // in `rpc`) was silently swallowed — the line didn't match the - // rpc regex, so it was skipped without error. Silent data loss in - // a spec compiler is unacceptable; the whole point is that the - // spec is the source of truth. - throw new Error(`Parse error in service block: unrecognized line "${line}". ` + - `Expected: rpc MethodName(RequestType) returns (ResponseType);`); - } - } - return { type: 'service', name, rpcs }; + return { ...header, methods }; } // --- Multi-line constraint/verify parsing (no braces needed) --- /** @@ -1170,128 +873,11 @@ function parseMultiLineConstraintVerify(lines, startIndex) { if (line.startsWith('verify ')) { return parseVerifyAnyForm(lines, startIndex); } - // Multi-line `verify:` form: verify: always(implies(\n ...\n)) - // The body opens parens that span multiple lines; collect continuation - // lines until parens balance to zero, then return the joined string as - // the temporalExpr. speckl#54. - if (line.startsWith('verify:')) { - return parseVerifyColonBlock(lines, startIndex); - } if (line.startsWith('constraint ')) { return parseConstraintAnyForm(lines, startIndex); } return null; } -/** - * Parse the `verify: ` form (speckl#54) where the body can span - * multiple lines: - * - * verify: always(implies( - * cond1, - * cond2 - * )) - * - * The whole expression (the part after `verify:`) is collected by - * appending subsequent non-empty, non-keyword-starting lines until - * parens/brackets/braces balance to zero. The joined string is stored - * in `temporalExpr` so the downstream LTL translator (typescript-state-machine - * verifyN()) sees a well-formed formula. - * - * The `name` is derived from the LTL operator's argument when it matches - * `always(Name)` / `eventually(Name)`. When the body is a richer expression - * (e.g. `always(implies(...))`) we fall back to `unnamed` — the generator - * still emits a working verifyN() that uses the full expression. - */ -function parseVerifyColonBlock(lines, startIndex) { - const firstLine = lines[startIndex].trim(); - // Strip the `verify:` prefix. - const head = firstLine.substring(firstLine.indexOf(':') + 1).trim(); - if (!head) - return null; - // If the head is already balanced on its own (single-line verify: expr), - // just return it directly — no continuation needed. - if (isExpressionComplete(head)) { - const nameMatch = head.match(/^(?:always|Always|eventually|Eventually)\s*\(\s*(\w+)\s*\)$/); - return { - type: 'verify', - name: nameMatch ? nameMatch[1] : 'unnamed', - temporalExpr: head, - }; - } - // Multi-line: collect continuation lines until parens balance. The same - // break-condition list used in the parseSpeck skip-loop applies (don't - // swallow the next member's keyword). We additionally stop at any - // standalone `}` so a verify inside a brace-block still terminates. - const parts = [head]; - let parens = 0, brackets = 0, braces = 0; - for (const ch of head) { - if (ch === '(') - parens++; - else if (ch === ')') - parens--; - else if (ch === '[') - brackets++; - else if (ch === ']') - brackets--; - else if (ch === '{') - braces++; - else if (ch === '}') - braces--; - } - let lastConsumed = startIndex; - for (let j = startIndex + 1; j < lines.length; j++) { - const raw = lines[j]; - const nl = raw.trim(); - if (!nl) { - // Empty line still updates counters (none) and advances lastConsumed - lastConsumed = j; - continue; - } - if (nl.startsWith('//') || nl.startsWith('/*')) { - // Skip standalone comments but treat them as part of the block - // (the LTL translator doesn't care about comments in temporalExpr). - lastConsumed = j; - continue; - } - // Stop at a new top-level member keyword — that's the next member. - if (nl.startsWith('constraint ') || nl.startsWith('verify ') || - nl.startsWith('constraint:') || nl.startsWith('verify:') || - nl.startsWith('state') || nl.startsWith('init') || - nl.startsWith('action ') || nl.startsWith('event ') || - nl.startsWith('interface ') || nl.startsWith('provenance ') || - nl.startsWith('bom ') || nl === '}' || - nl.startsWith('next:') || nl.startsWith('invariant ')) { - break; - } - // Update depth counters. - for (const ch of raw) { - if (ch === '(') - parens++; - else if (ch === ')') - parens--; - else if (ch === '[') - brackets++; - else if (ch === ']') - brackets--; - else if (ch === '{') - braces++; - else if (ch === '}') - braces--; - } - parts.push(nl); - lastConsumed = j; - if (parens === 0 && brackets === 0 && braces === 0) { - break; - } - } - const joined = parts.join(' ').replace(/\s+/g, ' ').trim(); - const nameMatch = joined.match(/^(?:always|Always|eventually|Eventually)\s*\(\s*(\w+)\s*\)$/); - return { - type: 'verify', - name: nameMatch ? nameMatch[1] : 'unnamed', - temporalExpr: joined, - }; -} function parseConstraintAnyForm(lines, startIndex) { const line = lines[startIndex].trim(); const namedMatch = line.match(/^constraint\s+(\w+):(.*)$/); diff --git a/compiler/dist/parser.js.map b/compiler/dist/parser.js.map index 96be730..70e270a 100644 --- a/compiler/dist/parser.js.map +++ b/compiler/dist/parser.js.map @@ -1 +1 @@ -{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/compiler/lagrangia/.gitignore b/compiler/lagrangia/.gitignore deleted file mode 100644 index c41cc9e..0000000 --- a/compiler/lagrangia/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target \ No newline at end of file diff --git a/compiler/lagrangia/Cargo.lock b/compiler/lagrangia/Cargo.lock deleted file mode 100644 index 8947d80..0000000 --- a/compiler/lagrangia/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "lagrangia" -version = "0.1.0" diff --git a/compiler/lagrangia/Cargo.toml b/compiler/lagrangia/Cargo.toml deleted file mode 100644 index 506ab14..0000000 --- a/compiler/lagrangia/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "lagrangia" -version = "0.1.0" -edition = "2021" -description = "Lagrangia reducer: action functional + variational selection over Speckl candidate implementations" - -[lib] -name = "lagrangia" -path = "src/lib.rs" - -[[test]] -name = "toggle_switch" -path = "tests/toggle_switch.rs" \ No newline at end of file diff --git a/compiler/lagrangia/README.md b/compiler/lagrangia/README.md deleted file mode 100644 index 331da83..0000000 --- a/compiler/lagrangia/README.md +++ /dev/null @@ -1,71 +0,0 @@ -# Lagrangia - -The spec-as-Lagrangian probe — a post-compilation reducer that sits between Speckl's IR and its Rust codegen. Given candidate implementations, it scores them by an action functional and selects the stationary (minimum-action) one, then verifies the invariants hold via real Z3. - -## Status - -- **v0** (2026-07-18): action functional + random-restart/hill-descent search over ToggleSwitch. 8/8 tests pass, stationary point at S=43.47. Static proxy for invariant distance. -- **v1.1** (2026-07-19): real Z3 wiring via shell-out to `z3 -smt2`. The `invariant_distance` term is now computed by actually running Z3 against each candidate's invariant obligations, not a static proxy. 13/13 tests pass (12 unit + 1 integration). The stationary candidate verifies as `Proved` via Z3. - -## The action functional - -`S(impl) = w1·complexity + w2·invariant_distance + w3·byte_entropy` - -with weights `w1=1.0, w2=100.0, w3=0.1`. The `invariant_distance` term dominates: any implementation that doesn't satisfy the spec has action ≥ 100, any that does has action < 50. This makes the "stationary" point provably the simplest correct implementation — the literal variational claim. - -| Term | What it measures | How computed (v1.1) | -|---|---|---| -| `complexity(impl)` | Lines of generated Rust | Non-comment, non-empty line count | -| `invariant_distance(impl)` | How far from satisfying invariants | **Z3 shell-out**: `unsat` → 0, `sat` → counterexample depth, `unknown` → 1000 | -| `byte_entropy(impl)` | Shannon entropy of source bytes | `-Σ p_i · log2(p_i)` over byte histogram | - -## v1.1 Z3 wiring - -`verify_candidate(obligations: &[InvariantObligation]) -> Z3Result` shells out to `z3 -in -smt2` for each obligation, parsing the `check-sat` result: - -- `unsat` → `Z3Result::Proved` (no counterexample exists; invariant holds) -- `sat` → `Z3Result::Counterexample { depth: 1 }` (violating state found) -- `unknown` → `Z3Result::Unknown { reason }` (inconclusive; treated as worst-case) - -`Z3Result` drives `invariant_distance`, which dominates the action functional. A candidate that breaks a guard (e.g. drops the `if !(!self.is_on)` check in ToggleSwitch) gets `Counterexample` → distance ≥ 1 → action ≥ 100, while a correct candidate gets `Proved` → distance 0 → action ~43. - -The integration test (`tests/toggle_switch.rs`) generates 20 perturbed candidates from the ToggleSwitch codegen output, scores each with real Z3 verification, descends 3 rounds, and selects the stationary point. The gold candidate (unperturbed codegen, both guards intact) verifies as `Proved` and wins with S=43.47 — confirming the variational claim. - -## Usage - -```rust -use lagrangia::{action, verify_candidate, ImplCandidate, InvariantObligation, Z3Result}; - -let obligations = vec![ - InvariantObligation { - name: "turn_on_guard".to_string(), - smt_query: "(declare-const is_on Bool) (assert (and is_on (not is_on)))".to_string(), - }, -]; -let z3_result = verify_candidate(&obligations); // shells out to z3 -let candidate = ImplCandidate { id: 0, rust_source: source, z3_result }; -let score = action(&candidate); -``` - -## Build & test - -```sh -cd compiler/lagrangia -cargo build -cargo test -``` - -Requires `z3` on `PATH` (v1.1). Install via `nix profile install nixpkgs#z3` or your system package manager. - -## Spec - -See `~/.hermes/plans/2026-07-18-lagrangia-reducer-spec.md` for the full design and falsification protocol. - -## Falsification conditions - -The Lagrangian claim is **false** if any hold: -1. The action functional produces no well-defined minimum (flat/chaotic scores). -2. The stationary candidate fails Z3 as often as a random one (no selection signal). -3. The search doesn't converge (hill descent cycles/plateaus). - -v1.1 results on ToggleSwitch: variance > 0 (manifold is non-degenerate), stationary candidate verifies `Proved` via Z3 (selection beats random), search converges in 3 rounds (no plateau). All three conditions hold — the variational claim survives. \ No newline at end of file diff --git a/compiler/lagrangia/src/lib.rs b/compiler/lagrangia/src/lib.rs deleted file mode 100644 index 1f130bb..0000000 --- a/compiler/lagrangia/src/lib.rs +++ /dev/null @@ -1,14 +0,0 @@ -//! Lagrangia reducer — the spec-as-Lagrangian probe. -//! -//! Sits between Speckl's IR and its Rust codegen. Given candidate -//! implementations, scores them by an action functional and selects -//! the stationary (minimum-action) one. -//! -//! v1.1: real Z3 wiring via shell-out to `z3 -smt2`. -//! See `~/.hermes/plans/2026-07-18-lagrangia-reducer-spec.md`. -pub mod score; - -pub use score::{ - action, byte_entropy, complexity, invariant_distance, verify_candidate, ImplCandidate, - InvariantObligation, Z3Result, -}; \ No newline at end of file diff --git a/compiler/lagrangia/src/score.rs b/compiler/lagrangia/src/score.rs deleted file mode 100644 index 679cf3b..0000000 --- a/compiler/lagrangia/src/score.rs +++ /dev/null @@ -1,382 +0,0 @@ -//! Action functional for the Lagrangia reducer. -//! -//! Spec §2.3: `S(impl) = w1·complexity + w2·invariant_distance + w3·byte_entropy` -//! with v0 weights `w1=1.0, w2=100.0, w3=0.1`. -//! -//! v1.1: real Z3 wiring via shell-out to `z3 -smt2`. The `invariant_distance` -//! term is now computed by actually running Z3 against the candidate's -//! state-machine semantics, not a static proxy. See `verify_candidate`. - -use std::io::Write; -use std::process::{Command, Stdio}; - -/// Result of running Z3 on a candidate's invariant obligations. -#[derive(Debug, Clone, PartialEq, Eq)] -pub enum Z3Result { - /// Z3 returned `unsat` — no counterexample exists; invariants hold. - /// `invariant_distance` = 0. - Proved, - /// Z3 returned `sat` — a counterexample model exists. - /// `depth` is the counterexample trace depth (number of transition steps - /// Z3 needed to find the violation; 1 for a one-step violation). - Counterexample { depth: u32 }, - /// Z3 returned `unknown` or errored — verification inconclusive. - /// Treated as worst-case (depth = max_depth) for scoring. - Unknown { reason: String }, -} - -impl Z3Result { - /// Returns `true` iff Z3 proved the invariants hold (`Proved`). - pub fn holds(&self) -> bool { - matches!(self, Z3Result::Proved) - } - - /// Numeric distance used by the action functional. - /// Proved → 0, Counterexample{depth} → depth, Unknown → large constant. - pub fn distance(&self) -> f64 { - match self { - Z3Result::Proved => 0.0, - Z3Result::Counterexample { depth } => *depth as f64, - Z3Result::Unknown { .. } => 1000.0, - } - } -} - -/// A candidate implementation in the search manifold. -#[derive(Debug, Clone)] -pub struct ImplCandidate { - pub id: u64, - pub rust_source: String, - /// Z3 verification result for this candidate's invariants. - /// v1.1: replaced the v0 `invariant_holds: bool` + `counterexample_depth: u32` - /// proxy with a real `Z3Result` from shelling out to `z3 -smt2`. - pub z3_result: Z3Result, -} - -/// Back-compat helper: returns `true` if invariants hold (z3_result.holds()). -impl ImplCandidate { - pub fn invariant_holds(&self) -> bool { - self.z3_result.holds() - } -} - -/// v0 weights from spec §2.3. -pub const W_COMPLEXITY: f64 = 1.0; -pub const W_INVARIANT_DISTANCE: f64 = 100.0; -pub const W_BYTE_ENTROPY: f64 = 0.1; - -/// `complexity(impl)` — lines of generated Rust code (spec §2.3, row 1). -/// -/// Counts non-empty, non-comment lines to avoid trivial inflation. -pub fn complexity(source: &str) -> f64 { - source - .lines() - .filter(|line| { - let trimmed = line.trim(); - !trimmed.is_empty() && !trimmed.starts_with("//") - }) - .count() as f64 -} - -/// `invariant_distance(impl)` — how far the implementation is from satisfying -/// each invariant (spec §2.3, row 2). -/// -/// v1.1: uses the real Z3 result. Proved → 0, Counterexample → depth, -/// Unknown → 1000 (worst-case). -pub fn invariant_distance(candidate: &ImplCandidate) -> f64 { - candidate.z3_result.distance() -} - -/// `byte_entropy(impl)` — Shannon entropy of the generated source bytes -/// (spec §2.3, row 3), in bits per byte. -/// -/// Returns 0.0 for empty input (degenerate case, avoids div-by-zero). -pub fn byte_entropy(source: &[u8]) -> f64 { - if source.is_empty() { - return 0.0; - } - let mut counts = [0u32; 256]; - for &b in source { - counts[b as usize] += 1; - } - let total = source.len() as f64; - let mut entropy = 0.0; - for &c in &counts { - if c == 0 { - continue; - } - let p = c as f64 / total; - entropy -= p * p.log2(); - } - entropy -} - -/// `S(impl)` — the action functional (spec §2.3). -/// -/// `S = w1·complexity + w2·invariant_distance + w3·byte_entropy` -pub fn action(candidate: &ImplCandidate) -> f64 { - W_COMPLEXITY * complexity(&candidate.rust_source) - + W_INVARIANT_DISTANCE * invariant_distance(candidate) - + W_BYTE_ENTROPY * byte_entropy(candidate.rust_source.as_bytes()) -} - -/// An invariant obligation: a name + an SMT-LIB assertion string that must be -/// **unsatisfiable** (i.e. no counterexample exists). The assertion is framed -/// as "there exists a state violating the invariant" — Z3 `unsat` means the -/// invariant holds. -#[derive(Debug, Clone)] -pub struct InvariantObligation { - /// Human-readable name (e.g. "turn_on_guard"). - pub name: String, - /// SMT-LIB2 fragment asserting "a violating state exists". Z3 `unsat` - /// proves no such state exists → invariant holds. - pub smt_query: String, -} - -/// Shell out to `z3 -smt2` and return the sat/unsat/unknown result. -/// -/// Feeds `smt_script` to Z3's stdin, captures stdout, parses `check-sat`. -/// Returns `Z3Result::Proved` for `unsat`, `Counterexample{depth:1}` for -/// `sat` (one-step counterexample by default), `Unknown{reason}` for -/// `unknown` or parse errors. -fn run_z3(smt_script: &str) -> Result { - let mut child = Command::new("z3") - .arg("-in") - .arg("-smt2") - .stdin(Stdio::piped()) - .stdout(Stdio::piped()) - .stderr(Stdio::piped()) - .spawn() - .map_err(|e| format!("failed to spawn z3: {e}"))?; - - if let Some(mut stdin) = child.stdin.take() { - stdin - .write_all(smt_script.as_bytes()) - .map_err(|e| format!("failed to write z3 stdin: {e}"))?; - } - - let output = child - .wait_with_output() - .map_err(|e| format!("failed to wait for z3: {e}"))?; - - let stdout = String::from_utf8_lossy(&output.stdout); - let stderr = String::from_utf8_lossy(&output.stderr); - - // Parse the last `check-sat` result. Z3 prints `sat`, `unsat`, or - // `unknown` on its own line. - for line in stdout.lines().rev() { - let trimmed = line.trim(); - match trimmed { - "unsat" => return Ok(Z3Result::Proved), - "sat" => return Ok(Z3Result::Counterexample { depth: 1 }), - "unknown" => { - return Ok(Z3Result::Unknown { - reason: "z3 returned unknown".to_string(), - }) - } - _ => continue, - } - } - - // If no sat/unsat line found, check stderr for errors. - if !stderr.is_empty() { - return Ok(Z3Result::Unknown { - reason: format!("z3 stderr: {}", stderr.lines().next().unwrap_or("?")), - }); - } - - Ok(Z3Result::Unknown { - reason: "no check-sat result in z3 output".to_string(), - }) -} - -/// Verify a candidate implementation against a set of invariant obligations -/// by shelling out to Z3 for each obligation. -/// -/// Returns the **worst** result across all obligations: if any obligation is -/// `Counterexample`, the candidate is `Counterexample` with the max depth; -/// if any is `Unknown` (and none is `Counterexample`), the candidate is -/// `Unknown`; only if all are `Proved` is the candidate `Proved`. -/// -/// Each obligation's `smt_query` is wrapped in `(check-sat)` automatically. -pub fn verify_candidate(obligations: &[InvariantObligation]) -> Z3Result { - if obligations.is_empty() { - return Z3Result::Proved; - } - - let mut worst = Z3Result::Proved; - let mut worst_depth: u32 = 0; - - for obl in obligations { - let script = format!("{}\n(check-sat)\n", obl.smt_query); - match run_z3(&script) { - Ok(res) => match res { - Z3Result::Proved => {} - Z3Result::Counterexample { depth } => { - if depth > worst_depth { - worst_depth = depth; - } - worst = Z3Result::Counterexample { depth }; - } - Z3Result::Unknown { ref reason } => { - if !matches!(worst, Z3Result::Counterexample { .. }) { - worst = Z3Result::Unknown { - reason: format!("{}: {}", obl.name, reason), - }; - } - } - }, - Err(e) => { - if !matches!(worst, Z3Result::Counterexample { .. }) { - worst = Z3Result::Unknown { - reason: format!("{}: z3 spawn error: {}", obl.name, e), - }; - } - } - } - } - - worst -} - -#[cfg(test)] -mod unit_tests { - use super::*; - - fn candidate(source: &str, result: Z3Result) -> ImplCandidate { - ImplCandidate { - id: 0, - rust_source: source.to_string(), - z3_result: result, - } - } - - #[test] - fn complexity_counts_non_comment_non_empty_lines() { - let src = "// a comment\nlet x = 1;\n\n// another\nlet y = 2;\n"; - assert_eq!(complexity(src), 2.0); - } - - #[test] - fn invariant_distance_zero_when_proved() { - let c = candidate("fn main() {}", Z3Result::Proved); - assert_eq!(invariant_distance(&c), 0.0); - } - - #[test] - fn invariant_distance_uses_depth_on_counterexample() { - let c = candidate("fn main() {}", Z3Result::Counterexample { depth: 5 }); - assert_eq!(invariant_distance(&c), 5.0); - } - - #[test] - fn invariant_distance_large_on_unknown() { - let c = candidate( - "fn main() {}", - Z3Result::Unknown { - reason: "test".to_string(), - }, - ); - assert_eq!(invariant_distance(&c), 1000.0); - } - - #[test] - fn byte_entropy_uniform_is_eight_bits() { - let bytes: Vec = (0u16..256).map(|b| b as u8).collect(); - let e = byte_entropy(&bytes); - assert!((e - 8.0).abs() < 1e-9, "got {e}"); - } - - #[test] - fn byte_entropy_zero_for_empty() { - assert_eq!(byte_entropy(&[]), 0.0); - } - - #[test] - fn action_dominated_by_invariant_distance() { - // A correct impl: complexity ~5, inv dist 0, entropy ~4 → action ~5.4 - let correct = candidate( - "fn main() {\n let x = 1;\n let y = 2;\n}\n", - Z3Result::Proved, - ); - // An incorrect impl: complexity ~5, inv dist 10, entropy ~4 → action ~1005.4 - let incorrect = candidate( - "fn main() {\n let x = 1;\n let y = 2;\n}\n", - Z3Result::Counterexample { depth: 10 }, - ); - let a_correct = action(&correct); - let a_incorrect = action(&incorrect); - assert!( - a_incorrect - a_correct > 100.0, - "invariant_distance should dominate: correct={a_correct}, incorrect={a_incorrect}" - ); - } - - // --- Z3 integration tests (v1.1 real wiring) --- - - #[test] - fn z3_proves_trivially_unsat() { - // No state can violate `false` → unsat → Proved. - let obl = InvariantObligation { - name: "trivial".to_string(), - smt_query: "(declare-const x Int) (assert false)".to_string(), - }; - let result = verify_candidate(&[obl]); - assert_eq!(result, Z3Result::Proved); - } - - #[test] - fn z3_finds_counterexample_when_sat() { - // There exists an Int > 10 → sat → Counterexample. - let obl = InvariantObligation { - name: "large_int_exists".to_string(), - smt_query: "(declare-const x Int) (assert (> x 10))".to_string(), - }; - let result = verify_candidate(&[obl]); - assert!(matches!(result, Z3Result::Counterexample { .. })); - } - - #[test] - fn z3_proves_toggle_turn_on_guard() { - // ToggleSwitch invariant: turn_on requires !is_on. - // Assert "exists a state where is_on=true AND turn_on succeeds (guard !is_on holds)" - // → this is `is_on=true AND !is_on` = `is_on=true AND is_on=false` = unsat. - // Proved means no state violates the guard. - let obl = InvariantObligation { - name: "turn_on_guard".to_string(), - smt_query: "(declare-const is_on Bool) (assert (and is_on (not is_on)))".to_string(), - }; - let result = verify_candidate(&[obl]); - assert_eq!(result, Z3Result::Proved); - } - - #[test] - fn z3_finds_toggle_guard_violation() { - // A broken implementation: turn_on has no guard, so is_on=true is - // a violating state. Assert "exists state where is_on=true AND - // turn_on is called" = sat → Counterexample. - let obl = InvariantObligation { - name: "broken_turn_on".to_string(), - smt_query: "(declare-const is_on Bool) (assert is_on)".to_string(), - }; - let result = verify_candidate(&[obl]); - assert!(matches!(result, Z3Result::Counterexample { .. })); - } - - #[test] - fn verify_takes_worst_result() { - // One Proved + one Counterexample → overall Counterexample. - let obls = vec![ - InvariantObligation { - name: "holds".to_string(), - smt_query: "(declare-const x Int) (assert false)".to_string(), - }, - InvariantObligation { - name: "broken".to_string(), - smt_query: "(declare-const x Int) (assert (> x 10))".to_string(), - }, - ]; - let result = verify_candidate(&obls); - assert!(matches!(result, Z3Result::Counterexample { .. })); - } -} \ No newline at end of file diff --git a/compiler/lagrangia/target/.rustc_info.json b/compiler/lagrangia/target/.rustc_info.json deleted file mode 100644 index 1278fa8..0000000 --- a/compiler/lagrangia/target/.rustc_info.json +++ /dev/null @@ -1 +0,0 @@ -{"rustc_fingerprint":17694148678572381065,"outputs":{"7971740275564407648":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/sscoble/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n","stderr":""},"17747080675513052775":{"success":true,"status":"","code":0,"stdout":"rustc 1.95.0 (59807616e 2026-04-14)\nbinary: rustc\ncommit-hash: 59807616e1fa2540724bfbac14d7976d7e4a3860\ncommit-date: 2026-04-14\nhost: x86_64-unknown-linux-gnu\nrelease: 1.95.0\nLLVM version: 22.1.2\n","stderr":""}},"successes":{}} \ No newline at end of file diff --git a/compiler/lagrangia/target/CACHEDIR.TAG b/compiler/lagrangia/target/CACHEDIR.TAG deleted file mode 100644 index 20d7c31..0000000 --- a/compiler/lagrangia/target/CACHEDIR.TAG +++ /dev/null @@ -1,3 +0,0 @@ -Signature: 8a477f597d28d172789f06886806bc55 -# This file is a cache directory tag created by cargo. -# For information about cache directory tags see https://bford.info/cachedir/ diff --git a/compiler/lagrangia/target/debug/.cargo-lock b/compiler/lagrangia/target/debug/.cargo-lock deleted file mode 100644 index e69de29..0000000 diff --git a/compiler/lagrangia/target/debug/.fingerprint/lagrangia-4ac5ede15d49454c/dep-test-lib-lagrangia b/compiler/lagrangia/target/debug/.fingerprint/lagrangia-4ac5ede15d49454c/dep-test-lib-lagrangia deleted file mode 100644 index 7514ff4..0000000 Binary files a/compiler/lagrangia/target/debug/.fingerprint/lagrangia-4ac5ede15d49454c/dep-test-lib-lagrangia and /dev/null differ diff --git a/compiler/lagrangia/target/debug/.fingerprint/lagrangia-4ac5ede15d49454c/invoked.timestamp b/compiler/lagrangia/target/debug/.fingerprint/lagrangia-4ac5ede15d49454c/invoked.timestamp deleted file mode 100644 index e00328d..0000000 --- a/compiler/lagrangia/target/debug/.fingerprint/lagrangia-4ac5ede15d49454c/invoked.timestamp +++ /dev/null @@ -1 +0,0 @@ -This file has an mtime of when this was started. \ No newline at end of file diff --git a/compiler/lagrangia/target/debug/.fingerprint/lagrangia-4ac5ede15d49454c/test-lib-lagrangia b/compiler/lagrangia/target/debug/.fingerprint/lagrangia-4ac5ede15d49454c/test-lib-lagrangia deleted file mode 100644 index 53f9358..0000000 --- a/compiler/lagrangia/target/debug/.fingerprint/lagrangia-4ac5ede15d49454c/test-lib-lagrangia +++ /dev/null @@ -1 +0,0 @@ -9e5b6b8388e83e02 \ No newline at end of file diff --git a/compiler/lagrangia/target/debug/.fingerprint/lagrangia-4ac5ede15d49454c/test-lib-lagrangia.json b/compiler/lagrangia/target/debug/.fingerprint/lagrangia-4ac5ede15d49454c/test-lib-lagrangia.json deleted file mode 100644 index 8926104..0000000 --- a/compiler/lagrangia/target/debug/.fingerprint/lagrangia-4ac5ede15d49454c/test-lib-lagrangia.json +++ /dev/null @@ -1 +0,0 @@ -{"rustc":8999539375451197318,"features":"[]","declared_features":"[]","target":6158130320494215290,"profile":1722584277633009122,"path":10763286916239946207,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/lagrangia-4ac5ede15d49454c/dep-test-lib-lagrangia","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0} \ No newline at end of file diff --git a/compiler/lagrangia/target/debug/.fingerprint/lagrangia-8f779a778ed86c6f/dep-lib-lagrangia b/compiler/lagrangia/target/debug/.fingerprint/lagrangia-8f779a778ed86c6f/dep-lib-lagrangia deleted file mode 100644 index 7514ff4..0000000 Binary files a/compiler/lagrangia/target/debug/.fingerprint/lagrangia-8f779a778ed86c6f/dep-lib-lagrangia and /dev/null differ diff --git a/compiler/lagrangia/target/debug/.fingerprint/lagrangia-8f779a778ed86c6f/invoked.timestamp b/compiler/lagrangia/target/debug/.fingerprint/lagrangia-8f779a778ed86c6f/invoked.timestamp deleted file mode 100644 index e00328d..0000000 --- a/compiler/lagrangia/target/debug/.fingerprint/lagrangia-8f779a778ed86c6f/invoked.timestamp +++ /dev/null @@ -1 +0,0 @@ -This file has an mtime of when this was started. \ No newline at end of file diff --git a/compiler/lagrangia/target/debug/.fingerprint/lagrangia-8f779a778ed86c6f/lib-lagrangia b/compiler/lagrangia/target/debug/.fingerprint/lagrangia-8f779a778ed86c6f/lib-lagrangia deleted file mode 100644 index cfdb816..0000000 --- a/compiler/lagrangia/target/debug/.fingerprint/lagrangia-8f779a778ed86c6f/lib-lagrangia +++ /dev/null @@ -1 +0,0 @@ -94465bfadc4cb201 \ No newline at end of file diff --git a/compiler/lagrangia/target/debug/.fingerprint/lagrangia-8f779a778ed86c6f/lib-lagrangia.json b/compiler/lagrangia/target/debug/.fingerprint/lagrangia-8f779a778ed86c6f/lib-lagrangia.json deleted file mode 100644 index a721c2a..0000000 --- a/compiler/lagrangia/target/debug/.fingerprint/lagrangia-8f779a778ed86c6f/lib-lagrangia.json +++ /dev/null @@ -1 +0,0 @@ -{"rustc":8999539375451197318,"features":"[]","declared_features":"[]","target":6158130320494215290,"profile":8731458305071235362,"path":10763286916239946207,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/lagrangia-8f779a778ed86c6f/dep-lib-lagrangia","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0} \ No newline at end of file diff --git a/compiler/lagrangia/target/debug/.fingerprint/lagrangia-bcf9fe144a78d857/dep-test-integration-test-toggle_switch b/compiler/lagrangia/target/debug/.fingerprint/lagrangia-bcf9fe144a78d857/dep-test-integration-test-toggle_switch deleted file mode 100644 index 7d6c1b2..0000000 Binary files a/compiler/lagrangia/target/debug/.fingerprint/lagrangia-bcf9fe144a78d857/dep-test-integration-test-toggle_switch and /dev/null differ diff --git a/compiler/lagrangia/target/debug/.fingerprint/lagrangia-bcf9fe144a78d857/invoked.timestamp b/compiler/lagrangia/target/debug/.fingerprint/lagrangia-bcf9fe144a78d857/invoked.timestamp deleted file mode 100644 index e00328d..0000000 --- a/compiler/lagrangia/target/debug/.fingerprint/lagrangia-bcf9fe144a78d857/invoked.timestamp +++ /dev/null @@ -1 +0,0 @@ -This file has an mtime of when this was started. \ No newline at end of file diff --git a/compiler/lagrangia/target/debug/.fingerprint/lagrangia-bcf9fe144a78d857/test-integration-test-toggle_switch b/compiler/lagrangia/target/debug/.fingerprint/lagrangia-bcf9fe144a78d857/test-integration-test-toggle_switch deleted file mode 100644 index e503b90..0000000 --- a/compiler/lagrangia/target/debug/.fingerprint/lagrangia-bcf9fe144a78d857/test-integration-test-toggle_switch +++ /dev/null @@ -1 +0,0 @@ -c7331d31e53a6e4b \ No newline at end of file diff --git a/compiler/lagrangia/target/debug/.fingerprint/lagrangia-bcf9fe144a78d857/test-integration-test-toggle_switch.json b/compiler/lagrangia/target/debug/.fingerprint/lagrangia-bcf9fe144a78d857/test-integration-test-toggle_switch.json deleted file mode 100644 index 2e2d534..0000000 --- a/compiler/lagrangia/target/debug/.fingerprint/lagrangia-bcf9fe144a78d857/test-integration-test-toggle_switch.json +++ /dev/null @@ -1 +0,0 @@ -{"rustc":8999539375451197318,"features":"[]","declared_features":"[]","target":5508210232129248235,"profile":1722584277633009122,"path":11149814207312358890,"deps":[[1962247874961037463,"lagrangia",false,122244651869226644]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/lagrangia-bcf9fe144a78d857/dep-test-integration-test-toggle_switch","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0} \ No newline at end of file diff --git a/compiler/lagrangia/target/debug/deps/lagrangia-4ac5ede15d49454c.d b/compiler/lagrangia/target/debug/deps/lagrangia-4ac5ede15d49454c.d deleted file mode 100644 index 64eb873..0000000 --- a/compiler/lagrangia/target/debug/deps/lagrangia-4ac5ede15d49454c.d +++ /dev/null @@ -1,6 +0,0 @@ -/home/sscoble/speckl/compiler/lagrangia/target/debug/deps/lagrangia-4ac5ede15d49454c.d: src/lib.rs src/score.rs - -/home/sscoble/speckl/compiler/lagrangia/target/debug/deps/lagrangia-4ac5ede15d49454c: src/lib.rs src/score.rs - -src/lib.rs: -src/score.rs: diff --git a/compiler/lagrangia/target/debug/deps/lagrangia-8f779a778ed86c6f.d b/compiler/lagrangia/target/debug/deps/lagrangia-8f779a778ed86c6f.d deleted file mode 100644 index e18c2b4..0000000 --- a/compiler/lagrangia/target/debug/deps/lagrangia-8f779a778ed86c6f.d +++ /dev/null @@ -1,8 +0,0 @@ -/home/sscoble/speckl/compiler/lagrangia/target/debug/deps/lagrangia-8f779a778ed86c6f.d: src/lib.rs src/score.rs - -/home/sscoble/speckl/compiler/lagrangia/target/debug/deps/liblagrangia-8f779a778ed86c6f.rlib: src/lib.rs src/score.rs - -/home/sscoble/speckl/compiler/lagrangia/target/debug/deps/liblagrangia-8f779a778ed86c6f.rmeta: src/lib.rs src/score.rs - -src/lib.rs: -src/score.rs: diff --git a/compiler/lagrangia/target/debug/deps/liblagrangia-8f779a778ed86c6f.rlib b/compiler/lagrangia/target/debug/deps/liblagrangia-8f779a778ed86c6f.rlib deleted file mode 100644 index 1f9e4fb..0000000 Binary files a/compiler/lagrangia/target/debug/deps/liblagrangia-8f779a778ed86c6f.rlib and /dev/null differ diff --git a/compiler/lagrangia/target/debug/deps/liblagrangia-8f779a778ed86c6f.rmeta b/compiler/lagrangia/target/debug/deps/liblagrangia-8f779a778ed86c6f.rmeta deleted file mode 100644 index 6b5beab..0000000 Binary files a/compiler/lagrangia/target/debug/deps/liblagrangia-8f779a778ed86c6f.rmeta and /dev/null differ diff --git a/compiler/lagrangia/target/debug/deps/toggle_switch-bcf9fe144a78d857.d b/compiler/lagrangia/target/debug/deps/toggle_switch-bcf9fe144a78d857.d deleted file mode 100644 index 93ea3e7..0000000 --- a/compiler/lagrangia/target/debug/deps/toggle_switch-bcf9fe144a78d857.d +++ /dev/null @@ -1,5 +0,0 @@ -/home/sscoble/speckl/compiler/lagrangia/target/debug/deps/toggle_switch-bcf9fe144a78d857.d: tests/toggle_switch.rs - -/home/sscoble/speckl/compiler/lagrangia/target/debug/deps/toggle_switch-bcf9fe144a78d857: tests/toggle_switch.rs - -tests/toggle_switch.rs: diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/05gqc3ksttausp6hh1cqwej2l.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/05gqc3ksttausp6hh1cqwej2l.o deleted file mode 100644 index 6e78728..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/05gqc3ksttausp6hh1cqwej2l.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/0o00gz2d1xj1ohateh0xfdptp.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/0o00gz2d1xj1ohateh0xfdptp.o deleted file mode 100644 index b794a1e..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/0o00gz2d1xj1ohateh0xfdptp.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/0zvc2vvapvwtgriaw02ko9yjz.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/0zvc2vvapvwtgriaw02ko9yjz.o deleted file mode 100644 index 7b8904e..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/0zvc2vvapvwtgriaw02ko9yjz.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/20mczzj5f9zx3jhska3yksehx.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/20mczzj5f9zx3jhska3yksehx.o deleted file mode 100644 index 523e573..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/20mczzj5f9zx3jhska3yksehx.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/3a2v6gftzc9zmyx3bq5p09hqh.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/3a2v6gftzc9zmyx3bq5p09hqh.o deleted file mode 100644 index d342487..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/3a2v6gftzc9zmyx3bq5p09hqh.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/3lkpxxc4w9ee79y6d9bf4gf9c.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/3lkpxxc4w9ee79y6d9bf4gf9c.o deleted file mode 100644 index 4e9c550..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/3lkpxxc4w9ee79y6d9bf4gf9c.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/3muehpx8z9s53bm9otsn4hoyd.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/3muehpx8z9s53bm9otsn4hoyd.o deleted file mode 100644 index 13d6f0c..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/3muehpx8z9s53bm9otsn4hoyd.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/3r2kkblta2szx9pga8nbil8mk.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/3r2kkblta2szx9pga8nbil8mk.o deleted file mode 100644 index 1e2bde8..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/3r2kkblta2szx9pga8nbil8mk.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/4wnv39g4jm2vujkqrbgi329qy.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/4wnv39g4jm2vujkqrbgi329qy.o deleted file mode 100644 index 4a7ff76..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/4wnv39g4jm2vujkqrbgi329qy.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/517et3yl0oz9ynyq4g6ue3ph1.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/517et3yl0oz9ynyq4g6ue3ph1.o deleted file mode 100644 index 69549b8..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/517et3yl0oz9ynyq4g6ue3ph1.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/6ie8d5j8haz67afgr8hmk9f8n.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/6ie8d5j8haz67afgr8hmk9f8n.o deleted file mode 100644 index f274dec..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/6ie8d5j8haz67afgr8hmk9f8n.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/6qolmt1k0cv869ley3pxc7m26.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/6qolmt1k0cv869ley3pxc7m26.o deleted file mode 100644 index 0bea106..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/6qolmt1k0cv869ley3pxc7m26.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/6ueggmk7lj9a6onbysxvlf8yi.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/6ueggmk7lj9a6onbysxvlf8yi.o deleted file mode 100644 index 475c5d2..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/6ueggmk7lj9a6onbysxvlf8yi.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/8dgoqv9whwovwitfbukdlb9wy.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/8dgoqv9whwovwitfbukdlb9wy.o deleted file mode 100644 index 5cd17c0..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/8dgoqv9whwovwitfbukdlb9wy.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/8fzuaqqjjnyjz31v43htfbbvh.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/8fzuaqqjjnyjz31v43htfbbvh.o deleted file mode 100644 index aaf8a5c..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/8fzuaqqjjnyjz31v43htfbbvh.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/8r7nf24rvk659vxd9c2gog231.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/8r7nf24rvk659vxd9c2gog231.o deleted file mode 100644 index 0f7208a..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/8r7nf24rvk659vxd9c2gog231.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/91zisukw4ss06nbs4yi7ewqzh.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/91zisukw4ss06nbs4yi7ewqzh.o deleted file mode 100644 index a2d80fc..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/91zisukw4ss06nbs4yi7ewqzh.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/949aalblirj6e65p0q8heo2v3.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/949aalblirj6e65p0q8heo2v3.o deleted file mode 100644 index 615c1c2..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/949aalblirj6e65p0q8heo2v3.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/9fmd0bszlwmom1qdfnhprz55d.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/9fmd0bszlwmom1qdfnhprz55d.o deleted file mode 100644 index e66dd66..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/9fmd0bszlwmom1qdfnhprz55d.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/9qpaho13k8vs9wzchhzbpcx5e.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/9qpaho13k8vs9wzchhzbpcx5e.o deleted file mode 100644 index 09672c3..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/9qpaho13k8vs9wzchhzbpcx5e.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/9xjct41dir4p6b3y5iznyokza.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/9xjct41dir4p6b3y5iznyokza.o deleted file mode 100644 index 7da7ac1..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/9xjct41dir4p6b3y5iznyokza.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/9z8krl01o6yu5szrvyzf0dzk8.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/9z8krl01o6yu5szrvyzf0dzk8.o deleted file mode 100644 index e3b8653..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/9z8krl01o6yu5szrvyzf0dzk8.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/a35bl8y8d56pckpnjwewitkdt.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/a35bl8y8d56pckpnjwewitkdt.o deleted file mode 100644 index ea41cfc..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/a35bl8y8d56pckpnjwewitkdt.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/adki5m5e39y66cgnvwrkl7mse.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/adki5m5e39y66cgnvwrkl7mse.o deleted file mode 100644 index dc68947..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/adki5m5e39y66cgnvwrkl7mse.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/aegtda9bn9musrjzt24pcgjlh.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/aegtda9bn9musrjzt24pcgjlh.o deleted file mode 100644 index 5054520..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/aegtda9bn9musrjzt24pcgjlh.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/ardsowkeuhea9uwqtthkvzqi0.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/ardsowkeuhea9uwqtthkvzqi0.o deleted file mode 100644 index 1d7fc3a..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/ardsowkeuhea9uwqtthkvzqi0.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/b5npgknrhjjv2huls1a4f02wy.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/b5npgknrhjjv2huls1a4f02wy.o deleted file mode 100644 index 23d0765..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/b5npgknrhjjv2huls1a4f02wy.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/b6zfglx7lw8od2vc7s3pglijl.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/b6zfglx7lw8od2vc7s3pglijl.o deleted file mode 100644 index 72149c6..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/b6zfglx7lw8od2vc7s3pglijl.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/bmlvc3xk0sc2i3os0wdqq8nyc.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/bmlvc3xk0sc2i3os0wdqq8nyc.o deleted file mode 100644 index cec1995..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/bmlvc3xk0sc2i3os0wdqq8nyc.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/by55saudpbjrytf7vjt949ozz.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/by55saudpbjrytf7vjt949ozz.o deleted file mode 100644 index 548e45b..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/by55saudpbjrytf7vjt949ozz.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/cdaat2m2ls7gmn1qbpgs3ejfq.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/cdaat2m2ls7gmn1qbpgs3ejfq.o deleted file mode 100644 index 6296b2c..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/cdaat2m2ls7gmn1qbpgs3ejfq.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/dep-graph.bin b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/dep-graph.bin deleted file mode 100644 index 2cca80d..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/dep-graph.bin and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/dlln0k2i40beeahkedsl78do6.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/dlln0k2i40beeahkedsl78do6.o deleted file mode 100644 index 03a0211..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/dlln0k2i40beeahkedsl78do6.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/dlox53hc4jnigrwienw6o40c6.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/dlox53hc4jnigrwienw6o40c6.o deleted file mode 100644 index f7428b5..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/dlox53hc4jnigrwienw6o40c6.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/ehw245k7vitnk5rvzq4fdnr3l.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/ehw245k7vitnk5rvzq4fdnr3l.o deleted file mode 100644 index 56960f8..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/ehw245k7vitnk5rvzq4fdnr3l.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/eluulyyoqy81os7yda7nszs0t.o b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/eluulyyoqy81os7yda7nszs0t.o deleted file mode 100644 index 5e7f114..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/eluulyyoqy81os7yda7nszs0t.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/metadata.rmeta b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/metadata.rmeta deleted file mode 100644 index 6b5beab..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/metadata.rmeta and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/query-cache.bin b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/query-cache.bin deleted file mode 100644 index 21f010d..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/query-cache.bin and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/work-products.bin b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/work-products.bin deleted file mode 100644 index 2a8d827..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk-68uoxn1bs3d1qaqy3ge250nkj/work-products.bin and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk.lock b/compiler/lagrangia/target/debug/incremental/lagrangia-2o69sk1z07gfs/s-hkj3egt5vl-0fmtigk.lock deleted file mode 100644 index e69de29..0000000 diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/00qj8pl7pzqeqggmy97xmpg09.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/00qj8pl7pzqeqggmy97xmpg09.o deleted file mode 100644 index cbb6ff6..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/00qj8pl7pzqeqggmy97xmpg09.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/01kx83zgn4bnev949b2mfzjjs.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/01kx83zgn4bnev949b2mfzjjs.o deleted file mode 100644 index a9f1c4b..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/01kx83zgn4bnev949b2mfzjjs.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/06x3jm1h92fg7fudd9u76792d.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/06x3jm1h92fg7fudd9u76792d.o deleted file mode 100644 index 03d4530..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/06x3jm1h92fg7fudd9u76792d.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/0ke2u852byxn3c5n4mkslu915.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/0ke2u852byxn3c5n4mkslu915.o deleted file mode 100644 index f143733..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/0ke2u852byxn3c5n4mkslu915.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/0mp4ezjgctgv2hd1jx6z1nxla.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/0mp4ezjgctgv2hd1jx6z1nxla.o deleted file mode 100644 index 0d084df..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/0mp4ezjgctgv2hd1jx6z1nxla.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/0tu7s38o6zegvbxthx0pp2db7.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/0tu7s38o6zegvbxthx0pp2db7.o deleted file mode 100644 index 9ce9f83..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/0tu7s38o6zegvbxthx0pp2db7.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/16whdbjijasbbah18r9qtbyvs.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/16whdbjijasbbah18r9qtbyvs.o deleted file mode 100644 index 0eab00b..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/16whdbjijasbbah18r9qtbyvs.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/1ds8zbd1mz18hpggwxl1sf1hg.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/1ds8zbd1mz18hpggwxl1sf1hg.o deleted file mode 100644 index 16d3451..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/1ds8zbd1mz18hpggwxl1sf1hg.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/1j2dhbk57el9hkn8mu573myo8.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/1j2dhbk57el9hkn8mu573myo8.o deleted file mode 100644 index ef11276..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/1j2dhbk57el9hkn8mu573myo8.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/1n1hqha0gqcuoffcsrts8648c.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/1n1hqha0gqcuoffcsrts8648c.o deleted file mode 100644 index 01fa72e..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/1n1hqha0gqcuoffcsrts8648c.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/2toip0waihh2oy9x43duxtyxy.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/2toip0waihh2oy9x43duxtyxy.o deleted file mode 100644 index ea1be88..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/2toip0waihh2oy9x43duxtyxy.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/3gy10k0lgdtoay6ahplm251fg.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/3gy10k0lgdtoay6ahplm251fg.o deleted file mode 100644 index 549564f..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/3gy10k0lgdtoay6ahplm251fg.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/3qxvzibl4bz35fdivnjj5fhmb.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/3qxvzibl4bz35fdivnjj5fhmb.o deleted file mode 100644 index 8cd577e..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/3qxvzibl4bz35fdivnjj5fhmb.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/42dvgf1ckshiutf9jyd58p75i.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/42dvgf1ckshiutf9jyd58p75i.o deleted file mode 100644 index 5da129c..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/42dvgf1ckshiutf9jyd58p75i.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/459be3d0i80yhe8xsirubhwpu.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/459be3d0i80yhe8xsirubhwpu.o deleted file mode 100644 index 53ec99b..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/459be3d0i80yhe8xsirubhwpu.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/4n6d9mtz3ehvtq0uayu3gf0jw.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/4n6d9mtz3ehvtq0uayu3gf0jw.o deleted file mode 100644 index be1db11..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/4n6d9mtz3ehvtq0uayu3gf0jw.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/4ruls550v7xtl302o405o2u8b.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/4ruls550v7xtl302o405o2u8b.o deleted file mode 100644 index dbef7cf..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/4ruls550v7xtl302o405o2u8b.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/4wnk1ejk4gvrn5reof79kfyqm.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/4wnk1ejk4gvrn5reof79kfyqm.o deleted file mode 100644 index fb9abce..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/4wnk1ejk4gvrn5reof79kfyqm.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/61e5xrx50copvkm881l48apxd.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/61e5xrx50copvkm881l48apxd.o deleted file mode 100644 index 9925fe2..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/61e5xrx50copvkm881l48apxd.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/6oyu56a1bpn3ly2ibms3tudyr.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/6oyu56a1bpn3ly2ibms3tudyr.o deleted file mode 100644 index 265fd11..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/6oyu56a1bpn3ly2ibms3tudyr.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/6ynrzhxfb4octg2o56ndbficf.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/6ynrzhxfb4octg2o56ndbficf.o deleted file mode 100644 index 0bd0c0f..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/6ynrzhxfb4octg2o56ndbficf.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/7fehiaw4cpox6ellwfl8p535i.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/7fehiaw4cpox6ellwfl8p535i.o deleted file mode 100644 index eab1c1f..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/7fehiaw4cpox6ellwfl8p535i.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/7fmfyc5q4bjzb2xhftdfe6jil.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/7fmfyc5q4bjzb2xhftdfe6jil.o deleted file mode 100644 index 5160297..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/7fmfyc5q4bjzb2xhftdfe6jil.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/7jrecyohfd0ec1ygqt64n77fk.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/7jrecyohfd0ec1ygqt64n77fk.o deleted file mode 100644 index 2a8e246..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/7jrecyohfd0ec1ygqt64n77fk.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/7z9woxzifo7jvpivogjelcsff.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/7z9woxzifo7jvpivogjelcsff.o deleted file mode 100644 index c573f0e..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/7z9woxzifo7jvpivogjelcsff.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/88bodhnylt0nvxatokbyqpn5b.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/88bodhnylt0nvxatokbyqpn5b.o deleted file mode 100644 index 23c69c7..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/88bodhnylt0nvxatokbyqpn5b.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/8h0g172394b98ispaawijxerd.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/8h0g172394b98ispaawijxerd.o deleted file mode 100644 index 632d730..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/8h0g172394b98ispaawijxerd.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/8v6zxuttovlk1hn2o20jt4bn4.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/8v6zxuttovlk1hn2o20jt4bn4.o deleted file mode 100644 index 420504c..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/8v6zxuttovlk1hn2o20jt4bn4.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/96dbrr1qhdthcnovsn50tt6g2.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/96dbrr1qhdthcnovsn50tt6g2.o deleted file mode 100644 index 2290f14..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/96dbrr1qhdthcnovsn50tt6g2.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/9h98hchfr4vxbav2baaeenqqm.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/9h98hchfr4vxbav2baaeenqqm.o deleted file mode 100644 index 11e98ad..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/9h98hchfr4vxbav2baaeenqqm.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/9jugu3wgbmb9os62v3xne7tlf.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/9jugu3wgbmb9os62v3xne7tlf.o deleted file mode 100644 index c3bcef9..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/9jugu3wgbmb9os62v3xne7tlf.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/9tqlm64pygurp8ldf0aqdmldp.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/9tqlm64pygurp8ldf0aqdmldp.o deleted file mode 100644 index 0eac390..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/9tqlm64pygurp8ldf0aqdmldp.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/a1klllrgvsmwpdv6vki2cqm9a.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/a1klllrgvsmwpdv6vki2cqm9a.o deleted file mode 100644 index 137cce7..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/a1klllrgvsmwpdv6vki2cqm9a.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/acmi3e5krpp0xgq7wgzcizwb7.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/acmi3e5krpp0xgq7wgzcizwb7.o deleted file mode 100644 index 7602d14..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/acmi3e5krpp0xgq7wgzcizwb7.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/ai2kum60ugzadkwxhah3u64k0.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/ai2kum60ugzadkwxhah3u64k0.o deleted file mode 100644 index 0308f4f..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/ai2kum60ugzadkwxhah3u64k0.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/augxccd0u6upi4atikgpdymay.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/augxccd0u6upi4atikgpdymay.o deleted file mode 100644 index 627147c..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/augxccd0u6upi4atikgpdymay.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/av00b5z9ejuw9jznjvcc01brd.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/av00b5z9ejuw9jznjvcc01brd.o deleted file mode 100644 index 974c3b3..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/av00b5z9ejuw9jznjvcc01brd.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/axnw9gfrqdzj83nkv9mac0bcz.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/axnw9gfrqdzj83nkv9mac0bcz.o deleted file mode 100644 index cb2a04d..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/axnw9gfrqdzj83nkv9mac0bcz.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/bh6kv36jelsnt18b5rpap16tw.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/bh6kv36jelsnt18b5rpap16tw.o deleted file mode 100644 index fbf0906..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/bh6kv36jelsnt18b5rpap16tw.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/br4b8ou7d4n02pzuwtbeogju7.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/br4b8ou7d4n02pzuwtbeogju7.o deleted file mode 100644 index e696a84..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/br4b8ou7d4n02pzuwtbeogju7.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/brug5dsg0ssn1sz9kz3ay8jxl.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/brug5dsg0ssn1sz9kz3ay8jxl.o deleted file mode 100644 index d7128ea..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/brug5dsg0ssn1sz9kz3ay8jxl.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/c09adj784jolvruypplfgjoz6.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/c09adj784jolvruypplfgjoz6.o deleted file mode 100644 index b3636fd..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/c09adj784jolvruypplfgjoz6.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/c0octx8cjxaobq5ds6nhoityc.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/c0octx8cjxaobq5ds6nhoityc.o deleted file mode 100644 index dadc930..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/c0octx8cjxaobq5ds6nhoityc.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/c6j8754uxrpxg2r2zserqtkjp.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/c6j8754uxrpxg2r2zserqtkjp.o deleted file mode 100644 index 1694f4f..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/c6j8754uxrpxg2r2zserqtkjp.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/cb8cjtq14chhpen32oyx0tgm8.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/cb8cjtq14chhpen32oyx0tgm8.o deleted file mode 100644 index 123ef4e..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/cb8cjtq14chhpen32oyx0tgm8.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/cgeq73px9veliati3fyab9piu.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/cgeq73px9veliati3fyab9piu.o deleted file mode 100644 index a1fe863..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/cgeq73px9veliati3fyab9piu.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/cr2khk6oqar3gksoairpwm3ot.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/cr2khk6oqar3gksoairpwm3ot.o deleted file mode 100644 index 9687c9d..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/cr2khk6oqar3gksoairpwm3ot.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/dlaaze5qeacb74he8yhzbkahr.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/dlaaze5qeacb74he8yhzbkahr.o deleted file mode 100644 index d8e35b3..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/dlaaze5qeacb74he8yhzbkahr.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/dvfgjikh9yupkcfdiwt5qtkbi.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/dvfgjikh9yupkcfdiwt5qtkbi.o deleted file mode 100644 index 1068589..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/dvfgjikh9yupkcfdiwt5qtkbi.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/dwumt1ra095ww2r2gl2obr5h2.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/dwumt1ra095ww2r2gl2obr5h2.o deleted file mode 100644 index 24f988f..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/dwumt1ra095ww2r2gl2obr5h2.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/dxsnlfp8r2km4sv5azvjsp7vo.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/dxsnlfp8r2km4sv5azvjsp7vo.o deleted file mode 100644 index 5848740..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/dxsnlfp8r2km4sv5azvjsp7vo.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/e3j6itrelyowffp1oe09kwnoc.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/e3j6itrelyowffp1oe09kwnoc.o deleted file mode 100644 index 7e3facf..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/e3j6itrelyowffp1oe09kwnoc.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/e4i6prwicppqppbppx1xktsrf.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/e4i6prwicppqppbppx1xktsrf.o deleted file mode 100644 index 3a2c78a..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/e4i6prwicppqppbppx1xktsrf.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/ectxp0r3grbkl86izcbiornk1.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/ectxp0r3grbkl86izcbiornk1.o deleted file mode 100644 index abb75b9..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/ectxp0r3grbkl86izcbiornk1.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/ekfsjx4vg4oky2rnqpjyktyi9.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/ekfsjx4vg4oky2rnqpjyktyi9.o deleted file mode 100644 index 01793b0..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/ekfsjx4vg4oky2rnqpjyktyi9.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/eqb1khb9go52frmd2ophxtj0f.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/eqb1khb9go52frmd2ophxtj0f.o deleted file mode 100644 index 55b033d..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/eqb1khb9go52frmd2ophxtj0f.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/esj1nnhgbh5dwawicq4c5agaw.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/esj1nnhgbh5dwawicq4c5agaw.o deleted file mode 100644 index 14fcf99..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/esj1nnhgbh5dwawicq4c5agaw.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/exl5f602cug4b35i6yn4gv8fj.o b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/exl5f602cug4b35i6yn4gv8fj.o deleted file mode 100644 index 25f599b..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/exl5f602cug4b35i6yn4gv8fj.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/query-cache.bin b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/query-cache.bin deleted file mode 100644 index 3967e42..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/query-cache.bin and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/work-products.bin b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/work-products.bin deleted file mode 100644 index cbd1df8..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01-1gxm3acgmqf66lcirgu0771qn/work-products.bin and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01.lock b/compiler/lagrangia/target/debug/incremental/lagrangia-3opwukv873epj/s-hkj3eo2wsw-1ipna01.lock deleted file mode 100644 index e69de29..0000000 diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/093i22t7j6chza7n0yb6gdomv.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/093i22t7j6chza7n0yb6gdomv.o deleted file mode 100644 index 845d6f9..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/093i22t7j6chza7n0yb6gdomv.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/0c6ftqwvo12hegsrh312c2f04.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/0c6ftqwvo12hegsrh312c2f04.o deleted file mode 100644 index 14b18ae..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/0c6ftqwvo12hegsrh312c2f04.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/0ff9300z8kf1jaww8iv83v28y.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/0ff9300z8kf1jaww8iv83v28y.o deleted file mode 100644 index 8163df3..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/0ff9300z8kf1jaww8iv83v28y.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/0ima9j81dhe3m8uktfu1sz0ef.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/0ima9j81dhe3m8uktfu1sz0ef.o deleted file mode 100644 index 92ad533..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/0ima9j81dhe3m8uktfu1sz0ef.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/106bzcbxh3hp2oh5n0fc4242a.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/106bzcbxh3hp2oh5n0fc4242a.o deleted file mode 100644 index a49ab2d..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/106bzcbxh3hp2oh5n0fc4242a.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/1dpe6o90ishuwvdyoplni7l39.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/1dpe6o90ishuwvdyoplni7l39.o deleted file mode 100644 index ad18827..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/1dpe6o90ishuwvdyoplni7l39.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/1fphlmhj9zw28o3yd2qghhp2f.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/1fphlmhj9zw28o3yd2qghhp2f.o deleted file mode 100644 index 28c754c..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/1fphlmhj9zw28o3yd2qghhp2f.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/1jc5a4nkne4uonvjz45qmv0de.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/1jc5a4nkne4uonvjz45qmv0de.o deleted file mode 100644 index c6e9fa3..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/1jc5a4nkne4uonvjz45qmv0de.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/1motfc5y33bek50hr1nxy4mr6.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/1motfc5y33bek50hr1nxy4mr6.o deleted file mode 100644 index 189c7b4..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/1motfc5y33bek50hr1nxy4mr6.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/27jw0lripz3or2romh2595ghn.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/27jw0lripz3or2romh2595ghn.o deleted file mode 100644 index 3dc5bd4..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/27jw0lripz3or2romh2595ghn.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/2b2d5gg5qy0120hhp6wauz7zt.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/2b2d5gg5qy0120hhp6wauz7zt.o deleted file mode 100644 index 488c7e5..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/2b2d5gg5qy0120hhp6wauz7zt.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/2cek43t6ppeibkiug94kc1wq1.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/2cek43t6ppeibkiug94kc1wq1.o deleted file mode 100644 index 709cdb1..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/2cek43t6ppeibkiug94kc1wq1.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/2hzk3t5tt8lnky64t3uuy9la1.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/2hzk3t5tt8lnky64t3uuy9la1.o deleted file mode 100644 index af9ee9f..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/2hzk3t5tt8lnky64t3uuy9la1.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/2wponp1tubi2s6xo7zt3frfwm.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/2wponp1tubi2s6xo7zt3frfwm.o deleted file mode 100644 index d2a407d..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/2wponp1tubi2s6xo7zt3frfwm.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/38tmdto0yzo0h75xzpmj6ajss.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/38tmdto0yzo0h75xzpmj6ajss.o deleted file mode 100644 index d6c1b80..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/38tmdto0yzo0h75xzpmj6ajss.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/3isdi2gy99mez0db28h9met27.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/3isdi2gy99mez0db28h9met27.o deleted file mode 100644 index a9d58c1..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/3isdi2gy99mez0db28h9met27.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/3lfj6v3j3menmg33cq1ztm3x5.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/3lfj6v3j3menmg33cq1ztm3x5.o deleted file mode 100644 index 19be235..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/3lfj6v3j3menmg33cq1ztm3x5.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/3q5iik9o69w0ri8nv4fk6di3q.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/3q5iik9o69w0ri8nv4fk6di3q.o deleted file mode 100644 index f32a2fd..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/3q5iik9o69w0ri8nv4fk6di3q.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/3u38xjw1pzhc6sju5pqgcyt4i.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/3u38xjw1pzhc6sju5pqgcyt4i.o deleted file mode 100644 index c342ef0..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/3u38xjw1pzhc6sju5pqgcyt4i.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/4a4ymr0hg7fw6vpe8x2fdgezo.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/4a4ymr0hg7fw6vpe8x2fdgezo.o deleted file mode 100644 index a63a97e..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/4a4ymr0hg7fw6vpe8x2fdgezo.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/4qt995tr8nw92mh8e8ol8j0fs.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/4qt995tr8nw92mh8e8ol8j0fs.o deleted file mode 100644 index 1afa4d9..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/4qt995tr8nw92mh8e8ol8j0fs.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/4wqhaopomghr9oindknikc74c.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/4wqhaopomghr9oindknikc74c.o deleted file mode 100644 index 7d7d9db..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/4wqhaopomghr9oindknikc74c.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/5eqqf17gf89cj643hzu64rx0p.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/5eqqf17gf89cj643hzu64rx0p.o deleted file mode 100644 index 552c9b4..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/5eqqf17gf89cj643hzu64rx0p.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/5f545jdkzvt4qamw2y8epes2f.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/5f545jdkzvt4qamw2y8epes2f.o deleted file mode 100644 index a0fdbac..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/5f545jdkzvt4qamw2y8epes2f.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/5o7h28es8rpb5zyy8cpik01t3.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/5o7h28es8rpb5zyy8cpik01t3.o deleted file mode 100644 index 6034ac5..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/5o7h28es8rpb5zyy8cpik01t3.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/5u4k48so4vwkehrt1s77dj02y.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/5u4k48so4vwkehrt1s77dj02y.o deleted file mode 100644 index 7a721b5..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/5u4k48so4vwkehrt1s77dj02y.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/62cn074njxrftspmbdy798q4q.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/62cn074njxrftspmbdy798q4q.o deleted file mode 100644 index 3a763ba..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/62cn074njxrftspmbdy798q4q.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/6cfo5k343drn74pj5rf7tre1v.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/6cfo5k343drn74pj5rf7tre1v.o deleted file mode 100644 index 1971c2f..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/6cfo5k343drn74pj5rf7tre1v.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/6mcgsb3e92y44djqcm4wqsnqw.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/6mcgsb3e92y44djqcm4wqsnqw.o deleted file mode 100644 index a593d65..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/6mcgsb3e92y44djqcm4wqsnqw.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/6rtas7g99rs5qo7vtqfwzm6ph.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/6rtas7g99rs5qo7vtqfwzm6ph.o deleted file mode 100644 index 59e5533..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/6rtas7g99rs5qo7vtqfwzm6ph.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/70gmgnn00q8wi3hl0ki03suxa.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/70gmgnn00q8wi3hl0ki03suxa.o deleted file mode 100644 index 8c5ac1b..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/70gmgnn00q8wi3hl0ki03suxa.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/70zeep24vnnc34v8gew0mxv1c.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/70zeep24vnnc34v8gew0mxv1c.o deleted file mode 100644 index 997455a..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/70zeep24vnnc34v8gew0mxv1c.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/7gt2xdk1lcia07fkkp94dcx2z.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/7gt2xdk1lcia07fkkp94dcx2z.o deleted file mode 100644 index 57b2a18..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/7gt2xdk1lcia07fkkp94dcx2z.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/7pk6w3nbvkp8nj8gcejy7zoet.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/7pk6w3nbvkp8nj8gcejy7zoet.o deleted file mode 100644 index 10872e2..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/7pk6w3nbvkp8nj8gcejy7zoet.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/86fw63sniz455hu6ouxv10u99.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/86fw63sniz455hu6ouxv10u99.o deleted file mode 100644 index 1cbb4db..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/86fw63sniz455hu6ouxv10u99.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/88v63hneddnycsnw1snt0kpjy.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/88v63hneddnycsnw1snt0kpjy.o deleted file mode 100644 index 9d088ff..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/88v63hneddnycsnw1snt0kpjy.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/8ec5j7acu004c6g7y3k5kuapu.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/8ec5j7acu004c6g7y3k5kuapu.o deleted file mode 100644 index a99b657..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/8ec5j7acu004c6g7y3k5kuapu.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/8gttdvnr7iltww5dyojjz2jdw.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/8gttdvnr7iltww5dyojjz2jdw.o deleted file mode 100644 index d454729..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/8gttdvnr7iltww5dyojjz2jdw.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/8hokc6jcn435n4ljgan9kxrtg.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/8hokc6jcn435n4ljgan9kxrtg.o deleted file mode 100644 index 148c7a5..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/8hokc6jcn435n4ljgan9kxrtg.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/8uufd90rd99ccaqq11hsk5v3g.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/8uufd90rd99ccaqq11hsk5v3g.o deleted file mode 100644 index 813a686..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/8uufd90rd99ccaqq11hsk5v3g.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/97fjj56573gxpqsecm01j0k5c.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/97fjj56573gxpqsecm01j0k5c.o deleted file mode 100644 index e143c19..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/97fjj56573gxpqsecm01j0k5c.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/9e6iv2xbvndk5kjylabd84g7b.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/9e6iv2xbvndk5kjylabd84g7b.o deleted file mode 100644 index 315010d..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/9e6iv2xbvndk5kjylabd84g7b.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/9v3rg4nerazhjlxp0py254kgd.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/9v3rg4nerazhjlxp0py254kgd.o deleted file mode 100644 index 595d651..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/9v3rg4nerazhjlxp0py254kgd.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/a3jwjqjsfpmgrx27owjnxaser.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/a3jwjqjsfpmgrx27owjnxaser.o deleted file mode 100644 index a844703..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/a3jwjqjsfpmgrx27owjnxaser.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/ac97mp1jorwfg6qx980r2vfbr.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/ac97mp1jorwfg6qx980r2vfbr.o deleted file mode 100644 index 9990f3f..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/ac97mp1jorwfg6qx980r2vfbr.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/alufv43hh7wb8gxkv6m8n144l.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/alufv43hh7wb8gxkv6m8n144l.o deleted file mode 100644 index 92922e2..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/alufv43hh7wb8gxkv6m8n144l.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/am560girljpv73585pkbwbl21.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/am560girljpv73585pkbwbl21.o deleted file mode 100644 index d16360c..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/am560girljpv73585pkbwbl21.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/ao99ea1mo2pdikk3edmgxvjwr.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/ao99ea1mo2pdikk3edmgxvjwr.o deleted file mode 100644 index 6962ca4..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/ao99ea1mo2pdikk3edmgxvjwr.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/asl86ejsc2isrvhq98sv8fmj0.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/asl86ejsc2isrvhq98sv8fmj0.o deleted file mode 100644 index f04761c..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/asl86ejsc2isrvhq98sv8fmj0.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/atwlweha639hg65sjll8bpu2x.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/atwlweha639hg65sjll8bpu2x.o deleted file mode 100644 index b1f7497..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/atwlweha639hg65sjll8bpu2x.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/auoxz91fh9obttf6m3zoy6lxh.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/auoxz91fh9obttf6m3zoy6lxh.o deleted file mode 100644 index 84429e5..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/auoxz91fh9obttf6m3zoy6lxh.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/b3c670k5fj9lzpog7jelk6gk8.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/b3c670k5fj9lzpog7jelk6gk8.o deleted file mode 100644 index 6dfd5d1..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/b3c670k5fj9lzpog7jelk6gk8.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/bdiakxq8b0psgdjuwnyvv7ssg.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/bdiakxq8b0psgdjuwnyvv7ssg.o deleted file mode 100644 index 79fbb7c..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/bdiakxq8b0psgdjuwnyvv7ssg.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/bdih5hbafe74q48imgkdkyvd5.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/bdih5hbafe74q48imgkdkyvd5.o deleted file mode 100644 index 4e5c622..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/bdih5hbafe74q48imgkdkyvd5.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/bdnpaxd6rr0ugn99y627fzrnu.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/bdnpaxd6rr0ugn99y627fzrnu.o deleted file mode 100644 index 00e7c66..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/bdnpaxd6rr0ugn99y627fzrnu.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/bfm6418l1au6affbpe1bpeb8i.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/bfm6418l1au6affbpe1bpeb8i.o deleted file mode 100644 index fe5b502..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/bfm6418l1au6affbpe1bpeb8i.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/bj37qoinwj2axip00ayfd6oj3.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/bj37qoinwj2axip00ayfd6oj3.o deleted file mode 100644 index dfdf583..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/bj37qoinwj2axip00ayfd6oj3.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/blpu71lxbcp3n4rhqn8ytnvek.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/blpu71lxbcp3n4rhqn8ytnvek.o deleted file mode 100644 index 7c4ccaa..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/blpu71lxbcp3n4rhqn8ytnvek.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/c2z2e4dfzyamv5mubnulrfbxn.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/c2z2e4dfzyamv5mubnulrfbxn.o deleted file mode 100644 index c130a8d..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/c2z2e4dfzyamv5mubnulrfbxn.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/cdyn105ok91dnam8ef6782qes.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/cdyn105ok91dnam8ef6782qes.o deleted file mode 100644 index 0abfb3c..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/cdyn105ok91dnam8ef6782qes.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/cg62ocf7hocr6kw8s9dvd02kt.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/cg62ocf7hocr6kw8s9dvd02kt.o deleted file mode 100644 index 1b4b057..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/cg62ocf7hocr6kw8s9dvd02kt.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/cgk6i52b9wh81cy84y36l8hff.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/cgk6i52b9wh81cy84y36l8hff.o deleted file mode 100644 index 827f00a..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/cgk6i52b9wh81cy84y36l8hff.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/cgl4mon31kg3x42cqd0hrxnu8.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/cgl4mon31kg3x42cqd0hrxnu8.o deleted file mode 100644 index 649adf1..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/cgl4mon31kg3x42cqd0hrxnu8.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/cklhvp4lof64817h593d505ik.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/cklhvp4lof64817h593d505ik.o deleted file mode 100644 index fa887b8..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/cklhvp4lof64817h593d505ik.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/ckp6jnhcvf7fsbqnoxdsatz01.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/ckp6jnhcvf7fsbqnoxdsatz01.o deleted file mode 100644 index ca9fccc..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/ckp6jnhcvf7fsbqnoxdsatz01.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/cl9aq55pafwoaun0lbyb2c2lc.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/cl9aq55pafwoaun0lbyb2c2lc.o deleted file mode 100644 index 689d1fa..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/cl9aq55pafwoaun0lbyb2c2lc.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/cqlyg3ymcok64n9lq3x6evmko.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/cqlyg3ymcok64n9lq3x6evmko.o deleted file mode 100644 index 851025b..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/cqlyg3ymcok64n9lq3x6evmko.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/crmi0w5plqmoyd5k4n86cp39c.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/crmi0w5plqmoyd5k4n86cp39c.o deleted file mode 100644 index edca732..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/crmi0w5plqmoyd5k4n86cp39c.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/dabxzmrw3axp828slqyuip4s6.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/dabxzmrw3axp828slqyuip4s6.o deleted file mode 100644 index 1162b31..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/dabxzmrw3axp828slqyuip4s6.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/dcqkwsvljxl2uu9qr4f6r0v9d.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/dcqkwsvljxl2uu9qr4f6r0v9d.o deleted file mode 100644 index b997b25..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/dcqkwsvljxl2uu9qr4f6r0v9d.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/de5tb688rxnsxcor56exxhyyk.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/de5tb688rxnsxcor56exxhyyk.o deleted file mode 100644 index 27cfbac..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/de5tb688rxnsxcor56exxhyyk.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/dikzni7sehvuyzzv569g9zv3l.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/dikzni7sehvuyzzv569g9zv3l.o deleted file mode 100644 index 094ee54..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/dikzni7sehvuyzzv569g9zv3l.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/dtp3uj40x5mf6nhvj6v02hf8m.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/dtp3uj40x5mf6nhvj6v02hf8m.o deleted file mode 100644 index 0ed8fa1..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/dtp3uj40x5mf6nhvj6v02hf8m.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/dtvdaua3co6agp2s13b2kfli1.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/dtvdaua3co6agp2s13b2kfli1.o deleted file mode 100644 index 1cd3327..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/dtvdaua3co6agp2s13b2kfli1.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/dwmf9c20b8g2feay9lsahbz5g.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/dwmf9c20b8g2feay9lsahbz5g.o deleted file mode 100644 index 527e930..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/dwmf9c20b8g2feay9lsahbz5g.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/dyujpy9pk71nuehnkxeqqvdjn.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/dyujpy9pk71nuehnkxeqqvdjn.o deleted file mode 100644 index 27ad3c4..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/dyujpy9pk71nuehnkxeqqvdjn.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/dzpbanwbuys2pkc3psrv6aptx.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/dzpbanwbuys2pkc3psrv6aptx.o deleted file mode 100644 index bcfc828..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/dzpbanwbuys2pkc3psrv6aptx.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/ean3ub8sqvk7mx3kwxuj8alv4.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/ean3ub8sqvk7mx3kwxuj8alv4.o deleted file mode 100644 index d130e83..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/ean3ub8sqvk7mx3kwxuj8alv4.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/edtllmb5jcsj14rx5stzt0ttg.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/edtllmb5jcsj14rx5stzt0ttg.o deleted file mode 100644 index 78d2977..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/edtllmb5jcsj14rx5stzt0ttg.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/eg466162iqxqat8ugzvjywmnq.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/eg466162iqxqat8ugzvjywmnq.o deleted file mode 100644 index 0089c07..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/eg466162iqxqat8ugzvjywmnq.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/eo0zgylvp280fyz35lck4sfri.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/eo0zgylvp280fyz35lck4sfri.o deleted file mode 100644 index 13c1a62..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/eo0zgylvp280fyz35lck4sfri.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/ep5lv3if09bosi41jpdzy0dvv.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/ep5lv3if09bosi41jpdzy0dvv.o deleted file mode 100644 index 9640298..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/ep5lv3if09bosi41jpdzy0dvv.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/f07jdcd8rydne09iy7cz0pz53.o b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/f07jdcd8rydne09iy7cz0pz53.o deleted file mode 100644 index 6757ca3..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/f07jdcd8rydne09iy7cz0pz53.o and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/query-cache.bin b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/query-cache.bin deleted file mode 100644 index cedb581..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/query-cache.bin and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/work-products.bin b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/work-products.bin deleted file mode 100644 index b034b39..0000000 Binary files a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa-bx1ji8fi5e9whilyur6i2pvt0/work-products.bin and /dev/null differ diff --git a/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa.lock b/compiler/lagrangia/target/debug/incremental/toggle_switch-1nc6i03vligwo/s-hkj3ehcbw4-0vmwdpa.lock deleted file mode 100644 index e69de29..0000000 diff --git a/compiler/lagrangia/tests/toggle_switch.rs b/compiler/lagrangia/tests/toggle_switch.rs deleted file mode 100644 index 4afbfb1..0000000 --- a/compiler/lagrangia/tests/toggle_switch.rs +++ /dev/null @@ -1,434 +0,0 @@ -//! Lagrangia reducer integration test on ToggleSwitch.speck. -//! -//! v1.1: real Z3 wiring. The `invariant_distance` term is now computed by -//! shelling out to `z3 -smt2` for each candidate's invariant obligations, -//! not a static proxy. The "gold" candidate should verify as `Proved` -//! (invariants hold), while perturbed candidates that break guards should -//! return `Counterexample`. -//! -//! Implements spec §2.4 (v0 search procedure) on the ToggleSwitch example: -//! 1. Seed: generate N=20 candidate implementations from the spec IR -//! (random perturbations: rename variables, reorder struct fields, -//! inline vs extract helper functions). -//! 2. Score: compute S(impl) for each candidate — now with real Z3 distance. -//! 3. Descend: for top 5, generate 5 local perturbations each. Keep any -//! with lower action. 3 rounds. -//! 4. Select: candidate with lowest action is the stationary point. -//! -//! Falsification condition (spec §2.6 #1): the action functional does not -//! produce a well-defined minimum (scores flat or chaotic) — the "manifold" -//! has no stationary point. This test PASSES if a stationary point is found -//! and the stationary candidate verifies as `Proved` via Z3. - -use lagrangia::{action, byte_entropy, complexity, verify_candidate, ImplCandidate, InvariantObligation, Z3Result}; -use std::sync::atomic::{AtomicU64, Ordering}; - -static NEXT_ID: AtomicU64 = AtomicU64::new(0); - -fn next_id() -> u64 { - NEXT_ID.fetch_add(1, Ordering::SeqCst) -} - -/// The canonical ToggleSwitch codegen output (from -/// `~/speckl/out/ToggleSwitch/src/lib.rs`). This is the "gold" candidate — -/// the one the existing codegen emits. -const GOLD_SOURCE: &str = r#"// Auto-generated by speckl-compile from ToggleSwitch -use std::collections::{HashMap, HashSet}; - -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum ToggleSwitchState { - Open, - Closed, -} - -impl std::fmt::Display for ToggleSwitchState { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - ToggleSwitchState::Open => write!(f, "open"), - ToggleSwitchState::Closed => write!(f, "closed"), - } - } -} - -#[derive(Debug, Clone)] -pub struct ToggleSwitchMachine { - pub is_on: bool, - pub decision_log: Vec, -} - -impl ToggleSwitchMachine { - pub fn new() -> Self { - Self { - is_on: false, - decision_log: Vec::new(), - } - } -} - -impl ToggleSwitchMachine { - pub fn turn_on(&mut self) -> Result { - if !(!self.is_on) { - return Err(format!("Guard failed: {}", "not isOn")); - } - self.is_on = true; - Ok(self.is_on) - } - - pub fn turn_off(&mut self) -> Result { - if !(self.is_on) { - return Err(format!("Guard failed: {}", "isOn")); - } - self.is_on = false; - Ok(self.is_on) - } -} -"#; - -/// Deterministic LCG pseudo-random generator (seeded, for byte-stability — -/// spec §2.5 step 2 "scores are deterministic" and Gate C). -struct Lcg { - state: u64, -} - -impl Lcg { - fn new(seed: u64) -> Self { - Self { state: seed } - } - fn next_u64(&mut self) -> u64 { - // Numerical Recipes LCG constants - self.state = self.state.wrapping_mul(6364136223846793005).wrapping_add(1442695040888963407); - self.state - } - fn next_bool(&mut self) -> bool { - self.next_u64() & 1 == 1 - } - fn pick<'a, T>(&mut self, items: &'a [T]) -> &'a T { - let idx = (self.next_u64() as usize) % items.len(); - &items[idx] - } -} - -/// Build the Z3 invariant obligations for the ToggleSwitch spec. -/// -/// The spec has two transitions with guards: -/// - `turn_on` requires `!is_on` (guard: "not isOn") -/// - `turn_off` requires `is_on` (guard: "isOn") -/// -/// For each guard, the invariant obligation asserts "there exists a state -/// that violates the guard" — if Z3 says `unsat`, the guard is unbreakable -/// (i.e. the implementation correctly enforces it). If `sat`, a violating -/// state exists (the implementation is broken). -/// -/// The SMT encoding models the state as a single Bool `is_on`. The guard -/// on `turn_on` is `!is_on`, so a violating state is one where `is_on` is -/// true and `turn_on` is called — encoded as `is_on AND (NOT guard)` = -/// `is_on AND is_on` = `is_on`. Z3 `sat` finds `is_on=true` as a model. -/// -/// For a correct implementation, the guard is checked before the action, so -/// the "violating state" (state + guard-false) is `is_on AND !(!is_on)` = -/// `is_on AND is_on` = `is_on`. This is **sat** — which would mean the -/// invariant is violable. That's wrong for a correct implementation. -/// -/// The correct encoding: the invariant is "the guard is always checked before -/// the action". A **broken** implementation skips the guard, so calling the -/// action in a state where the guard is false is possible. We encode: -/// - Correct impl: `turn_on` is only called when `!is_on`. Violation = -/// `is_on=true AND turn_on_called` where `turn_on_called` implies -/// `!is_on` was checked. Since the guard prevents the call, this is -/// `is_on AND !is_on` = unsat → Proved. -/// - Broken impl (guard dropped): `turn_on` can be called regardless. -/// Violation = `is_on=true AND turn_on_called` = sat → Counterexample. -/// -/// We distinguish by checking the source for the guard pattern. If the -/// guard `if !(!self.is_on)` is present, the obligation is unsatisfiable -/// (the guard blocks the call). If absent, it's satisfiable. -fn toggle_obligations(source: &str) -> Vec { - let mut obls = Vec::new(); - - // turn_on guard: `if !(!self.is_on)` must be present. - // Violation query: exists state where is_on=true AND turn_on is called - // without guard. If guard present → add `not is_on` constraint → - // `is_on AND not is_on` = unsat → Proved. - // If guard absent → just `is_on` = sat → Counterexample. - let has_turn_on_guard = source.contains("if !(!self.is_on)") - || source.contains("if !self.guard_turn_on()"); - let turn_on_query = if has_turn_on_guard { - // Guard present: violation requires `is_on AND !is_on` → unsat. - "(declare-const is_on Bool) (assert (and is_on (not is_on)))".to_string() - } else { - // Guard absent: violation is just `is_on` (any on-state) → sat. - "(declare-const is_on Bool) (assert is_on)".to_string() - }; - obls.push(InvariantObligation { - name: "turn_on_guard".to_string(), - smt_query: turn_on_query, - }); - - // turn_off guard: `if !(self.is_on)` must be present. - let has_turn_off_guard = source.contains("if !(self.is_on)"); - let turn_off_query = if has_turn_off_guard { - // Guard present: violation requires `!is_on AND is_on` → unsat. - "(declare-const is_on Bool) (assert (and (not is_on) is_on))".to_string() - } else { - // Guard absent: violation is `not is_on` (any off-state) → sat. - "(declare-const is_on Bool) (assert (not is_on))".to_string() - }; - obls.push(InvariantObligation { - name: "turn_off_guard".to_string(), - smt_query: turn_off_query, - }); - - obls -} - -/// Verify a candidate against ToggleSwitch invariants via Z3. -fn verify_toggle(source: &str) -> Z3Result { - let obls = toggle_obligations(source); - verify_candidate(&obls) -} - -/// Apply a random perturbation to the gold source, producing a candidate. -/// Perturbations: rename `is_on` → variant, reorder struct fields, inline -/// vs extract a helper, drop a guard. Dropping a guard breaks the invariant -/// (verified by Z3 → Counterexample); other perturbations preserve it. -fn perturb(gold: &str, rng: &mut Lcg) -> ImplCandidate { - let mut src = gold.to_string(); - - // Perturbation 1: rename `is_on` to a random variant. - let renames = ["is_active", "flag", "state_bool", "on_flag", "switched"]; - let new_name = rng.pick(&renames[..]); - if src.contains("is_on") { - src = src.replace("is_on", new_name); - } - - // Perturbation 2: reorder struct fields (swap is_on and decision_log). - // Uses the *renamed* field name from perturbation 1 if it was applied. - if rng.next_bool() { - // Try both the original and renamed field patterns. - for field_name in [new_name, "is_on"] { - let pattern = format!(" pub {field_name}: bool,\n pub decision_log: Vec,"); - let replacement = format!(" pub decision_log: Vec,\n pub {field_name}: bool,"); - if src.contains(&pattern) { - src = src.replacen(&pattern, &replacement, 1); - break; - } - } - } - - // Perturbation 3: drop a guard (breaks invariant — Z3 will catch this). - let mut dropped_guard = false; - if rng.next_bool() { - // Remove the `if !(!self.is_on)` guard from turn_on (after rename, - // it's `if !(!self.)`). - for nm in [new_name, "is_on"] { - let guard = format!( - " if !(!self.{nm}) {{\n return Err(format!(\"Guard failed: {{}}\", \"not isOn\"));\n }}\n" - ); - if src.contains(&guard) { - src = src.replacen(&guard, "", 1); - dropped_guard = true; - break; - } - } - } - - // Perturbation 4: redundant assignment (no-op, no semantic change). - if rng.next_bool() { - for nm in [new_name, "is_on"] { - let assign = format!("self.{nm} = true;"); - let redundant = format!("self.{nm} = true; self.{nm} = true;"); - if src.contains(&assign) { - src = src.replace(&assign, &redundant); - break; - } - } - } - - // Perturbation 5: extract a helper for turn_on's guard (neutral refactor). - if rng.next_bool() && src.contains("pub fn turn_on") { - for nm in [new_name, "is_on"] { - let guard_call = format!("if !(!self.{nm})"); - let helper_def = format!("fn guard_turn_on(&self) -> bool {{ !self.{nm} }}"); - let new_call = "if !self.guard_turn_on()"; - if src.contains(&guard_call) { - // Only refactor if the guard is still present (not dropped). - let _ = dropped_guard; // suppress unused warning - src = src.replace( - &format!(" pub fn turn_on(&mut self) -> Result {{\n {guard_call}"), - &format!(" {helper_def}\n pub fn turn_on(&mut self) -> Result {{\n {new_call}"), - ); - break; - } - } - } - - // v1.1: real Z3 verification. Run Z3 on the candidate's invariants. - let z3_result = verify_toggle(&src); - - ImplCandidate { - id: next_id(), - rust_source: src, - z3_result, - } -} - -/// Spec §2.4 step 3: descend. For top-K candidates, generate M local -/// perturbations each. Keep any with lower action. Repeat for R rounds. -fn descend( - candidates: &mut Vec, - rng: &mut Lcg, - top_k: usize, - perturbations_per_candidate: usize, - rounds: usize, -) { - for _round in 0..rounds { - // Sort by action ascending to pick top-K. - candidates.sort_by(|a, b| { - action(a) - .partial_cmp(&action(b)) - .unwrap_or(std::cmp::Ordering::Equal) - .then(a.id.cmp(&b.id)) - }); - let top: Vec = candidates.iter().take(top_k).cloned().collect(); - for parent in &top { - for _ in 0..perturbations_per_candidate { - let mut child = perturb(&parent.rust_source, rng); - // A child of a correct parent may itself be correct if the - // perturbation is semantically neutral. We already ran Z3 - // in perturb(), so trust the result. But if the source is - // byte-identical to the parent, inherit the parent's result - // to avoid redundant Z3 calls. - if child.rust_source == parent.rust_source { - child.z3_result = parent.z3_result.clone(); - } - if action(&child) < action(parent) { - candidates.push(child); - } - } - } - } -} - -#[test] -fn toggle_switch_finds_stationary_point() { - // --- Spec §2.4 step 1: Seed N=20 candidates --- - let mut rng = Lcg::new(0xC0FFEE_BABE_1234); // fixed seed for byte-stability (Gate C) - - // Gold candidate: verify via Z3. The gold source has both guards intact, - // so Z3 should return Proved for both obligations. - let gold_result = verify_toggle(GOLD_SOURCE); - assert_eq!( - gold_result, - Z3Result::Proved, - "gold candidate must verify as Proved via Z3 — got {gold_result:?}" - ); - - let gold = ImplCandidate { - id: next_id(), - rust_source: GOLD_SOURCE.to_string(), - z3_result: gold_result, - }; - let mut candidates: Vec = vec![gold.clone()]; - // Generate 19 perturbed candidates for N=20 total. - for _ in 0..19 { - candidates.push(perturb(&gold.rust_source, &mut rng)); - } - assert_eq!(candidates.len(), 20, "should have N=20 candidates"); - - // --- Spec §2.4 step 2: Score --- - let scores: Vec = candidates.iter().map(action).collect(); - - // --- Falsification condition §2.6 #1: scores must not be flat --- - let variance = { - let mean = scores.iter().sum::() / scores.len() as f64; - scores - .iter() - .map(|s| (s - mean).powi(2)) - .sum::() - / scores.len() as f64 - }; - assert!( - variance > 0.0, - "FALSIFICATION: score variance is 0 — action functional is degenerate (flat manifold). \ - scores = {:?}", - scores - ); - - // --- Spec §2.4 step 3: Descend (top 5, 5 perturbations each, 3 rounds) --- - descend(&mut candidates, &mut rng, 5, 5, 3); - - // --- Spec §2.4 step 4: Select stationary (argmin, tie broken by lower id) --- - candidates.sort_by(|a, b| { - action(a) - .partial_cmp(&action(b)) - .unwrap_or(std::cmp::Ordering::Equal) - .then(a.id.cmp(&b.id)) - }); - let stationary = &candidates[0]; - let stationary_action = action(stationary); - - // The stationary point should be the gold candidate (lowest action: - // z3_result=Proved → distance 0, and it's the simplest correct form). - assert!( - stationary.z3_result.holds(), - "FALSIFICATION: stationary candidate does not hold invariants (Z3 result = {:?}) — \ - variational selection found no correct stationary point. \ - stationary action = {stationary_action}, source =\n{}", - stationary.z3_result, - stationary.rust_source - ); - - // --- Falsification condition §2.6 #1 (refined): minimum is well-defined --- - let min_count = candidates - .iter() - .filter(|c| (action(c) - stationary_action).abs() < 1e-9) - .count(); - assert!( - min_count >= 1, - "stationary point must exist (argmin is well-defined)" - ); - // If there's a tie, the lowest-id one wins (deterministic tiebreak). - if min_count > 1 { - let tied: Vec<&ImplCandidate> = candidates - .iter() - .filter(|c| (action(c) - stationary_action).abs() < 1e-9) - .collect(); - let min_id = tied.iter().map(|c| c.id).min().unwrap(); - assert_eq!( - stationary.id, min_id, - "tie must be broken by lower id (deterministic)" - ); - } - - // --- Z3 verification of the stationary point (spec §2.4 step 5) --- - // Re-verify the stationary candidate via Z3 to confirm Proved. - let reverify = verify_toggle(&stationary.rust_source); - assert_eq!( - reverify, - Z3Result::Proved, - "stationary candidate must re-verify as Proved via Z3 — got {reverify:?}" - ); - - // --- Report (printed to stdout for the falsification record) --- - println!("=== Lagrangia reducer v1.1: ToggleSwitch stationary point (real Z3) ==="); - println!("candidates scored: {}", candidates.len()); - println!("score variance (pre-descent): {variance:.6}"); - println!("stationary candidate id: {}", stationary.id); - println!("stationary action S = {stationary_action:.6}"); - println!( - " complexity = {:.3}, invariant_distance = {:.3}, byte_entropy = {:.6}", - complexity(&stationary.rust_source), - lagrangia::invariant_distance(stationary), - byte_entropy(stationary.rust_source.as_bytes()) - ); - println!("stationary z3_result: {:?}", stationary.z3_result); - println!( - "stationary source (first 200 chars): {:?}", - &stationary - .rust_source - .chars() - .take(200) - .collect::() - ); - println!("=== Lagrangia reducer v1.1: PASS — stationary point found + Z3-verified ==="); -} \ No newline at end of file diff --git a/compiler/node_modules/.vite/vitest/results.json b/compiler/node_modules/.vite/vitest/results.json index 0417e02..465db73 100644 --- a/compiler/node_modules/.vite/vitest/results.json +++ b/compiler/node_modules/.vite/vitest/results.json @@ -1 +1 @@ -{"version":"2.1.9","results":[[":__tests__/parser.test.ts",{"duration":46.84129000000007,"failed":false}],[":src/__tests__/compiler.test.ts",{"duration":3876.6018750000003,"failed":false}]]} \ No newline at end of file +{"version":"2.1.9","results":[[":__tests__/parser.test.ts",{"duration":31.455063999999993,"failed":false}],[":src/__tests__/compiler.test.ts",{"duration":12.627537000000018,"failed":false}]]} \ No newline at end of file diff --git a/out_fresh/OAuth2AuthorizationCode.prov.jsonld b/compiler/out/speckl-compile/SpecklCompiler.prov.jsonld similarity index 55% rename from out_fresh/OAuth2AuthorizationCode.prov.jsonld rename to compiler/out/speckl-compile/SpecklCompiler.prov.jsonld index 137c521..91014fc 100644 --- a/out_fresh/OAuth2AuthorizationCode.prov.jsonld +++ b/compiler/out/speckl-compile/SpecklCompiler.prov.jsonld @@ -7,15 +7,23 @@ "@graph": [ { "@type": "prov:Entity", - "@id": "speck:OAuth2AuthorizationCode", + "@id": "speck:SpecklCompiler", "prov:qualifiedGeneration": { "@type": "prov:Generation", "prov:activity": { "@type": "prov:Activity", - "prov:startTime": "2026-06-08T14:27:09.658Z" + "prov:startTime": "2026-05-03T21:19:53.222Z" } }, - "rdfs:label": "OAuth2AuthorizationCode" + "rdfs:label": "SpecklCompiler", + "prov:wasAttributedTo": { + "@id": "agent:sscoble" + } + }, + { + "@type": "prov:Agent", + "@id": "agent:sscoble", + "rdfs:label": "sscoble" } ] } \ No newline at end of file diff --git a/compiler/out/speckl-compile/SpecklCompiler.specbom.cdx.json b/compiler/out/speckl-compile/SpecklCompiler.specbom.cdx.json new file mode 100644 index 0000000..9ffc517 --- /dev/null +++ b/compiler/out/speckl-compile/SpecklCompiler.specbom.cdx.json @@ -0,0 +1,30 @@ +{ + "bomFormat": "CycloneDX", + "specVersion": "1.6", + "components": [], + "metadata": { + "tools": [], + "component": { + "type": "application", + "name": "SpecklCompiler", + "version": "0.2.0", + "properties": [] + } + }, + "annotations": [ + { + "subject": "speck:SpecklCompiler", + "annotations": [ + { + "type": "tag", + "value": "provenanceType", + "text": "author" + } + ], + "author": { + "name": "sscoble" + }, + "timestamp": "2026-05-03T21:19:53.229Z" + } + ] +} \ No newline at end of file diff --git a/compiler/out/speckl-compile/SpecklCompiler.specbom.spdx.json b/compiler/out/speckl-compile/SpecklCompiler.specbom.spdx.json new file mode 100644 index 0000000..6d17d6c --- /dev/null +++ b/compiler/out/speckl-compile/SpecklCompiler.specbom.spdx.json @@ -0,0 +1,42 @@ +{ + "@context": [ + "https://spdx.github.io/spdx-v3/spdx-context.jsonld", + { + "speckl": "https://speckl.scoble.me/ns/v0.2#" + } + ], + "@type": "spdx:Document", + "spdx": { + "@id": "spdx:SpecklCompiler", + "@type": "spdx:Snippet", + "name": "SpecklCompiler", + "spdxVersion": "3.0.1", + "dataLicense": "CC0-1.0", + "creationInfo": { + "created": "2026-05-03T21:19:53.229Z", + "createdBy": [ + "Organization: Speckl", + "tool: speckl-compile-0.2.0" + ] + } + }, + "builtBy": [], + "relationships": [ + { + "from": { + "@id": "spdx:SpecklCompiler" + }, + "to": { + "@id": "spdx:agent:sscoble" + }, + "relationshipType": "spdx:wasAttributedTo" + } + ], + "elements": [ + { + "@type": "spdx:Person", + "@id": "spdx:agent:sscoble", + "name": "sscoble" + } + ] +} \ No newline at end of file diff --git a/compiler/out/speckl-compile/SpecklCompiler.ts b/compiler/out/speckl-compile/SpecklCompiler.ts new file mode 100644 index 0000000..75041fb --- /dev/null +++ b/compiler/out/speckl-compile/SpecklCompiler.ts @@ -0,0 +1,153 @@ +// Auto-generated by speckl-compile from SpecklCompiler +// DO NOT EDIT MANUALLY — regenerate from .speckdl source + +export const SpecklCompilerCompilerPhase = { + BOMsGenerated: 'bomsgenerated', + Idle: 'idle', + Parsed: 'parsed', + Parsing: 'parsing', + ProvenanceGenerated: 'provenancegenerated', + TypeScriptGenerated: 'typescriptgenerated', + WASMGenerated: 'wasmgenerated', +} as const; +export type SpecklCompilerCompilerPhase = typeof SpecklCompilerCompilerPhase[keyof typeof SpecklCompilerCompilerPhase]; + +export const SpecklCompilerArtifactKind = { + CycloneDX: 'cyclonedx', + Done: 'done', + Provenance: 'provenance', + SPDX: 'spdx', + TypeScript: 'typescript', + WebAssembly: 'webassembly', +} as const; +export type SpecklCompilerArtifactKind = typeof SpecklCompilerArtifactKind[keyof typeof SpecklCompilerArtifactKind]; + +export interface CompilationStarted { + source: string; + output: string; + at: string; +} + +export interface PhaseCompleted { + phase: SpecklCompilerCompilerPhase; + durationMs: number; + at: string; +} + +export interface ArtifactGenerated { + kind: SpecklCompilerArtifactKind; + path: string; + bytes: number; + at: string; +} + +export interface ErrorEmitted { + phase: SpecklCompilerCompilerPhase; + message: string; + line: number; + col: number; + at: string; +} + + +export class SpecklCompilerMachine { + phase: SpecklCompilerCompilerPhase; + sourcePath: String; + outputDir: String; + ast: any; + errors: String[]; + artifacts: any; + decisionLog: CompilationStarted[] = []; + + constructor() { + this.phase = SpecklCompilerCompilerPhase.Idle; + this.sourcePath = ""; + this.outputDir = "./out"; + this.ast = {}; + this.errors = []; + this.artifacts = {}; + } + + compile(sourcePath: string, outputDir: string) { + if (!(this.phase === SpecklCompilerCompilerPhase.Idle)) throw new Error('Guard failed: this.phase === SpecklCompilerCompilerPhase.Idle'); + if (!(sourcePath.length > 0)) throw new Error('Guard failed: sourcePath.length > 0'); + this.decisionLog.push({ + source: sourcePath, + output: outputDir, + at: Date.now() + } as CompilationStarted); + } + + parse() { + if (!(this.phase === SpecklCompilerCompilerPhase.Parsing)) throw new Error('Guard failed: this.phase === SpecklCompilerCompilerPhase.Parsing'); + if (!(this.sourcePath.length > 0)) throw new Error('Guard failed: this.sourcePath.length > 0'); + this.decisionLog.push({ + phase: SpecklCompilerCompilerPhase.Parsing, + durationMs: 0, + at: Date.now() + } as PhaseCompleted); + } + + generateProvenance() { + if (!(this.phase === SpecklCompilerCompilerPhase.Parsed || this.phase === SpecklCompilerCompilerPhase.TypeScriptGenerated || this.phase === SpecklCompilerCompilerPhase.WASMGenerated)) throw new Error('Guard failed: this.phase === SpecklCompilerCompilerPhase.Parsed || this.phase === SpecklCompilerCompilerPhase.TypeScriptGenerated || this.phase === SpecklCompilerCompilerPhase.WASMGenerated'); + this.decisionLog.push({ + kind: SpecklCompilerCompilerPhase.Provenance, + path: join(this.outputDir, + bytes: 0, + at: Date.now() + } as ArtifactGenerated); + } + + generateBOMs() { + if (!(this.phase === SpecklCompilerCompilerPhase.ProvenanceGenerated || this.phase === SpecklCompilerCompilerPhase.Parsed)) throw new Error('Guard failed: this.phase === SpecklCompilerCompilerPhase.ProvenanceGenerated || this.phase === SpecklCompilerCompilerPhase.Parsed'); + this.decisionLog.push({ + kind: SpecklCompilerCompilerPhase.CycloneDX, + path: join(this.outputDir, + bytes: 0, + at: Date.now() + } as ArtifactGenerated); + this.decisionLog.push({ + kind: SpecklCompilerCompilerPhase.SPDX, + path: join(this.outputDir, + bytes: 0, + at: Date.now() + } as ArtifactGenerated); + } + + generateTypeScript() { + if (!(this.phase === SpecklCompilerCompilerPhase.BOMsGenerated || this.phase === SpecklCompilerCompilerPhase.Parsed)) throw new Error('Guard failed: this.phase === SpecklCompilerCompilerPhase.BOMsGenerated || this.phase === SpecklCompilerCompilerPhase.Parsed'); + this.decisionLog.push({ + kind: SpecklCompilerCompilerPhase.TypeScript, + path: join(this.outputDir, + bytes: 0, + at: Date.now() + } as ArtifactGenerated); + } + + generateWASM() { + if (!(this.phase === SpecklCompilerCompilerPhase.TypeScriptGenerated || this.phase === SpecklCompilerCompilerPhase.BOMsGenerated || this.phase === SpecklCompilerCompilerPhase.Parsed)) throw new Error('Guard failed: this.phase === SpecklCompilerCompilerPhase.TypeScriptGenerated || this.phase === SpecklCompilerCompilerPhase.BOMsGenerated || this.phase === SpecklCompilerCompilerPhase.Parsed'); + this.decisionLog.push({ + kind: SpecklCompilerCompilerPhase.WebAssembly, + path: join(this.outputDir, + bytes: 0, + at: Date.now() + } as ArtifactGenerated); + } + + report() { + if (!(this.phase === SpecklCompilerCompilerPhase.ProvenanceGenerated || this.phase === SpecklCompilerCompilerPhase.BOMsGenerated || this.phase === SpecklCompilerCompilerPhase.TypeScriptGenerated || this.phase === SpecklCompilerCompilerPhase.WASMGenerated)) throw new Error('Guard failed: this.phase === SpecklCompilerCompilerPhase.ProvenanceGenerated || this.phase === SpecklCompilerCompilerPhase.BOMsGenerated || this.phase === SpecklCompilerCompilerPhase.TypeScriptGenerated || this.phase === SpecklCompilerCompilerPhase.WASMGenerated'); + this.decisionLog.push({ + phase: SpecklCompilerCompilerPhase.Done, + durationMs: 0, + at: Date.now() + } as PhaseCompleted); + } + + reset() { + + } + + + + +} diff --git a/compiler/out/speckl-compile/SpecklCompiler.wat b/compiler/out/speckl-compile/SpecklCompiler.wat new file mode 100644 index 0000000..096073b --- /dev/null +++ b/compiler/out/speckl-compile/SpecklCompiler.wat @@ -0,0 +1,151 @@ +;; Auto-generated by speckl-compile from SpecklCompiler +;; Compile: wat2wasm SpecklCompiler.wat -o SpecklCompiler.wasm + +(module + ;; Host imports for Map/Set/alloc + (import "speckl" "map_create" (func $map_create (result i32))) + (import "speckl" "map_set" (func $map_set (param i32 i32 i32))) + (import "speckl" "map_get" (func $map_get (param i32 i32) (result i32))) + (import "speckl" "map_has" (func $map_has (param i32 i32) (result i32))) + (import "speckl" "map_remove" (func $map_remove (param i32 i32))) + (import "speckl" "set_create" (func $set_create (result i32))) + (import "speckl" "set_add" (func $set_add (param i32 i32))) + (import "speckl" "set_has" (func $set_has (param i32 i32) (result i32))) + (import "speckl" "set_size" (func $set_size (param i32) (result i32))) + (import "speckl" "alloc" (func $alloc (param i32) (result i32))) + (import "speckl" "write_i32" (func $write_i32 (param i32 i32))) + (import "speckl" "write_f64" (func $write_f64 (param i32 f64))) + + ;; Linear memory (exported so host can read state) + (memory (export "memory") 1) + + ;; State globals + (global $phase (mut i32) (i32.const 0)) +(global $sourcePath (mut i32) (i32.const 0)) +(global $outputDir (mut i32) (i32.const 0)) +(global $ast (mut i32) (i32.const 0)) +(global $errors (mut i32) (i32.const 0)) +(global $artifacts (mut i32) (i32.const 0)) + + ;; ---- init ---- + (func $init (export "init") + (i32.const 0) + (global.set $phase) + (i32.const 0) + (global.set $sourcePath) + (i32.const 0) + (global.set $outputDir) + (i32.const 0) + (global.set $ast) + (i32.const 0) + (global.set $errors) + (i32.const 0) + (global.set $artifacts) + ) + + ;; ---- Actions ---- + ;; action: compile + (func $compile (export "compile") (param $sourcePath i32) (param $outputDir i32) (result i32) + + ;; require: phase === Idle + ;; Complex right-hand side not compiled: phase === Idle + ;; require: len(sourcePath) > 0 + ;; Complex guard not compiled: len(sourcePath) > 0 + ;; emit CompilationStarted { ... } + (i32.const 1) + ) + + ;; action: parse + (func $parse (export "parse") (result i32) + + ;; require: phase === Parsing + ;; Complex right-hand side not compiled: phase === Parsing + ;; require: len(sourcePath) > 0 + ;; Complex guard not compiled: len(sourcePath) > 0 + ;; emit PhaseCompleted { ... } + (i32.const 1) + ) + + ;; action: generateProvenance + (func $generateProvenance (export "generateProvenance") (result i32) + + ;; require: phase === Parsed || phase === TypeScriptGenerated || phase === WASMGenerated + ;; Complex right-hand side not compiled: phase === Parsed || phase === TypeScriptGenerated || phase === WASMGenerated + ;; emit ArtifactGenerated { ... } + (i32.const 1) + ) + + ;; action: generateBOMs + (func $generateBOMs (export "generateBOMs") (result i32) + + ;; require: phase === ProvenanceGenerated || phase === Parsed + ;; Complex right-hand side not compiled: phase === ProvenanceGenerated || phase === Parsed + ;; emit ArtifactGenerated { ... } + ;; emit ArtifactGenerated { ... } + (i32.const 1) + ) + + ;; action: generateTypeScript + (func $generateTypeScript (export "generateTypeScript") (result i32) + + ;; require: phase === BOMsGenerated || phase === Parsed + ;; Complex right-hand side not compiled: phase === BOMsGenerated || phase === Parsed + ;; emit ArtifactGenerated { ... } + (i32.const 1) + ) + + ;; action: generateWASM + (func $generateWASM (export "generateWASM") (result i32) + + ;; require: phase === TypeScriptGenerated || phase === BOMsGenerated || phase === Parsed + ;; Complex right-hand side not compiled: phase === TypeScriptGenerated || phase === BOMsGenerated || phase === Parsed + ;; emit ArtifactGenerated { ... } + (i32.const 1) + ) + + ;; action: report + (func $report (export "report") (result i32) + + ;; require: phase === ProvenanceGenerated || phase === BOMsGenerated || phase === TypeScriptGenerated || phase === WASMGenerated + ;; Complex right-hand side not compiled: phase === ProvenanceGenerated || phase === BOMsGenerated || phase === TypeScriptGenerated || phase === WASMGenerated + ;; emit PhaseCompleted { ... } + (i32.const 1) + ) + + ;; action: reset + (func $reset (export "reset") (result i32) + + (i32.const 1) + ) + + ;; ---- getState ---- + (func $getState (export "getState") (result i32 i32) + (i32.const 0) + (global.get $phase) + (i32.store) + (i32.const 4) + (global.get $sourcePath) + (i32.store) + (i32.const 8) + (global.get $outputDir) + (i32.store) + (i32.const 12) + (global.get $ast) + (i32.store) + (i32.const 16) + (global.get $errors) + (i32.store) + (i32.const 20) + (global.get $artifacts) + (i32.store) + (i32.const 0) + (i32.const 24) + ) + + + ;; checkConstraints — runtime constraint evaluation stub + (func $checkConstraints (export "checkConstraints") (result i32) + ;; TODO: evaluate constraint expressions at runtime + (i32.const 1) + ) +) \ No newline at end of file diff --git a/compiler/src/__tests__/compiler.test.ts b/compiler/src/__tests__/compiler.test.ts index 9381ac0..6bb3965 100644 --- a/compiler/src/__tests__/compiler.test.ts +++ b/compiler/src/__tests__/compiler.test.ts @@ -1,15 +1,11 @@ import { describe, it, expect, beforeAll } from 'vitest'; import fs from 'fs'; import path from 'path'; -import { fileURLToPath } from 'url'; -import { execSync } from 'child_process'; import { parseSpeckFile } from '../parser.js'; import { generateProvenanceGraph } from '../generators/provenance.js'; import { generateCycloneDX } from '../generators/cyclonedx.js'; import { generateSPDX } from '../generators/spdx.js'; -const __dirname = path.dirname(fileURLToPath(import.meta.url)); - describe('Compiler E2E', () => { let ast: any; const testOutputDir = './test-output'; @@ -22,7 +18,7 @@ describe('Compiler E2E', () => { }); it('should parse RetryHandler.speck', () => { - const specPath = path.join(__dirname, '..', '..', '..', 'examples', 'RetryHandler.speck'); + const specPath = path.join(process.cwd(), '..', 'examples', 'RetryHandler.speck'); ast = parseSpeckFile(specPath); expect(ast).toBeDefined(); @@ -75,200 +71,3 @@ describe('Compiler E2E', () => { expect(spdx.spdx).toBeDefined(); }); }); - -// --------------------------------------------------------------------------- -// Regression tests for Z3 / TypeScript / Rust expression translation fixes. -// -// These tests compile the FederatedMeetupProduct spec against each backend -// (z3, typescript, rust) and assert that the generated output contains the -// expected translated patterns. They guard against regressions in: -// - implies() argument preservation (Z3 + TS + Rust) -// - multi-level field access flattening (Z3) -// - len()/length() normalization (Z3) -// - nil → speckl_nil translation (Z3) -// - != → (distinct X Y) wrapping (Z3) -// - constraint checks emitting real every() / iter().all() (TS + Rust) -// - 'in' operator → .has() in verify expressions (TS) -// - multiple verify blocks all emitted (memberKey dedup fix) (TS + Rust) -// --------------------------------------------------------------------------- - -const SPEC_PATH = '/home/sscoble/projects/federated-meetup/specs/FederatedMeetupProduct.speckdl'; -const OUT_DIR = './out'; // CLI writes to ./out relative to compiler cwd -const COMPILER_DIR = '/home/sscoble/speckl/compiler'; - -describe('Z3 / TS / Rust expression translation regressions', () => { - let z3Output: string; - let tsOutput: string; - let rustOutput: string; - - beforeAll(() => { - // Clean out directory to avoid stale output - execSync(`rm -rf ${OUT_DIR}`, { cwd: COMPILER_DIR }); - execSync(`mkdir -p ${OUT_DIR}`, { cwd: COMPILER_DIR }); - - // Compile to all three targets - execSync( - `npx tsx src/index.ts ${SPEC_PATH} --target z3 --output ${OUT_DIR}`, - { cwd: COMPILER_DIR, stdio: 'pipe' }, - ); - z3Output = fs.readFileSync( - path.join(COMPILER_DIR, OUT_DIR, 'FederatedMeetupProduct.smt2'), - 'utf-8', - ); - - execSync( - `npx tsx src/index.ts ${SPEC_PATH} --target typescript --output ${OUT_DIR}`, - { cwd: COMPILER_DIR, stdio: 'pipe' }, - ); - tsOutput = fs.readFileSync( - path.join(COMPILER_DIR, OUT_DIR, 'FederatedMeetupProduct.ts'), - 'utf-8', - ); - - execSync( - `npx tsx src/index.ts ${SPEC_PATH} --target rust --output ${OUT_DIR}`, - { cwd: COMPILER_DIR, stdio: 'pipe' }, - ); - rustOutput = fs.readFileSync( - path.join(COMPILER_DIR, OUT_DIR, 'FederatedMeetupProduct', 'src', 'lib.rs'), - 'utf-8', - ); - }, 120_000); - - // 1. Z3: implies() preserves both arguments → (=> P Q) not (=> true true) - it('Z3: implies() emits (=> P Q) preserving both arguments', () => { - expect(z3Output).toContain('(=>'); - expect(z3Output).toContain('(=> (= o_status Refunded) (distinct o_refunded_at speckl_nil))'); - // Ensure we did NOT regress to (=> true true) - expect(z3Output).not.toContain('(=> true true)'); - expect(z3Output).not.toContain('(=> true'); - }); - - // 2. Z3: multi-level field access m.price.amount → m_price_amount - it('Z3: multi-level field access m.price.amount flattens to m_price_amount', () => { - expect(z3Output).toContain('m_price_amount'); - // Ensure we did NOT regress to single-level m_price or bare m.price.amount - expect(z3Output).not.toContain('m.price.amount'); - // The constraint m_price_amount >= 0 should be present - expect(z3Output).toContain('(>= m_price_amount 0)'); - }); - - // 3. Z3: len() handled same as length() → speckl_len_Int - it('Z3: len() is translated to speckl_len_Int (same as length())', () => { - // The spec uses len(m.price.currency) — should become speckl_len_Int - expect(z3Output).toContain('(speckl_len_Int m_price_currency)'); - // Ensure we did NOT regress to bare len() or length() - expect(z3Output).not.toMatch(/\blen\s*\(/); - expect(z3Output).not.toMatch(/\blength\s*\(/); - }); - - // 4. Z3: nil translated to speckl_nil - it('Z3: nil is translated to speckl_nil sentinel', () => { - expect(z3Output).toContain('(declare-const speckl_nil Int)'); - expect(z3Output).toContain('speckl_nil'); - // Ensure we did NOT regress to bare nil / null - expect(z3Output).not.toMatch(/\bnil\b/); - }); - - // 5. Z3: != produces (distinct X Y) not bare 'distinct' - it('Z3: != produces wrapped (distinct X Y) not bare distinct', () => { - // The constraint g.hosting_tier != Free should emit (distinct g_hosting_tier Free) - expect(z3Output).toContain('(distinct g_hosting_tier Free)'); - // Ensure we did NOT regress to bare 'distinct g_hosting_tier Free' without parens - // (the fix wraps the operator in parens) - // A bare distinct would look like "g_hosting_tier distinct Free" without surrounding parens - expect(z3Output).not.toMatch(/[^(]\w+\s+distinct\s+\w+/); - }); - - // 6. TS: implies(p,q) → (!p || q) not (p || q) - it('TS: implies(p, q) translates to (!p || q), not (p || q)', () => { - // constraint 6: implies(o.status == Refunded, o.refunded_at != nil) - // Should become (!(o.status === ...) || (o.refunded_at !== ...)) - expect(tsOutput).toContain('(!('); - expect(tsOutput).toContain('||'); - // The specific pattern: (!(o.status === ... || (o.refunded_at !== nil)) - expect(tsOutput).toMatch(/!\(o\.status === .* \|\| \(o\.refunded_at !== /); - // Ensure the CODE (not comments) has negation on p. - // A regression would have `return this.orders.every((o: any) => (o.status ===` - // (without the `!(` negation before `o.status`). - // Strip comments to avoid matching the original spec text in comments. - const tsNoComments = tsOutput.replace(/^\s*\/\/.*$/gm, ''); - // Positive: the every() body starts with (!(o.status — the (! is the negation - expect(tsNoComments).toMatch(/every\(\(o:\s*any\)\s*=>\s*\(!\(o\.status/); - // Negative: a regression would have every((o: any) => (o.status without the ! negation - expect(tsNoComments).not.toMatch(/every\(\(o:\s*any\)\s*=>\s*\(o\.status/); - }); - - // 7. TS: constraint checks emit real every() not return true - it('TS: constraint checks emit real .every() calls, not return true', () => { - expect(tsOutput).toContain('.every('); - // Multiple constraints use every() — at least 8 constraints - const everyCount = (tsOutput.match(/\.every\(/g) || []).length; - expect(everyCount).toBeGreaterThanOrEqual(8); - // Ensure we did NOT regress to `return true` stubs - // A stub would have checkConstraintN() { return true; } - expect(tsOutput).not.toMatch(/checkConstraint\d+\(\):\s*boolean\s*\{\s*return\s*true\s*;\s*\}/); - }); - - // 8. TS: 'in' operator in verify expressions → .has() not raw 'in' - it('TS: "in" operator in verify expressions translates to .has(), not raw in', () => { - // V1: always(implies(event == PurchaseTicket, ticket_id in tickets)) - // Should become tickets.has(ticket_id) - expect(tsOutput).toContain('.has('); - expect(tsOutput).toContain('tickets.has(ticket_id)'); - // Ensure we did NOT regress to raw 'in' operator (JS `in` checks property keys, not membership). - // A regression would look like `ticket_id in tickets` in CODE (not comments). - // Strip comments to avoid matching the original spec text in comments. - const tsNoComments = tsOutput.replace(/^\s*\/\/.*$/gm, ''); - expect(tsNoComments).not.toMatch(/\bticket_id\s+in\s+tickets\b/); - }); - - // 9. TS/Rust: multiple verify blocks all emitted (memberKey dedup fix) - it('TS: all 6 verify blocks are emitted (memberKey dedup fix)', () => { - // The spec has 6 verify blocks; previously dedup killed all but the first - expect(tsOutput).toContain('verify1'); - expect(tsOutput).toContain('verify2'); - expect(tsOutput).toContain('verify3'); - expect(tsOutput).toContain('verify4'); - expect(tsOutput).toContain('verify5'); - expect(tsOutput).toContain('verify6'); - expect(tsOutput).not.toContain('verify7'); // only 6 verify blocks in spec - }); - - it('Rust: all 6 verify blocks are emitted (memberKey dedup fix)', () => { - expect(rustOutput).toContain('verify_1'); - expect(rustOutput).toContain('verify_2'); - expect(rustOutput).toContain('verify_3'); - expect(rustOutput).toContain('verify_4'); - expect(rustOutput).toContain('verify_5'); - expect(rustOutput).toContain('verify_6'); - expect(rustOutput).not.toContain('verify_7'); - }); - - // 10. Rust: constraint checks emit iter().all() not return true - it('Rust: constraint checks emit iter().all(), not return true stubs', () => { - expect(rustOutput).toContain('.iter().all('); - // Multiple constraints use iter().all() — at least 8 constraints - const iterAllCount = (rustOutput.match(/\.iter\(\)\.all\(/g) || []).length; - expect(iterAllCount).toBeGreaterThanOrEqual(8); - // Ensure we did NOT regress to `return true` stubs - expect(rustOutput).not.toMatch(/check_invariant_\d+\(&self\)\s*->\s*bool\s*\{\s*true\s*\}/); - }); - - // 11. Rust: implies() → (!p || q) in Rust - it('Rust: implies(p, q) translates to (!p || q) in Rust', () => { - // constraint 6: implies(o.status == Refunded, o.refunded_at != nil) - // Should become (!(o.status == ... || (o.refunded_at != ...)) - expect(rustOutput).toContain('(!('); - expect(rustOutput).toMatch(/!\(o\.status == .* \|\| \(o\.refunded_at != /); - // Ensure the CODE (not comments) has negation on p. - // A regression would have `self.orders.iter().all(|o| (o.status ==` - // (without the `!(` negation before `o.status`). - // Strip comments to avoid matching the original spec text in comments. - const rustNoComments = rustOutput.replace(/^\s*\/\/.*$/gm, ''); - // Positive: the iter().all() body starts with (!(o.status — the (! is the negation - expect(rustNoComments).toMatch(/iter\(\)\.all\(\|o\|\s*\(!\(o\.status/); - // Negative: a regression would have iter().all(|o| (o.status without the ! negation - expect(rustNoComments).not.toMatch(/iter\(\)\.all\(\|o\|\s*\(o\.status/); - }); -}); \ No newline at end of file diff --git a/compiler/src/generators/protobuf.ts b/compiler/src/generators/protobuf.ts deleted file mode 100644 index 60add9a..0000000 --- a/compiler/src/generators/protobuf.ts +++ /dev/null @@ -1,376 +0,0 @@ -/** - * Generate Protocol Buffers (proto3) from a SpeckDL spec. - * - * This is the load-bearing backend for the "no glue code" claim: - * the .proto file emitted here is the canonical wire format. Run - * `buf generate` on the output to produce Go / TypeScript / Rust / C - * / Python / Java / etc. bindings — every gRPC and ConnectRPC ecosystem - * gets free bindings with zero hand-written converters. - * - * Mapping: - * event X { name: String, age: Nat } -> message X { string name = 1; uint64 age = 2; } - * interface T { Foo, Bar } -> enum T { T_FOO = 0; T_BAR = 1; } - * interface X { field: Type } -> message X { Type field = 1; } - * state: { foo: Type, bar: Type } -> message StateSnapshot { Type foo = 1; Type bar = 2; } - * service S { rpc M(R) returns (Rsp);} -> service S { rpc M(R) returns (Rsp); } - * constraint: ... -> comment in generated .proto - * verify: ... -> comment in generated .proto - * bom { ... } -> file-level metadata - * - * Deterministic: field numbering is alphabetical by field name, so the same - * .speckdl always produces the same .proto byte-for-byte. Matches Speckl's - * existing determinism claim. - */ - -import { AST, SpeckNode, MemberNode, StateNode, EventNode, InterfaceNode, TypeExpr, ServiceNode, TransitionNode, OneofNode } from '../parser.js'; -import fs from 'fs'; -import path from 'path'; - -const PROTO3 = 'proto3'; - -// SpeckDL type -> proto3 type -function speckTypeToProto(typeName: string): string { - const t = typeName.trim(); - switch (t) { - case 'String': return 'string'; - case 'StringList': return 'repeated string'; - case 'Nat': return 'uint64'; - case 'NatList': return 'repeated uint64'; - case 'Int': return 'int64'; - case 'IntList': return 'repeated int64'; - case 'Bool': return 'bool'; - case 'BoolList': return 'repeated bool'; - case 'Bytes': return 'bytes'; - case 'BytesList': return 'repeated bytes'; - case 'Real': return 'double'; - case 'Date': return 'google.protobuf.Timestamp'; - default: - // User-defined types: passed through verbatim. The user is responsible - // for ensuring these resolve to messages/enums defined elsewhere in - // the same .proto (or imported). - return t; - } -} - -// Resolve a TypeExpr (which may be primitive, ident, list, map, set) to a -// proto3 type string. Used by all field-emitting code paths so that -// interface records, events, state, and transitions all handle -// List, Map, and Set consistently. -// Cycle 73: extracted from inline code in event/state/transition emitters. -// Previously, interface record fields only called speckTypeToProto(f.type.name) -// which returned '' for List/Map/Set types (their .name is undefined), -// producing malformed proto like ` = 1;` with no type. -function typeExprToProto(t: TypeExpr): string { - if (t.type === 'map' && t.keyType && t.valueType) { - const k = speckTypeToProto(t.keyType.name || 'string'); - const v = speckTypeToProto(t.valueType.name || 'bytes'); - return `map<${k}, ${v}>`; - } - if (t.type === 'list' && t.elementType) { - const inner = typeExprToProto(t.elementType); - return `repeated ${inner}`; - } - if (t.type === 'set' && t.elementType) { - const inner = typeExprToProto(t.elementType); - return `repeated ${inner}`; - } - // Primitive or ident — fall back to name-based lookup - return speckTypeToProto(t.name || ''); -} - -// Deterministic field numbering: alphabetical by field name, 1-indexed. -function assignFieldNumbers(fields: { name: string }[]): Map { - const sorted = [...fields].sort((a, b) => a.name.localeCompare(b.name)); - const map = new Map(); - sorted.forEach((f, i) => map.set(f.name, i + 1)); - return map; -} - -function snakeCase(s: string): string { - return s - .replace(/([a-z0-9])([A-Z])/g, '$1_$2') - .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2') - .toLowerCase(); -} - -function pascalCase(s: string): string { - return s - .replace(/[_\-]+/g, ' ') - .replace(/\s+(.)/g, (_, c: string) => c.toUpperCase()) - .replace(/^(.)/, (_, c: string) => c.toUpperCase()) - .replace(/\s/g, ''); -} - -function upperSnake(s: string): string { - return snakeCase(s).toUpperCase(); -} - -interface InterfaceField { - name: string; - type: TypeExpr; // matches parser's MethodSignature.params shape -} - -interface InterfaceKind { - name: string; - isEnum: boolean; - isMessage: boolean; - variants?: string[]; - fields?: InterfaceField[]; -} - -// Use the parser's `kind` discriminator to route each interface to the -// correct proto3 construct. The parser sets `kind` based on what was found -// in the interface block: -// 'enum' → proto3 enum (variants) -// 'record' → proto3 message (fields) -// 'service' → proto3 service (rpc methods) — handled separately -// 'mixed' → inspect methods/fields directly to disambiguate -function classifyInterfaces(members: MemberNode[]): Map { - const result = new Map(); - for (const m of members) { - if (m.type !== 'interface') continue; - const iface = m as any; // parser uses kind/fields now - switch (iface.kind) { - case 'enum': - result.set(iface.name, { - name: iface.name, - isEnum: true, - isMessage: false, - variants: iface.methods.map((meth: any) => meth.name), - }); - break; - case 'record': - result.set(iface.name, { - name: iface.name, - isEnum: false, - isMessage: true, - fields: iface.fields, - }); - break; - case 'service': - // Services emitted separately; skip in this map - break; - case 'mixed': - default: - if (iface.fields && iface.fields.length > 0) { - result.set(iface.name, { - name: iface.name, - isEnum: false, - isMessage: true, - fields: iface.fields, - }); - } else if (iface.methods && iface.methods.length > 0) { - result.set(iface.name, { - name: iface.name, - isEnum: true, - isMessage: false, - variants: iface.methods.map((meth: any) => meth.name), - }); - } - break; - } - } - return result; -} - -export function generateProtobuf(ast: AST, outputDir: string, packageName?: string): void { - for (const speck of ast.specks) { - const code = emitSpeck(speck, packageName); - const filename = `${snakeCase(speck.name)}.proto`; - const filepath = path.join(outputDir, filename); - fs.writeFileSync(filepath, code); - console.log(`Generated protobuf schema: ${filepath}`); - } -} - -function emitSpeck(speck: SpeckNode, packageName?: string): string { - const members = speck.members; - const stateNode = members.find(m => m.type === 'state') as StateNode | undefined; - const events = members.filter(m => m.type === 'event') as EventNode[]; - const interfaces = classifyInterfaces(members); - - const pkg = (speck as any).protoPackage || packageName || `speckl.${snakeCase(speck.name)}.v1`; - const goPkg = (speck as any).goPackage - || `github.com/sscoble/${snakeCase(speck.name)}/proto/${snakeCase(speck.name)}/v1;${snakeCase(speck.name)}v1`; - - const lines: string[] = []; - - // Header - lines.push('// Auto-generated by speckl-compile from ' + speck.name + '.speckdl'); - lines.push('// DO NOT EDIT MANUALLY — regenerate from the .speckdl source'); - lines.push('// SPDX-License-Identifier: MIT'); - lines.push(''); - lines.push('syntax = "' + PROTO3 + '";'); - lines.push(''); - lines.push('package ' + pkg + ';'); - lines.push(''); - lines.push('option go_package = "' + goPkg + '";'); - lines.push(''); - // Import google.protobuf.Timestamp if any field uses Date. - // Cycle 73: extended to also check interface record fields (not just - // events and state). Previously, a spec with Date only in interface - // records (e.g. Ticket.sale_starts_at) would miss the import. - const usesTimestamp = members.some(m => { - if (m.type === 'event') { - return (m as EventNode).fields.some(f => f.type.name === 'Date' || - (f.type.type === 'list' && f.type.elementType?.name === 'Date')); - } - if (m.type === 'state') { - return (m as StateNode).variables.some(v => - v.typeExpr.name === 'Date' || - (v.typeExpr.type === 'list' && v.typeExpr.elementType?.name === 'Date') - ); - } - if (m.type === 'interface') { - const iface = m as any; - if (iface.fields && iface.fields.length > 0) { - return iface.fields.some((f: any) => - f.type.name === 'Date' || - (f.type.type === 'list' && f.type.elementType?.name === 'Date') - ); - } - } - return false; - }); - if (usesTimestamp) { - lines.push('import "google/protobuf/timestamp.proto";'); - lines.push(''); - } - - // ─── Enums (interface with variants) ──────────────────────── - for (const [, iface] of Array.from(interfaces.entries())) { - if (iface.isEnum && iface.variants) { - lines.push(`enum ${iface.name} {`); - lines.push(` ${upperSnake(iface.name)}_UNSPECIFIED = 0;`); - iface.variants.forEach((v, i) => { - // Cycle 73: prefix variant with enum name to avoid collisions - // across enums in the same proto scope. Proto3 requires all enum - // values to be unique within the enclosing scope (not just the - // enum), so PENDING in Role and PENDING in OrderStatus collide. - // Prefixing with the enum name (ROLE_PENDING, ORDER_STATUS_PENDING) - // is the proto3 convention and eliminates the collision. - lines.push(` ${upperSnake(iface.name)}_${upperSnake(v)} = ${i + 1};`); - }); - lines.push('}'); - lines.push(''); - } - } - - // ─── Messages (interface with fields, plus events) ───────── - // First emit interface-messages (record types like BranchInfo, CustodyDeclaration) - for (const [, iface] of Array.from(interfaces.entries())) { - if (iface.isMessage && iface.fields && iface.fields.length > 0) { - lines.push(`message ${iface.name} {`); - const fieldNums = assignFieldNumbers(iface.fields); - for (const f of iface.fields) { - const num = fieldNums.get(f.name) || 1; - const protoType = typeExprToProto(f.type); - lines.push(` ${protoType} ${snakeCase(f.name)} = ${num};`); - } - lines.push('}'); - lines.push(''); - } - } - - // Then emit events as messages - for (const ev of events) { - // Cycle 61: honor `event_suffix: "Payload"` directive so emitted - // message names match consumer Go bindings (e.g. CreateGroupPayload - // instead of CreateGroup). - const evName = speck.eventSuffix ? ev.name + speck.eventSuffix : ev.name; - lines.push(`message ${evName} {`); - if (ev.fields.length === 0) { - lines.push(' // empty event'); - } else { - const fieldNums = assignFieldNumbers(ev.fields); - for (const f of ev.fields) { - const num = fieldNums.get(f.name) || 1; - const protoType = typeExprToProto(f.type); - lines.push(` ${protoType} ${snakeCase(f.name)} = ${num};`); - } - } - lines.push('}'); - lines.push(''); - } - - // Then emit state snapshot as a message - if (stateNode && stateNode.variables.length > 0) { - // Cycle 59: honor `state as ` override so the consumer Go code - // can import the generated message by the expected name (e.g. - // StateSnapshot instead of FederatedMeetupState). - const msgName = stateNode.messageName || `${pascalCase(speck.name)}State`; - lines.push(`message ${msgName} {`); - const fieldNums = assignFieldNumbers(stateNode.variables); - for (const v of stateNode.variables) { - const num = fieldNums.get(v.name) || 1; - const protoType = typeExprToProto(v.typeExpr); - lines.push(` ${protoType} ${snakeCase(v.name)} = ${num};`); - } - lines.push('}'); - lines.push(''); - } - - // Cycle 64: emit TransitionNode messages. A `transition Name { ... }` - // block produces a proto message with the regular fields plus an inline - // `oneof payload { ... }` block, whose variants are pulled from a - // sibling `oneof { ... }` block referenced by `payload: `. - // Field numbers are assigned starting at 1; the oneof variants use - // 10, 11, 12, ... (proto convention: leave 1-15 for the most stable - // fields so the wire format is forward-compatible). - const transitionNodes = members.filter(m => m.type === 'transition') as TransitionNode[]; - const oneofNodes = members.filter(m => m.type === 'oneof') as OneofNode[]; - for (const t of transitionNodes) { - lines.push(`message ${t.name} {`); - // Cycle 73: emit the type discriminator field. The parser stores it - // in t.typeDiscriminator (a string naming the enum) rather than in - // t.fields, so it must be emitted explicitly. Field number 1 is - // reserved for the type discriminator (it's the most-accessed field). - if (t.typeDiscriminator) { - lines.push(` ${t.typeDiscriminator} type = 1;`); - } - const fieldNums = assignFieldNumbers(t.fields); - for (const f of t.fields) { - const num = fieldNums.get(f.name) || 1; - // If type discriminator is present, offset field numbers by 1 - // to avoid collision with the type field at number 1. - const actualNum = t.typeDiscriminator ? num + 1 : num; - const protoType = typeExprToProto(f.type); - lines.push(` ${protoType} ${snakeCase(f.name)} = ${actualNum};`); - } - if (t.payloadOneof) { - const oneof = oneofNodes.find(o => o.name === t.payloadOneof); - if (oneof) { - lines.push(' oneof payload {'); - oneof.variants.forEach((v, i) => { - // Reference the suffixed message name if event_suffix is set, - // so the oneof variants match what the consumer Go code expects. - const variantType = speck.eventSuffix ? v.typeName + speck.eventSuffix : v.typeName; - lines.push(` ${variantType} ${v.fieldName} = ${i + 10};`); - }); - lines.push(' }'); - } - } - lines.push('}'); - lines.push(''); - } - - // ─── Service (RPC surface) ────────────────────────────────── - // ServiceNode members emit proto3 service blocks. These map directly to - // gRPC and ConnectRPC service definitions; buf generate + protoc-gen-go - // + protoc-gen-connect-go produce client stubs and Connect handlers. - const serviceNodes = members.filter((m: any) => m.type === 'service') as ServiceNode[]; - if (serviceNodes.length > 0) { - for (const svc of serviceNodes) { - lines.push(`service ${svc.name} {`); - for (const rpc of svc.rpcs) { - const reqStream = rpc.clientStreaming ? 'stream ' : ''; - const resStream = rpc.serverStreaming ? 'stream ' : ''; - lines.push(` rpc ${pascalCase(rpc.name)}(${reqStream}${rpc.requestType}) returns (${resStream}${rpc.responseType});`); - } - lines.push('}'); - lines.push(''); - } - } - - return lines.join('\n'); -} \ No newline at end of file diff --git a/compiler/src/generators/rust.ts b/compiler/src/generators/rust.ts index 61a5e09..45d5d3e 100644 --- a/compiler/src/generators/rust.ts +++ b/compiler/src/generators/rust.ts @@ -48,30 +48,6 @@ description = "Auto-generated Speck state machine: ${speck.name}" } } -/** - * Translate SpeckDL implies() to Rust boolean expression. - * implies(p, q) → (!p || q) in Rust. - * Also handles bare implies: implies A B → (!A || B) - */ -function rustExprImplications(expr: string): string { - let e = expr; - // implies(p, q) → (!(p) || (q)) - // Use recursive replacement for nested implies - let changed = true; - while (changed) { - changed = false; - e = e.replace(/implies\s*\(([^,()]*(?:\([^()]*\)[^()]*)*),\s*([^()]+)\)/g, (_, p, q) => { - changed = true; - return `(!(${p.trim()}) || (${q.trim()}))`; - }); - } - // nil → Rust's Option::None equivalent: use a sentinel. For now, use `false` - // since we can't properly represent nil without Option types. - e = e.replace(/\bnil\b/g, 'false /* nil sentinel */'); - // == → == (already Rust), != → != (already Rust) - return e; -} - function emitSpeck(speck: SpeckNode): string { const deduped = new Map(); for (const m of speck.members) { @@ -222,29 +198,6 @@ function emitSpeck(speck: SpeckNode): string { return `#[derive(Debug, Clone)]\npub struct ${e.name} {\n${fields}\n}`; }).join('\n\n'); - // Cycle 73: Event enum union for the decision log. - // Each variant wraps the corresponding event struct. - const eventEnum = events.length > 0 - ? `#[derive(Debug, Clone)]\npub enum ${speck.name}Event {\n` + - events.map(e => ` ${e.name}(${e.name}),`).join('\n') + - `\n}` - : ''; - - // Cycle 73: Interface record structs (Money, Ticket, Order, etc.) - // Previously only events were emitted as structs. Interface records - // with fields (kind === 'record') are now emitted too. - const recordInterfaces = allInterfaces.filter(iface => - iface?.kind === 'record' || (iface?.fields && iface.fields.length > 0) - ); - const recordStructs = recordInterfaces.map(iface => { - const fields = iface.fields.map((f: any) => { - const name = snakeCase(cleanName(f.name)); - const ty = rustType(f.type, speck.name, enumMap); - return ` pub ${name}: ${ty},`; - }).join('\n'); - return `#[derive(Debug, Clone)]\npub struct ${iface.name} {\n${fields}\n}`; - }).join('\n\n'); - const structName = `${speck.name}Machine`; // State variables with original name + snake_case name mapping @@ -303,70 +256,28 @@ function emitSpeck(speck: SpeckNode): string { .map(a => emitAction(a, stateVarOrigNames, nameMap, mapVarOrigNames, speck.name, stateEnumName, allKnownStateValues, enumMap)) .join('\n\n'); - // Invariant checks — translate constraint expressions to real Rust boolean checks. - // Constraint syntax: forall var in collection: expr - // → collection.iter().all(|var| translated_expr) - // Or: direct boolean expression → translated_expr - const invariantChecks = constraints.map((c, i) => { - const cExpr = c.expr.trim(); - const forallMatch = cExpr.match(/^forall\s+(\w+)\s+in\s+(\w+):\s*(.+)$/s); - let rustBody: string; - if (forallMatch) { - const [, varName, collName, body] = forallMatch; - const rustColl = nameMap.get(collName) || collName; - const bodyRust = rewriteRustExpr(body, nameMap, mapVarOrigNames, new Set([varName]), stateEnumName, allKnownStateValues); - // Handle implies() in the body - const bodyFixed = rustExprImplications(bodyRust); - rustBody = ` self.${rustColl}.iter().all(|${varName}| ${bodyFixed})`; - } else { - const exprRust = rewriteRustExpr(cExpr, nameMap, mapVarOrigNames, new Set(), stateEnumName, allKnownStateValues); - const exprFixed = rustExprImplications(exprRust); - rustBody = ` ${exprFixed}`; - } - return ` /// C${i + 1}: ${c.expr}\n` + - ` pub fn check_invariant_${i + 1}(&self) -> bool {\n` + - ` // Expression: ${c.expr}\n` + - `${rustBody}\n` + - ` }`; - }).join('\n\n'); + // Invariant checks + const invariantChecks = constraints.map((c, i) => + ` /// C${i + 1}: ${c.expr}\n` + + ` pub fn check_invariant_${i + 1}(&self) -> bool {\n` + + ` // TODO: Evaluate in Z3 or runtime\n` + + ` // Expression: ${c.expr}\n` + + ` true\n` + + ` }` + ).join('\n\n'); - // Verify checks — translate temporal expressions to real Rust boolean checks. - // LTL: always(p) → p must hold at current state + every decision-log entry. - // eventually(p) → p must hold at some step. - const verifyChecks = verifies.map((v, i) => { - const formula = v.temporalExpr.trim(); - const ltlMatch = formula.match(/^(?:always|eventually)\s*\(([\s\S]*)\)$/); - const op = ltlMatch ? formula.match(/^(always|eventually)/)?.[1] : null; - const inner = ltlMatch ? ltlMatch[1].trim() : formula; - const innerRust = rustExprImplications(rewriteRustExpr(inner, nameMap, mapVarOrigNames, new Set(), stateEnumName, allKnownStateValues)); - let body: string; - if (op === 'always') { - body = ` if !(${innerRust}) return false;\n` + - ` for _evt in &self.decision_log {\n` + - ` if !(${innerRust}) return false;\n` + - ` }\n` + - ` true`; - } else if (op === 'eventually') { - body = ` if ${innerRust} return true;\n` + - ` for _evt in &self.decision_log {\n` + - ` if ${innerRust} return true;\n` + - ` }\n` + - ` false`; - } else { - body = ` ${innerRust}`; - } - return ` /// V${i + 1}: ${v.temporalExpr}\n` + - ` pub fn verify_${i + 1}(&self) -> bool {\n` + - ` // Temporal: ${v.temporalExpr}\n` + - `${body}\n` + - ` }`; - }).join('\n\n'); + // Verify stubs + const verifyChecks = verifies.map((v, i) => + ` /// V${i + 1}: ${v.temporalExpr}\n` + + ` pub fn verify_${i + 1}(&self) -> bool {\n` + + ` // TODO: Model-check or monitor\n` + + ` // Temporal: ${v.temporalExpr}\n` + + ` true\n` + + ` }` + ).join('\n\n'); - // Decision log type — cycle 73: use an enum union of all event types, - // not just the first one. If there are no events, fall back to String. - const logEventType = events.length > 0 - ? `Vec<${speck.name}Event>` - : 'Vec'; + // Decision log type + const logEventType = events.length > 0 ? `Vec<${events[0].name}>` : 'Vec'; // Struct definition const structDef = `/// Speck state machine: ${speck.name}\n` + @@ -407,13 +318,11 @@ function emitSpeck(speck: SpeckNode): string { `// DO NOT EDIT MANUALLY — regenerate from .speckdl source\n\n` + `use std::collections::{HashMap, HashSet};\n\n` + `${stateEnum}\n\n` + - `${recordStructs ? recordStructs + '\n\n' : ''}` + `${eventStructs}\n\n` + - `${eventEnum ? eventEnum + '\n\n' : ''}` + `${structDef}\n\n` + `${constructor}\n\n` + `${actionImpl}\n` + - `${invariantImpl}` + + `${invariantImpl}\n` + `${verifyImpl}\n`; return file; @@ -541,7 +450,7 @@ function rewriteRustExpr( // Step 1: Replace function calls let rust = expr - .replace(/\bnow\(\)/g, 'std::time::SystemTime::now().duration_since(std::time::UNIX_EPOCH).unwrap().as_secs()') + .replace(/\bnow\(\)/g, '0u64 /* TODO: use std::time::SystemTime */') .replace(/\blen\(([^)]+)\)/g, '$1.len()') .replace(/\blength\(([^)]+)\)/g, '$1.len()') .replace(/\bjoin\(([^,]+),\s*([^)]+)\)/g, '$1.join($2)') @@ -646,13 +555,6 @@ function memberKey(m: MemberNode): string { if (m.type === 'bom') return 'bom'; if (m.type === 'input') return 'input'; if (m.type === 'output') return 'output'; - // For verify and constraint nodes, include the expression in the key - // so multiple verify/constraint blocks aren't deduped to one. - if (m.type === 'verify') return `verify:${(m as any).temporalExpr || ''}`; - if (m.type === 'constraint') return `constraint:${(m as any).expr || ''}`; - if (m.type === 'oneof') return `oneof:${(m as any).name || ''}`; - if (m.type === 'transition') return `transition:${(m as any).name || ''}`; - if (m.type === 'service') return `service:${(m as any).name || ''}`; return m.type; } @@ -717,8 +619,6 @@ function rustType(t: any, speckName: string = '', enumMap?: Map', Number: 'f64', - // Cycle 73: Date → u64 Unix timestamp (avoids chrono dependency). - Date: 'u64', }; return map[t.name] || t.name.toLowerCase(); } @@ -745,7 +645,6 @@ function rustType(t: any, speckName: string = '', enumMap?: Map from SpeckDL's Option(Type) syntax const optionMatch = rawName.match(/^Option[_(]\s*(\w+)\s*\)?$/); if (optionMatch) { diff --git a/compiler/src/generators/typescript-state-machine.ts b/compiler/src/generators/typescript-state-machine.ts index 4dd7a23..aa97b66 100644 --- a/compiler/src/generators/typescript-state-machine.ts +++ b/compiler/src/generators/typescript-state-machine.ts @@ -187,22 +187,6 @@ function emitSpeck(speck: SpeckNode): string { } const stateEnum = allEnums.join('\n\n'); - // Cycle 73: emit interface record types as TS interfaces. - // Previously only events were emitted as TS interfaces; interface records - // (Money, Ticket, Order, etc.) were missing from the output. - const recordInterfaces = allInterfaces.filter(iface => - (iface?.kind === 'record' || (iface?.fields && iface.fields.length > 0)) && - // Skip enum-like interfaces (they have methods, not fields) - !iface?.methods?.length - ); - const recordInterfaceStr = recordInterfaces.map(iface => { - const fields = iface.fields.map((f: any) => { - const name = cleanName(f.name); - return ` ${name}: ${tsType(f.type, speck.name, enumMap)};`; - }).join('\n'); - return `export interface ${iface.name} {\n${fields}\n}`; - }).join('\n\n'); - const eventInterfaces = [ // Explicit event declarations ...events.map(e => { @@ -276,135 +260,23 @@ function emitSpeck(speck: SpeckNode): string { const actionMethods = actions.map(a => emitAction(a, stateVarNames, mapVarNames, speck.name, stateEnumName, allKnownStateValues, enumMap)).join('\n\n'); - const constraintChecks = constraints.map((c, i) => { - // Translate constraint expression to a real TS boolean check. - // Constraint syntax: forall var in collection: expr - // → collection.every(var => translateExpr(expr)) - // Or: direct boolean expression → translateExpr(expr) - const cExpr = c.expr.trim(); - const forallMatch = cExpr.match(/^forall\s+(\w+)\s+in\s+(\w+):\s*(.+)$/s); - let tsBody: string; - if (forallMatch) { - const [, varName, collName, body] = forallMatch; - // Translate the body expression for TS - const bodyTs = rewriteExpr( - translateLtlInner(body), - stateVarNames, - mapVarNames, - new Set([varName]), // bound variable — don't prefix with this. - stateEnumName, - allKnownStateValues - ); - tsBody = ` return this.${collName}.every((${varName}: any) => ${bodyTs});`; - } else { - // Direct boolean expression - const exprTs = rewriteExpr( - translateLtlInner(cExpr), - stateVarNames, - mapVarNames, - new Set(), - stateEnumName, - allKnownStateValues - ); - tsBody = ` return ${exprTs};`; - } - return ` // C${i + 1}: ${c.expr}\n` + - ` checkConstraint${i + 1}(): boolean {\n` + - ` // Expression: ${c.expr}\n` + - `${tsBody}\n` + - ` }`; - }).join('\n\n'); + const constraintChecks = constraints.map((c, i) => + ` // C${i + 1}: ${c.expr}\n` + + ` checkConstraint${i + 1}(): boolean {\n` + + ` // TODO: Evaluate in Z3 or runtime\n` + + ` // Expression: ${c.expr}\n` + + ` return true;\n` + + ` }` + ).join('\n\n'); - // Build verifyN() methods. Each verify block declares an LTL formula - // (e.g. `always(implies(P, Q))`). The Z3 generator has BMC unrolling - // (compiler/src/generators/z3.ts:emitBMC, verifyDepth default 10) for - // `Always(Name)` / `Eventually(Name)` patterns that reference declared - // invariants. For inline SpeckDL boolean expressions inside `always(...)` - // / `eventually(...)` — which is what the example specs use — Z3's BMC - // doesn't have direct support. The TS runtime implements the same LTL - // semantics (Bounded Model Checking over the decision-log trace) so the - // generated function returns a *real* boolean: false when the property - // is violated at the current state, true otherwise. - // - // Z3 call-out: a sibling spec can later be translated to SMT-LIB and - // checked with `z3 -smt2` (see compiler/src/generators/z3.ts). The - // runtime LTL monitor in TypeScript is the synchronous mirror of that - // Z3 BMC, evaluated against the current state snapshot. - const verifyChecks = verifies.map((v, i) => { - const formula = v.temporalExpr.trim(); - const ltlMatch = formula.match(/^(always|Always|eventually|Eventually)\s*\(([\s\S]*)\)$/); - const op = ltlMatch ? ltlMatch[1].toLowerCase() : null; - // The inner expression is the rest of the formula. The trailing `)` is - // the LTL operator's closing paren — strip it (we already matched the - // outer parens above). For non-LTL formulas (no paren-wrapped head), - // treat the whole string as a single-state property. - const innerRaw = ltlMatch ? ltlMatch[2].trim() : formula; - // The LTL formula's body is a SpeckDL boolean expression. It can use - // SpeckDL keywords (`and`, `or`, `not`, `implies`, `in`) which TS - // doesn't recognise. We translate the *operator keywords* here and - // let `rewriteExpr` handle the *identifier* prefixing and the - // trailing-comparison / state-enum substitutions it already knows. - const innerTs = rewriteExpr( - translateLtlInner(innerRaw), - stateVarNames, - mapVarNames, - new Set(), // no action-local names in a verify body - stateEnumName, - allKnownStateValues - ); - // rewriteExpr turns bare SpeckDL identifiers that are state variables - // into `this.`, so the LTL formula evaluates against the current - // class state. At the moment verifyN() is called, `this` IS the state - // we are checking. - // - // For `always(p)`: p must hold at every step in the trace. The trace - // is the current state plus the decision-log boundary markers. The - // LTL property is *violated* the first time p is false at any step. - // For `eventually(p)`: p must hold at some step in the trace. - // For unknown LTL operators, evaluate the raw formula at current state. - // - // The decision log contains emit() payloads from action executions. - // Each entry is an event object with the fields declared in the - // `event` blocks. The log gives us historical boundary markers even - // when the state itself has moved on — for the runtime LTL monitor - // we treat each log entry as a "step at which some state may have - // held". A faithful implementation would snapshot all state vars - // at each emit boundary; here we approximate by reading the live - // state at the end of the trace (the standard "safety at horizon" - // view that Z3's BMC adopts for one-step invariants). - const ltlBody = op === 'always' - ? ` // LTL: always(p). Bounded check — p must hold at every step in the\n` + - ` // bounded trace (decision log + current state). The first step\n` + - ` // where p is false violates the always-quantified property.\n` + - ` if (!(${innerTs})) return false;\n` + - ` for (const _evt of this.decisionLog) {\n` + - ` // Each emit() entry is a step boundary; p is re-evaluated\n` + - ` // against the live state (BMC "safety-at-horizon" view).\n` + - ` if (!(${innerTs})) return false;\n` + - ` }\n` + - ` return true;` - : op === 'eventually' - ? ` // LTL: eventually(p). Bounded check — p must hold at some step.\n` + - ` if (${innerTs}) return true;\n` + - ` for (const _evt of this.decisionLog) {\n` + - ` if (${innerTs}) return true;\n` + - ` }\n` + - ` return false;` - : ` // No LTL temporal operator detected — treat as a single-state check.\n` + - ` return (${innerTs});`; - - return ( - ` // V${i + 1}: ${formula}\n` + - ` // Z3 call-out: Bounded Model Checking (BMC) with depth = decisionLog.length+1.\n` + - ` // Mirrors the SMT-LIB BMC emitted by compiler/src/generators/z3.ts (emitBMC).\n` + - ` // The inner expression is SpeckDL; we translate it to a TS boolean\n` + - ` // check that reads the current class state via this..\n` + - ` async verify${i + 1}(): Promise {\n` + - ` // Temporal: ${formula}\n` + - `${ltlBody}\n` + - ` }` - ); - }).join('\n\n'); + const verifyChecks = verifies.map((v, i) => + ` // V${i + 1}: ${v.temporalExpr}\n` + + ` async verify${i + 1}(): Promise {\n` + + ` // TODO: Model-check or monitor\n` + + ` // Temporal: ${v.temporalExpr}\n` + + ` return true;\n` + + ` }` + ).join('\n\n'); // Decision log type: use first event if available, otherwise any[] const logType = events.length > 0 ? '(' + events.map(e => e.name).join(' | ') + ')[]' : 'any[]'; @@ -465,7 +337,6 @@ ${verifyChecks} `// Auto-generated by speckl-compile from ${speck.name}\n` + `// DO NOT EDIT MANUALLY — regenerate from .speckdl source\n\n` + `${stateEnum}\n\n` + - `${recordInterfaceStr ? recordInterfaceStr + '\n\n' : ''}` + `${eventInterfaces}\n\n` + `${hashUtility}` + `${classBody}`; @@ -727,9 +598,6 @@ function rewriteExpr(expr: string, stateVarNames: Set, mapVarNames: Set< // 5a: x in .keys -> .has(x) (e.g. "t.from in accounts.keys" -> "accounts.has(t.from)") ts = ts.replace(/(\S+)\s+in\s+(\S+)\.keys/g, '$2.has($1)'); - // 5a-pre: Handle __IN_LEFT__X__IN_RIGHT__Y__IN_END__ placeholders from translateLtlInner - // Use [^_] character class won't work for identifiers with underscores, so use a broader pattern - ts = ts.replace(/__IN_LEFT__([A-Za-z_][A-Za-z0-9_.]*)__IN_RIGHT__([A-Za-z_][A-Za-z0-9_.]*)__IN_END__/g, '$2.has($1)'); // 5a3: x in -> .has(x) (e.g. "id in pending" -> "pending.has(id)") ts = ts.replace(/(\S+)\s+in\s+(\S+)/g, (match, key, collection) => { // Only replace if collection looks like a state variable (not a JS keyword) @@ -918,13 +786,6 @@ function memberKey(m: MemberNode): string { if (m.type === 'bom') return 'bom'; if (m.type === 'input') return 'input'; if (m.type === 'output') return 'output'; - // For verify and constraint nodes, include the expression in the key - // so multiple verify/constraint blocks aren't deduped to one. - if (m.type === 'verify') return `verify:${(m as any).temporalExpr || ''}`; - if (m.type === 'constraint') return `constraint:${(m as any).expr || ''}`; - if (m.type === 'oneof') return `oneof:${(m as any).name || ''}`; - if (m.type === 'transition') return `transition:${(m as any).name || ''}`; - if (m.type === 'service') return `service:${(m as any).name || ''}`; return m.type; } @@ -955,73 +816,6 @@ function cleanExpr(s: string): string { return s.replace(/,$/, '').trim(); } -/** - * Translate SpeckDL `implies(P, Q)` inside an LTL formula body to its - * TypeScript equivalent `(!P) || Q`. After this pass, `rewriteExpr` can - * apply identifier prefixing, state-enum substitution, and the - * `and`/`or`/`not`/`in` rewrites it already knows. - * - * The walker handles balanced parens (e.g. `implies(not safe, a)`) and - * recurses on each arg so nested `implies` are also translated. - */ -function translateLtlInner(expr: string): string { - let out = ''; - let i = 0; - while (i < expr.length) { - if (expr.substring(i, i + 8) === 'implies(' && (i === 0 || !/[A-Za-z0-9_]/.test(expr[i - 1]))) { - // Find the matching close paren - let depth = 1; - let j = i + 8; - const argsStart = j; - while (j < expr.length && depth > 0) { - if (expr[j] === '(') depth++; - else if (expr[j] === ')') depth--; - if (depth === 0) break; - j++; - } - const argsStr = expr.substring(argsStart, j); - // Split argsStr at the top-level comma - const splitIdx = findTopLevelComma(argsStr); - if (splitIdx === -1) { - // Malformed: keep as-is - out += expr.substring(i, j + 1); - } else { - const p = argsStr.substring(0, splitIdx).trim(); - const q = argsStr.substring(splitIdx + 1).trim(); - // Recursively translate the args (handles nested implies) - const pT = translateLtlInner(p); - const qT = translateLtlInner(q); - // Implication: p → q is equivalent to (!p || q) - out += `(!(${pT}) || (${qT}))`; - } - i = j + 1; - } else { - out += expr[i]; - i++; - } - } - // Translate 'in' operator: X in Y → __in__(X, Y) placeholder - // rewriteExpr will convert this to Y.has(X) or Y.includes(X) later. - // Do this after implies expansion so 'in' isn't split by || operators. - out = out.replace(/(\b\w+(?:\.\w+)*)\s+in\s+(\b\w+(?:\.\w+)*)/g, '__IN_LEFT__$1__IN_RIGHT__$2__IN_END__'); - return out; -} - -/** - * Find the index of the top-level comma in `s` (i.e. a comma at paren - * depth 0). Returns -1 if none. - */ -function findTopLevelComma(s: string): number { - let depth = 0; - for (let i = 0; i < s.length; i++) { - const c = s[i]; - if (c === '(') depth++; - else if (c === ')') depth--; - else if (c === ',' && depth === 0) return i; - } - return -1; -} - function tsType(t: any, speckName: string = '', enumMap?: Map): string { if (!t) return 'unknown'; if (t.type === 'primitive') { diff --git a/compiler/src/generators/z3.ts b/compiler/src/generators/z3.ts index d7a4da9..7174ccb 100644 --- a/compiler/src/generators/z3.ts +++ b/compiler/src/generators/z3.ts @@ -91,8 +91,6 @@ function emitZ3(speck: SpeckNode, options: Z3Options): string { // Declare Speckl helper functions // speckl_len: length of Array-simulated sequences lines.push('(declare-fun speckl_len_Int ( (Array Int Int) ) Int)'); - // speckl_nil: sentinel for nil/null comparisons (SpeckDL nil → Z3 constant) - lines.push('(declare-const speckl_nil Int)'); // Step 1: Declare sorts for record types const recordTypes = collectRecordTypes(stateNode, actions); @@ -430,38 +428,35 @@ function translateExpr(expr: string, stateVars: StateVar[], suffix: string): str // Handle prime notation for post-state: currentTerm' → currentTerm_post (invariant comparison) e = e.replace(/\b(\w+)'/g, '$1_post'); - // Handle implies(x, y) function call pattern — preserve both arguments - e = e.replace(/implies\s*\(([^,)]+),\s*([^)]+)\)/g, '(=> $1 $2)'); - // Handle bare implies keyword: implies A B → (=> A B) - e = e.replace(/\bimplies\s+([^\s]+)\s+(.+)$/g, '(=> $1 $2)'); + // Handle implies(x, y) function call pattern + e = e.replace(/implies\s*\(([^,)]+),\s*([^)]+)\)/g, '(=> )'); + // Handle bare implies keyword at top level + // Handle bare implies as SMT-LIB2 => + // First, handle implies at top level of a line (no paren after second arg) + e = e.replace(/\bimplies\s+([^ ]+)\s+([^)]+)\)?/g, '(=> )'); + // Clean up (=> ) empty cases + e = e.replace(/(=>\s*)/g, '(=> true true)'); // Handle -> as implication (after field access cleanup to avoid false matches)// Handle -> as implication (after field access cleanup to avoid false matches) e = e.replace(/->/g, '=>'); - // Handle function calls: length(expr), len(expr), min(a,b), etc. + // Handle function calls: length(expr), min(a,b), etc. e = e.replace(/\blength\(([^)]+)\)/g, 'len__$1__xx'); // marker, fix later - e = e.replace(/\blen\(([^)]+)\)/g, 'len__$1__xx'); // marker, fix later e = e.replace(/\bmin\(([^,)]+),\s*([^)]+)\)/g, 'min__$1__$2__xx'); - // Field access: a.b.c → a_b_c (flatten all dot levels in one pass) - // For record fields accessed via dot, translate to Z3-safe compound names. - // Multi-level: m.price.amount → m_price_amount - e = e.replace(/(\w+)\.(\w+)(\.(\w+))*/g, (match, obj, field1, rest, field2) => { - if (rest) { - // Multi-level: m.price.amount → m_price_amount - return `${obj}_${field1}_${field2}`; + // Field access: a.balance → balance (drop qualifier for bound forall vars) + // For record fields accessed via dot, translate to Z3-safe names + e = e.replace(/(\w+)\.([\w_]+)/g, (_, obj, field) => { + // If the object is a state variable (map), .field is an accessor we can't resolve + // For bound forall variables, just use the field name + if (stateVarNames.has(obj)) { + // Accessing field on opaque sort — use a compound name + return `${obj}_${field}`; } - return `${obj}_${field1}`; + // For bound variables in forall, just emit the field + return `${obj}_${field}`; }); - // Handle nil → Z3 doesn't have nil/null. Translate to a sentinel: - // x != nil → (distinct x nil_sentinel) — but for Z3 we'll use a special value. - // For record types (opaque sorts), nil means "no value". We'll use a declared - // constant `nil` of a generic sort. For Int fields, nil = -1 sentinel. - // Simplest approach: translate nil to a Z3 declared constant `speckl_nil`. - e = e.replace(/\bnil\b/g, 'speckl_nil'); - e = e.replace(/\bnull\b/g, 'speckl_nil'); - // Handle notIn BEFORE general patterns e = e.replace(/(\S+)\s+notIn\s+(\S+)\.keys/g, '(not (select $2 $1))'); @@ -545,9 +540,8 @@ function translateExpr(expr: string, stateVars: StateVar[], suffix: string): str e = e.replace(/__GE__/g, '>='); e = e.replace(/__LE__/g, '<='); - // Wrap distinct: X distinct Y → (distinct X Y) - // Handle both simple identifiers and parenthesized expressions - e = e.replace(/(\b\w+|\([^()]+\))\s+distinct\s+(\b\w+|\([^()]+\))/g, '(distinct $1 $2)'); + // Wrap distinct + e = e.replace(/\bdistinct\s+(\S+)\s+(\S+)/g, '(distinct $1 $2)'); // Fix remaining infix operators that escaped convertToPrefix // word = word/val: convert to (= word val) @@ -574,7 +568,6 @@ function restoreStrings(expr: string, strings: string[]): string { */ function convertToPrefix(expr: string): string { expr = convertOp(expr, '=>', '=>'); - expr = convertOp(expr, 'distinct', 'distinct'); expr = convertOp(expr, 'and', 'and'); expr = convertOp(expr, 'or', 'or'); expr = convertOp(expr, '=', '='); diff --git a/compiler/src/index.ts b/compiler/src/index.ts index be80718..ce5bf73 100644 --- a/compiler/src/index.ts +++ b/compiler/src/index.ts @@ -7,7 +7,6 @@ import { generateProvenanceGraph } from './generators/provenance.js'; import { generateCycloneDX } from './generators/cyclonedx.js'; import { generateSPDX } from './generators/spdx.js'; import { generateTypeScriptStateMachine } from './generators/typescript-state-machine.js'; -import { generateProtobuf } from './generators/protobuf.js'; import { generateZ3, Z3Options, parseInvariantsFromSource, parseNextFromSource } from './generators/z3.js'; import { generateRust } from './generators/rust.js'; import fs from 'fs'; @@ -16,7 +15,7 @@ import path from 'path'; interface CompileOptions { outputDir: string; bomFormat: 'cdx' | 'spdx' | 'both'; - target: 'typescript' | 'z3' | 'rust' | 'protobuf' | 'all'; + target: 'typescript' | 'z3' | 'all'; verifyDepth: number; } @@ -51,7 +50,7 @@ async function main() { alias: 't', describe: 'Compilation target', type: 'string', - choices: ['typescript', 'z3', 'rust', 'protobuf', 'all'], + choices: ['typescript', 'z3', 'rust', 'all'], default: 'typescript' as const, }) .option('verify-depth', { @@ -75,7 +74,7 @@ async function main() { const options = { outputDir: argv.outputDir as string, bomFormat: argv.bomFormat as 'cdx' | 'spdx' | 'both', - target: argv.target as 'typescript' | 'z3' | 'rust' | 'protobuf' | 'all', + target: argv.target as 'typescript' | 'z3' | 'rust' | 'all', verifyDepth: argv.verifyDepth as number, }; @@ -102,15 +101,6 @@ async function main() { generateRust(ast, options.outputDir); } - // Generate protobuf schema if target is protobuf or all - // This is the load-bearing backend for the "no glue code" claim: - // the emitted .proto is the canonical wire format. Run `buf generate` - // on the output to produce Go/TS/Rust/C/Python/Java bindings. - if (options.target === 'protobuf' || options.target === 'all') { - console.log('\nGenerating protobuf schema (.proto)...'); - generateProtobuf(ast, options.outputDir); - } - // Always generate provenance (it's the core output) if not z3-only or rust-only if (options.target !== 'z3' && options.target !== 'rust') { console.log('\nGenerating provenance graph (PROV-O JSON-LD)...'); diff --git a/compiler/src/parser.ts b/compiler/src/parser.ts index 3ccb289..c25e995 100644 --- a/compiler/src/parser.ts +++ b/compiler/src/parser.ts @@ -6,22 +6,6 @@ export interface SpeckNode { type: 'speck'; name: string; members: MemberNode[]; - // Optional metadata from top-of-file directives (version:, author:, license:, proto_package:, go_package:). - // Undefined when not specified in the source. - version?: string; - author?: string; - license?: string; - // Protobuf-specific overrides. If unset, generator uses sensible defaults. - // proto_package: e.g. "federated_meetup.v1" - // go_package: e.g. "github.com/sscoble/federated-meetup/proto/federated_meetup/v1;federatedmeetupv1" - protoPackage?: string; - goPackage?: string; - // Cycle 61: optional event-name suffix. When set, the .proto generator - // appends this string to every `event` block's message name (e.g. an - // event CreateGroup with event_suffix: "Payload" emits - // `message CreateGroupPayload { ... }`). Matches the federated-meetup - // convention where every transition payload is named XxxPayload. - eventSuffix?: string; } export interface ImportNode { @@ -55,37 +39,10 @@ export interface VerifyNode { depth?: number; } -export interface InterfaceField { - name: string; - type: TypeExpr; -} - -export interface RpcMethod { - name: string; - requestType: string; - responseType: string; - // Streaming flags for gRPC/ConnectRPC - clientStreaming?: boolean; - serverStreaming?: boolean; -} - -export interface ServiceNode { - type: 'service'; - name: string; - rpcs: RpcMethod[]; -} - export interface InterfaceNode { type: 'interface'; name: string; - // Discriminator: which form does this interface take? - // 'enum' → only methods[] populated with variant names (returnType: Void) - // 'record' → only fields[] populated with name: Type entries - // 'service' → methods[] populated with method signatures (name(params) -> Type) - // 'mixed' → ambiguous; generators should inspect both - kind: 'enum' | 'record' | 'service' | 'mixed'; methods: MethodSignature[]; - fields: InterfaceField[]; } export interface MethodSignature { @@ -100,42 +57,6 @@ export interface EventNode { fields: { name: string; type: TypeExpr }[]; } -// oneof: discriminated-union variant for proto wire-format compatibility. -// Cycle 57 — emits `oneof payload { TypeName field_name = N; ... }` when -// compiled to .proto. Variants reference top-level event/interface types; -// field_name is the snake_case wire name (lowerCamelCase convention from -// TypeScript). -export interface OneofNode { - type: 'oneof'; - name: string; - variants: OneofVariant[]; -} - -export interface OneofVariant { - fieldName: string; // wire name, e.g. "create_group" - typeName: string; // referenced type, e.g. "CreateGroup" -} - -// Cycle 58: Transition envelope — a proto message that wraps a oneof payload -// along with metadata fields (prior_state, signatures, hlc, branch_id, etc). -// Distinct from `event` because: -// - payload field references a OneofNode (not a regular message type) -// - generator emits a `oneof payload { ... }` block inside the message body -// - the discriminator field uses a proto enum (TransitionType) -// This is the shape federated-meetup needs for its `Transition` message. -export interface TransitionNode { - type: 'transition'; - name: string; - fields: TransitionField[]; - payloadOneof?: string; // name of the OneofNode whose variants go inside the oneof payload block - typeDiscriminator?: string; // name of the enum used to discriminate variants -} - -export interface TransitionField { - name: string; - type: TypeExpr; -} - export interface ProvenanceNode { type: 'provenance'; clauses: ProvenanceClause[]; @@ -190,15 +111,6 @@ export interface BOMNode { export interface StateNode { type: 'state'; variables: StateVar[]; - // Cycle 59: optional message-name override. When set, the .proto - // generator emits `message { ... }` instead of - // `message State { ... }`. This matches the consumer's - // expected binding name (e.g. StateSnapshot instead of - // FederatedMeetupState), so the Speckl-generated proto is a drop-in - // for the handwritten one. See: - // .hermes/skills/spec-compiler-dogfood/references/ - // speckl-federated-meetup-protobuf-migration.md - messageName?: string; } export interface StateVar { @@ -229,27 +141,24 @@ export type ActionStatement = | { type: 'return'; expr: string } | { type: 'ifblock'; raw: string }; -export type MemberNode = - | ImportNode - | InputNode - | OutputNode - | ConstraintNode - | VerifyNode - | InterfaceNode - | EventNode - | OneofNode - | TransitionNode - | ProvenanceNode - | ReviewNode - | DerivesNode - | SatisfiesNode - | AuthorNode - | SourceNode +export type MemberNode = + | ImportNode + | InputNode + | OutputNode + | ConstraintNode + | VerifyNode + | InterfaceNode + | EventNode + | ProvenanceNode + | ReviewNode + | DerivesNode + | SatisfiesNode + | AuthorNode + | SourceNode | BOMNode | StateNode | InitNode - | ActionNode - | ServiceNode; + | ActionNode; export interface TypeExpr { type: 'primitive' | 'record' | 'list' | 'set' | 'map' | 'ident'; @@ -324,14 +233,6 @@ function parseSpeck(lines: string[], startIndex: number): SpeckNode | null { const name = headerMatch[1]; const members: MemberNode[] = []; - // Cycle 73: refactored from static-field hack to local-object pattern. - // Previously, proto_package / go_package / event_suffix were stored - // on (parseSpeck as any)._protoPackage etc — static function fields - // that leaked between parse calls. Now collected in a local metadata - // object and spread into the return value. No reset needed because - // the object is local to this invocation. - const metadata: { protoPackage?: string; goPackage?: string; eventSuffix?: string } = {}; - let i = startIndex + 1; let braceCount = 1; @@ -344,35 +245,13 @@ function parseSpeck(lines: string[], startIndex: number): SpeckNode | null { continue; } - // ── Top-of-file protobuf metadata directives ──────────────── - // These attach to the SpeckNode and are NOT emitted as members. - // Format: `key: value` (string values may be quoted or bare). - // `author:`, `version:`, `license:` continue to be parsed as members - // (AuthorNode, etc.) for backward compatibility with the existing - // PROV-O / CycloneDX generators. - const metaMatch = line.match(/^(proto_package|go_package|event_suffix)\s*:\s*(.+)$/); - if (metaMatch) { - // Strip surrounding quotes if present - const value = metaMatch[2].trim().replace(/^['"]|['"]$/g, ''); - if (metaMatch[1] === 'proto_package') { - metadata.protoPackage = value; - } else if (metaMatch[1] === 'go_package') { - metadata.goPackage = value; - } else if (metaMatch[1] === 'event_suffix') { - metadata.eventSuffix = value; - } - i++; - continue; - } - // Count braces on this line first const openCount = (rawLine.match(/{/g) || []).length; const closeCount = (rawLine.match(/}/g) || []).length; // Check for block-opening members (those that open braces on the same line) const blockStarters = ['state:', 'init:', 'action ', 'event ', 'provenance ', 'bom ', 'interface ', - 'state {', 'init {', 'verify ', 'constraint ', 'input:', 'output:', 'service ', 'oneof ', 'transition ', - 'state as ']; + 'state {', 'init {', 'verify ', 'constraint ']; const isBlockStarter = blockStarters.some(s => line.startsWith(s)); if (isBlockStarter && openCount > 0) { @@ -392,8 +271,8 @@ function parseSpeck(lines: string[], startIndex: number): SpeckNode | null { } // Handle constraint/verify blocks that may span multiple lines without braces - // (e.g. constraint Name: forall r in [0..4]:, verify: always(implies(\n ...\n))) - if (line.startsWith('constraint ') || line.startsWith('verify ') || line.startsWith('verify:')) { + // (e.g. constraint Name: forall r in [0..4]:) + if (line.startsWith('constraint ') || line.startsWith('verify ')) { const member = parseMultiLineConstraintVerify(lines, i); if (member) { members.push(member); @@ -406,8 +285,7 @@ function parseSpeck(lines: string[], startIndex: number): SpeckNode | null { nextLine.startsWith('state') || nextLine.startsWith('init') || nextLine.startsWith('action ') || nextLine.startsWith('event ') || nextLine.startsWith('interface ') || nextLine.startsWith('provenance ') || - nextLine.startsWith('service ') || nextLine.startsWith('bom ') || - nextLine.startsWith('}') || + nextLine.startsWith('bom ') || nextLine.startsWith('}') || nextLine.startsWith('next:') || nextLine.startsWith('invariant ')) { break; } @@ -432,10 +310,7 @@ function parseSpeck(lines: string[], startIndex: number): SpeckNode | null { i++; } - return { type: 'speck', name, members, - protoPackage: metadata.protoPackage, - goPackage: metadata.goPackage, - eventSuffix: metadata.eventSuffix }; + return { type: 'speck', name, members }; } function findBlockEnd(lines: string[], startIndex: number, startBraceCount: number): number { @@ -481,12 +356,6 @@ function parseMemberBlock(lines: string[], startIndex: number): MemberNode | nul if (firstLine.startsWith('state {') || firstLine === 'state') { return parseStateBlockMultiline(lines, startIndex, startBraceCount); } - if (firstLine.startsWith('state as ')) { - // Cycle 63: `state as { ... }` form must dispatch - // through the same state-block parser so the `as` override on the - // first line is captured. - return parseStateBlockMultiline(lines, startIndex, startBraceCount); - } if (firstLine.startsWith('init:')) { return parseInitBlockMultiline(lines, startIndex, startBraceCount); } @@ -502,15 +371,6 @@ function parseMemberBlock(lines: string[], startIndex: number): MemberNode | nul if (firstLine.startsWith('interface ')) { return parseInterfaceBlockMultiline(lines, startIndex, startBraceCount); } - if (firstLine.startsWith('oneof ')) { - return parseOneofBlockMultiline(lines, startIndex, startBraceCount); - } - if (firstLine.startsWith('transition ')) { - return parseTransitionBlockMultiline(lines, startIndex, startBraceCount); - } - if (firstLine.startsWith('service ')) { - return parseServiceBlockMultiline(lines, startIndex, startBraceCount); - } if (firstLine.startsWith('provenance ')) { return { type: 'provenance', clauses: [] }; } @@ -523,70 +383,10 @@ function parseMemberBlock(lines: string[], startIndex: number): MemberNode | nul if (firstLine.startsWith('constraint ')) { return parseConstraintBlockMultiline(lines, startIndex, startBraceCount); } - if (firstLine.startsWith('input:') || firstLine.startsWith('output:')) { - return parseInputOutputBlock(lines, startIndex, startBraceCount); - } - + return null; } -/** - * Parse a multi-line `input: { ... }` or `output: { ... }` block. - * - * The first line opens with `input: {` or `output: {` and the matching `}` - * may be many lines later (with field declarations on intermediate lines). - * We collect all lines up to the matching `}` (brace-counted) and join the - * inner content into a single record string that `parseTypeExpr` already - * knows how to handle. - */ -function parseInputOutputBlock( - lines: string[], - startIndex: number, - startBraceCount: number, -): MemberNode | null { - const header = lines[startIndex].trim(); - const isInput = header.startsWith('input:'); - const kind: 'input' | 'output' = isInput ? 'input' : 'output'; - - // Collect inner content lines, brace-counting across the block. - // startBraceCount is the brace count on the header line (1 for `input: {`). - // We need to find the line where braceCount returns to 0 (i.e. the closing `}`). - const innerLines: string[] = []; - let braceCount = 0; - let i = startIndex; - // First pass: extract inner content from header line (everything after the first `{`). - const headerLine = lines[startIndex].trim(); - const headerNoComment = headerLine.replace(/\/\/.*$/, '').trim(); - const openIdx = headerNoComment.indexOf('{'); - if (openIdx >= 0) { - const after = headerNoComment.substring(openIdx + 1).trim(); - if (after) innerLines.push(after); - } - braceCount = 1; // we're inside one `{` from the header - i = startIndex + 1; - while (i < lines.length && braceCount > 0) { - const raw = lines[i]; - const stripped = raw.trim(); - // Strip line comments (//...) — they cannot be inside a type expression. - const noComment = stripped.replace(/\/\/.*$/, '').trim(); - for (const ch of noComment) { - if (ch === '{') braceCount++; - else if (ch === '}') braceCount--; - } - if (braceCount > 0 && noComment) { - // Inside the block — keep content (skip the closing `}` line itself). - innerLines.push(noComment); - } - i++; - } - - // Join inner content with newlines; `parseTypeExpr`'s record branch - // splits on commas and matches `name: type` pairs. - const recordExpr = '{ ' + innerLines.join(' ') + ' }'; - const typeExpr = parseTypeExpr(recordExpr); - return { type: kind, typeExpr }; -} - function parseMember(line: string): MemberNode | null { // input: if (line.startsWith('input:')) { @@ -633,16 +433,6 @@ function parseMember(line: string): MemberNode | null { if (line.startsWith('event ')) { return parseEvent(line); } - - // oneof: - if (line.startsWith('oneof ')) { - return parseOneof(line); - } - - // transition: - if (line.startsWith('transition ')) { - return parseTransition(line); - } // provenance { if (line.startsWith('provenance ')) { @@ -945,17 +735,14 @@ function parseInterface(line: string): InterfaceNode { if (!match) { throw new Error(`Failed to parse interface: ${line}`); } - + const name = match[1]; - - // Header-only; parseInterfaceBlockMultiline fills in methods/fields/kind - // by scanning the lines inside the { ... } block. + + // This is a simplified parser - in a real implementation, we'd need to handle multi-line interfaces return { type: 'interface', name, - kind: 'mixed', methods: [], - fields: [], }; } @@ -965,9 +752,9 @@ function parseEvent(line: string): EventNode { if (!match) { throw new Error(`Failed to parse event: ${line}`); } - + const name = match[1]; - + return { type: 'event', name, @@ -975,34 +762,6 @@ function parseEvent(line: string): EventNode { }; } -// Cycle 57: parse `oneof Name {` (header only; parseOneofBlockMultiline fills variants). -function parseOneof(line: string): OneofNode { - // oneof Name { - const match = line.match(/^oneof\s+(\w+)\s*{/); - if (!match) { - throw new Error(`Failed to parse oneof: ${line}`); - } - return { - type: 'oneof', - name: match[1], - variants: [], - }; -} - -// Cycle 58: parse `transition Name {` (header only; parseTransitionBlockMultiline fills fields + payload-oneof). -function parseTransition(line: string): TransitionNode { - // transition Name { - const match = line.match(/^transition\s+(\w+)\s*{/); - if (!match) { - throw new Error(`Failed to parse transition: ${line}`); - } - return { - type: 'transition', - name: match[1], - fields: [], - }; -} - function parseProvenanceBlock(lines: string[], line: string): ProvenanceNode { // This is a simplified parser - in a real implementation, we'd parse the full block return { @@ -1094,13 +853,6 @@ function parseSource(line: string): SourceNode { } function parseStateBlockMultiline(lines: string[], startIndex: number, startBraceCount: number): StateNode { - // Cycle 59: support `state as { ... }` to override the - // generated .proto message name. Default (no `as`) keeps the existing - // `message State { ... }` convention. - const headerLine = lines[startIndex].trim(); - const asMatch = headerLine.match(/^state\s+as\s+(\w+)\s*{/); - const messageName = asMatch ? asMatch[1] : undefined; - const endIndex = findBlockEnd(lines, startIndex + 1, startBraceCount); const innerLines = lines.slice(startIndex + 1, endIndex).map(l => l.trim()).filter(l => l && !l.startsWith('//') && !l.startsWith('/*')); // State blocks separate fields with commas or newlines/semicolons. @@ -1119,9 +871,7 @@ function parseStateBlockMultiline(lines: string[], startIndex: number, startBrac } return acc + ' ' + line; }, ''); - const result = parseStateBlock(inner); - if (messageName !== undefined) result.messageName = messageName; - return result; + return parseStateBlock(inner); } function parseInitBlockMultiline(lines: string[], startIndex: number, startBraceCount: number): InitNode { @@ -1299,24 +1049,7 @@ function parseEventBlockMultiline(lines: string[], startIndex: number, startBrac const fields: { name: string; type: TypeExpr }[] = []; for (const line of innerLines) { - // Cycle 62: strip inline `//` line-comments from the type expression - // before parsing. Without this, an event field like - // mesh_ip: Bytes // 4 bytes (IPv4 overlay) - // produces a TypeExpr whose name includes the comment text, which - // the .proto generator emits verbatim: - // bytes // 4 bytes (IPv4 overlay) mesh_ip = 2; - // (broken syntax — comment is in the type position). - const noComment = line.replace(/\/\/.*$/, '').trim(); - // Cycle 65: strip default-value suffix `= ` from the type - // expression. The federated-meetup speckdl has fields like - // initial_mesh_peers: List = [] - // where the default is meaningful in Speckl semantics (a state- - // machine init) but the .proto wire format doesn't carry a - // default — it's a generator concern. Without this, the type - // expression was emitted as `List = []` and - // protoc rejects the resulting syntax. - const noDefault = noComment.replace(/\s*=\s*[^,]+$/, '').trim(); - const match = noDefault.match(/^(\w+)\s*:\s*(.+?),?$/); + const match = line.match(/^(\w+)\s*:\s*(.+?),?$/); if (match) { fields.push({ name: match[1], type: parseTypeExpr(match[2].replace(/,$/, '').trim()) }); } @@ -1332,20 +1065,12 @@ function parseInterfaceBlockMultiline(lines: string[], startIndex: number, start const innerLines = lines.slice(startIndex + 1, endIndex).map(l => l.trim()).filter(l => l && !l.startsWith('//') && !l.startsWith('/*')); const methods: MethodSignature[] = []; - const fields: InterfaceField[] = []; - for (const line of innerLines) { - // Cycle 62: strip inline `//` line-comments from each line before - // token-splitting. Without this, a field like - // mesh_ip: Bytes // 4 bytes (IPv4 overlay) - // has its comment text bleed into the parsed type expression, - // which the .proto generator emits verbatim — broken syntax. - const noComment = line.replace(/\/\/.*$/, '').trim(); - if (!noComment) continue; - // Split on comma so multi-variant lines like "Idle, Parsing, Done" all parse - const tokens = noComment.split(',').map(s => s.trim()).filter(Boolean); + // name-only: enum-style values (e.g., "Idle", "Idle, Parsing" comma-separated) + // Split on comma and take each trimmed token + const tokens = line.split(',').map(s => s.trim()).filter(Boolean); for (const token of tokens) { - // Check 1: method signature form: name(params) -> returnType + // Check if it’s a name(params) -> returnType method signature const methodMatch = token.match(/^(\w+)\s*\(([^)]*)\)\s*->\s*(.+?),?$/); if (methodMatch) { const name = methodMatch[1]; @@ -1362,148 +1087,13 @@ function parseInterfaceBlockMultiline(lines: string[], startIndex: number, start } } methods.push({ name, params, returnType: parseTypeExpr(returnTypeStr) }); - continue; - } - - // Check 2: field declaration form: field_name: TypeName - // Lowercase-starting identifier followed by ':' — record-style interface - const fieldMatch = token.match(/^(\w+)\s*:\s*(.+)$/); - if (fieldMatch && /^[a-z_]/.test(fieldMatch[1])) { - fields.push({ name: fieldMatch[1], type: parseTypeExpr(fieldMatch[2].trim()) }); - continue; - } - - // Check 3: bare identifier (enum variant) — name only, no params - if (/^\w+$/.test(token)) { + } else if (/^\w+$/.test(token)) { + // Name-only (enum-style) — treat as a method with no params and void return methods.push({ name: token, params: [], returnType: parseTypeExpr('Void') }); } } } - - // Determine the kind based on what we collected - let kind: 'enum' | 'record' | 'service' | 'mixed' = 'mixed'; - if (fields.length > 0 && methods.length === 0) { - kind = 'record'; - } else if (methods.length > 0 && fields.length === 0) { - // Distinguish enum (all methods have empty params and Void return) from service - const allEnumLike = methods.every(m => m.params.length === 0 && m.returnType.name === 'Void'); - kind = allEnumLike ? 'enum' : 'service'; - } - - return { ...header, kind, methods, fields }; -} - -// Cycle 57: parse a `oneof Name { ... }` block. Each non-empty, non-comment -// inner line is `field_name: TypeName`. The wire field_name follows -// lowerCamelCase convention (TypeScript/Connect) and is emitted to .proto -// as snake_case by the generator. -function parseOneofBlockMultiline(lines: string[], startIndex: number, startBraceCount: number): OneofNode { - const firstLine = lines[startIndex].trim(); - const header = parseOneof(firstLine); - const endIndex = findBlockEnd(lines, startIndex + 1, startBraceCount); - const innerLines = lines.slice(startIndex + 1, endIndex).map(l => l.trim()).filter(l => l && !l.startsWith('//') && !l.startsWith('/*')); - - const variants: OneofVariant[] = []; - for (const line of innerLines) { - // Strip trailing comma or semicolon (proto-style "create_group: CreateGroup," is valid). - const trimmed = line.replace(/[,;]\s*$/, ''); - const m = trimmed.match(/^(\w+)\s*:\s*(\w+)\s*$/); - if (m) { - variants.push({ fieldName: m[1], typeName: m[2] }); - } - } - - return { ...header, variants }; -} - -// Cycle 58: parse a `transition Name { ... }` block. Each non-empty, -// non-comment inner line is `field_name: TypeName`. Two field names -// have special meaning: -// - `payload: ` — references a sibling `oneof` block; -// the proto generator will emit the variants inline as -// `oneof payload { ... }` inside the message body -// - `type: ` — the discriminator enum for the variants -// Other fields are emitted as ordinary proto message fields. -function parseTransitionBlockMultiline(lines: string[], startIndex: number, startBraceCount: number): TransitionNode { - const firstLine = lines[startIndex].trim(); - const header = parseTransition(firstLine); - const endIndex = findBlockEnd(lines, startIndex + 1, startBraceCount); - const innerLines = lines.slice(startIndex + 1, endIndex).map(l => l.trim()).filter(l => l && !l.startsWith('//') && !l.startsWith('/*')); - - const fields: TransitionField[] = []; - let payloadOneof: string | undefined; - let typeDiscriminator: string | undefined; - - for (const line of innerLines) { - const trimmed = line.replace(/[,;]\s*$/, ''); - const m = trimmed.match(/^(\w+)\s*:\s*(.+)$/); - if (!m) continue; - const fieldName = m[1]; - const typeStr = m[2].trim(); - - if (fieldName === 'payload') { - // The type is the name of a sibling oneof block. - payloadOneof = typeStr; - // Don't add a regular field for payload — it becomes the oneof. - continue; - } - if (fieldName === 'type') { - // The type is the name of a discriminator enum. - typeDiscriminator = typeStr; - // Don't add a regular field for type — it's a special discriminator. - continue; - } - fields.push({ name: fieldName, type: parseTypeExpr(typeStr) }); - } - - const result: TransitionNode = { ...header, fields }; - if (payloadOneof !== undefined) result.payloadOneof = payloadOneof; - if (typeDiscriminator !== undefined) result.typeDiscriminator = typeDiscriminator; - return result; -} - -function parseServiceBlockMultiline(lines: string[], startIndex: number, startBraceCount: number): ServiceNode { - // service Name { - const firstLine = lines[startIndex].trim(); - const match = firstLine.match(/^service\s+(\w+)\s*{?/); - const name = match ? match[1] : 'UnnamedService'; - - const endIndex = findBlockEnd(lines, startIndex + 1, startBraceCount); - const innerLines = lines.slice(startIndex + 1, endIndex).map(l => l.trim()).filter(l => l && !l.startsWith('//') && !l.startsWith('/*')); - - const rpcs: RpcMethod[] = []; - for (const line of innerLines) { - // rpc MethodName(RequestType) returns (ResponseType); - // Also support streaming: rpc M(stream R) returns (S); or rpc M(R) returns (stream S); - const rpcMatch = line.match(/^rpc\s+(\w+)\s*\(\s*(stream\s+)?(\w+)\s*\)\s*returns\s*\(\s*(stream\s+)?(\w+)\s*\)\s*;?$/); - if (rpcMatch) { - const methodName = rpcMatch[1]; - const clientStream = !!rpcMatch[2]; - const requestType = rpcMatch[3]; - const serverStream = !!rpcMatch[4]; - const responseType = rpcMatch[5]; - rpcs.push({ - name: methodName, - requestType, - responseType, - clientStreaming: clientStream, - serverStreaming: serverStream, - }); - } else { - // Cycle 73: error on unrecognized lines inside service blocks. - // Previously, a typo like `rc_purchase_ticket(...)` (missing the `p` - // in `rpc`) was silently swallowed — the line didn't match the - // rpc regex, so it was skipped without error. Silent data loss in - // a spec compiler is unacceptable; the whole point is that the - // spec is the source of truth. - throw new Error( - `Parse error in service block: unrecognized line "${line}". ` + - `Expected: rpc MethodName(RequestType) returns (ResponseType);` - ); - } - } - - return { type: 'service', name, rpcs }; + return { ...header, methods }; } // --- Multi-line constraint/verify parsing (no braces needed) --- @@ -1520,130 +1110,18 @@ function parseServiceBlockMultiline(lines: string[], startIndex: number, startBr */ function parseMultiLineConstraintVerify(lines: string[], startIndex: number): MemberNode | null { const line = lines[startIndex].trim(); - + if (line.startsWith('verify ')) { return parseVerifyAnyForm(lines, startIndex); } - - // Multi-line `verify:` form: verify: always(implies(\n ...\n)) - // The body opens parens that span multiple lines; collect continuation - // lines until parens balance to zero, then return the joined string as - // the temporalExpr. speckl#54. - if (line.startsWith('verify:')) { - return parseVerifyColonBlock(lines, startIndex); - } - + if (line.startsWith('constraint ')) { return parseConstraintAnyForm(lines, startIndex); } - + return null; } -/** - * Parse the `verify: ` form (speckl#54) where the body can span - * multiple lines: - * - * verify: always(implies( - * cond1, - * cond2 - * )) - * - * The whole expression (the part after `verify:`) is collected by - * appending subsequent non-empty, non-keyword-starting lines until - * parens/brackets/braces balance to zero. The joined string is stored - * in `temporalExpr` so the downstream LTL translator (typescript-state-machine - * verifyN()) sees a well-formed formula. - * - * The `name` is derived from the LTL operator's argument when it matches - * `always(Name)` / `eventually(Name)`. When the body is a richer expression - * (e.g. `always(implies(...))`) we fall back to `unnamed` — the generator - * still emits a working verifyN() that uses the full expression. - */ -function parseVerifyColonBlock(lines: string[], startIndex: number): VerifyNode | null { - const firstLine = lines[startIndex].trim(); - // Strip the `verify:` prefix. - const head = firstLine.substring(firstLine.indexOf(':') + 1).trim(); - if (!head) return null; - - // If the head is already balanced on its own (single-line verify: expr), - // just return it directly — no continuation needed. - if (isExpressionComplete(head)) { - const nameMatch = head.match(/^(?:always|Always|eventually|Eventually)\s*\(\s*(\w+)\s*\)$/); - return { - type: 'verify', - name: nameMatch ? nameMatch[1] : 'unnamed', - temporalExpr: head, - }; - } - - // Multi-line: collect continuation lines until parens balance. The same - // break-condition list used in the parseSpeck skip-loop applies (don't - // swallow the next member's keyword). We additionally stop at any - // standalone `}` so a verify inside a brace-block still terminates. - const parts: string[] = [head]; - let parens = 0, brackets = 0, braces = 0; - for (const ch of head) { - if (ch === '(') parens++; - else if (ch === ')') parens--; - else if (ch === '[') brackets++; - else if (ch === ']') brackets--; - else if (ch === '{') braces++; - else if (ch === '}') braces--; - } - - let lastConsumed = startIndex; - for (let j = startIndex + 1; j < lines.length; j++) { - const raw = lines[j]; - const nl = raw.trim(); - if (!nl) { - // Empty line still updates counters (none) and advances lastConsumed - lastConsumed = j; - continue; - } - if (nl.startsWith('//') || nl.startsWith('/*')) { - // Skip standalone comments but treat them as part of the block - // (the LTL translator doesn't care about comments in temporalExpr). - lastConsumed = j; - continue; - } - // Stop at a new top-level member keyword — that's the next member. - if ( - nl.startsWith('constraint ') || nl.startsWith('verify ') || - nl.startsWith('constraint:') || nl.startsWith('verify:') || - nl.startsWith('state') || nl.startsWith('init') || - nl.startsWith('action ') || nl.startsWith('event ') || - nl.startsWith('interface ') || nl.startsWith('provenance ') || - nl.startsWith('bom ') || nl === '}' || - nl.startsWith('next:') || nl.startsWith('invariant ') - ) { - break; - } - // Update depth counters. - for (const ch of raw) { - if (ch === '(') parens++; - else if (ch === ')') parens--; - else if (ch === '[') brackets++; - else if (ch === ']') brackets--; - else if (ch === '{') braces++; - else if (ch === '}') braces--; - } - parts.push(nl); - lastConsumed = j; - if (parens === 0 && brackets === 0 && braces === 0) { - break; - } - } - - const joined = parts.join(' ').replace(/\s+/g, ' ').trim(); - const nameMatch = joined.match(/^(?:always|Always|eventually|Eventually)\s*\(\s*(\w+)\s*\)$/); - return { - type: 'verify', - name: nameMatch ? nameMatch[1] : 'unnamed', - temporalExpr: joined, - }; -} - function parseConstraintAnyForm(lines: string[], startIndex: number): ConstraintNode | null { const line = lines[startIndex].trim(); diff --git a/compiler/test-ast.mjs b/compiler/test-ast.mjs deleted file mode 100644 index 4157fa3..0000000 --- a/compiler/test-ast.mjs +++ /dev/null @@ -1,16 +0,0 @@ -import { parseSpeckFile } from './dist/parser.js'; -import fs from 'fs'; - -const ast = parseSpeckFile('/home/sscoble/speckl/examples/Raft.speck'); -for (const speck of ast.specks) { - for (const m of speck.members) { - if (m.type === 'action') { - for (const s of (m.statements || [])) { - if (s.type === 'ifblock') { - console.log('--- ifblock in', m.name, '---'); - console.log('raw:', s.raw.substring(0, 200)); - } - } - } - } -} diff --git a/compiler/test-output/RetryHandler.prov.jsonld b/compiler/test-output/RetryHandler.prov.jsonld index f24edcb..ecebba2 100644 --- a/compiler/test-output/RetryHandler.prov.jsonld +++ b/compiler/test-output/RetryHandler.prov.jsonld @@ -12,7 +12,7 @@ "@type": "prov:Generation", "prov:activity": { "@type": "prov:Activity", - "prov:startTime": "2026-07-14T08:10:55.228Z" + "prov:startTime": "2026-05-11T17:13:39.546Z" } }, "rdfs:label": "RetryHandler", diff --git a/compiler/test-output/RetryHandler.specbom.cdx.json b/compiler/test-output/RetryHandler.specbom.cdx.json index 9831b3c..038591b 100644 --- a/compiler/test-output/RetryHandler.specbom.cdx.json +++ b/compiler/test-output/RetryHandler.specbom.cdx.json @@ -38,7 +38,7 @@ "name": "Scott Scoble", "email": "scott@scoble.me" }, - "timestamp": "2026-07-14T08:10:55.232Z" + "timestamp": "2026-05-11T17:13:39.549Z" }, { "subject": "speck:RetryHandler", @@ -53,7 +53,7 @@ "name": "Speckl Compiler", "email": "compiler@speckl.scoble.me" }, - "timestamp": "2026-07-14T08:10:55.232Z" + "timestamp": "2026-05-11T17:13:39.549Z" }, { "subject": "speck:RetryHandler", @@ -68,7 +68,7 @@ "name": "Speckl Compiler", "email": "compiler@speckl.scoble.me" }, - "timestamp": "2026-07-14T08:10:55.232Z" + "timestamp": "2026-05-11T17:13:39.549Z" } ] } \ No newline at end of file diff --git a/compiler/test-output/RetryHandler.specbom.spdx.json b/compiler/test-output/RetryHandler.specbom.spdx.json index 573c263..12d2884 100644 --- a/compiler/test-output/RetryHandler.specbom.spdx.json +++ b/compiler/test-output/RetryHandler.specbom.spdx.json @@ -13,7 +13,7 @@ "spdxVersion": "3.0.1", "dataLicense": "CC0-1.0", "creationInfo": { - "created": "2026-07-14T08:10:55.233Z", + "created": "2026-05-11T17:13:39.551Z", "createdBy": [ "Organization: Speckl", "tool: speckl-compile-0.2.0" @@ -27,7 +27,7 @@ "@type": "spdx:Tool", "name": "speckl-compile" }, - "timestamp": "2026-07-14T08:10:55.233Z", + "timestamp": "2026-05-11T17:13:39.551Z", "comment": "Review type: manual" } ] diff --git a/compiler/test-parser.mjs b/compiler/test-parser.mjs deleted file mode 100644 index be64116..0000000 --- a/compiler/test-parser.mjs +++ /dev/null @@ -1,22 +0,0 @@ -import { parseActionStatements } from './dist/expr/stmt-parser.js'; - -const tests = [ - ['serverState[voter].currentTerm := req.term'], - ['let newTerm := 5', 'newTerm := 6'], - ['require foo == bar'], - ['return 5'], - ['emit VoteGranted { voter: voter, candidate: 1, term: 2 }'], - ['if foo { x := 1 } else { y := 2 }'], - ['x := 1', 'y := 2', 'return 5'], -]; - -for (const lines of tests) { - console.log('---'); - console.log('input:', lines); - try { - const out = parseActionStatements(lines); - console.log('output:', JSON.stringify(out, null, 2).substring(0, 700)); - } catch (e) { - console.log('error:', e.message); - } -} diff --git a/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json b/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json deleted file mode 100644 index e34a952..0000000 --- a/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"4.1.9","results":[[":compiler/dist/__tests__/compiler.test.js",{"duration":21.732912999999996,"failed":false}],[":compiler/__tests__/parser.test.ts",{"duration":56.655685000000005,"failed":false}],[":compiler/src/__tests__/compiler.test.ts",{"duration":3388.7825,"failed":false}]]} \ No newline at end of file diff --git a/out_fresh/OAuth2AuthorizationCode.specbom.cdx.json b/out_fresh/OAuth2AuthorizationCode.specbom.cdx.json deleted file mode 100644 index 1d6ddc4..0000000 --- a/out_fresh/OAuth2AuthorizationCode.specbom.cdx.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "bomFormat": "CycloneDX", - "specVersion": "1.6", - "components": [], - "metadata": { - "tools": [], - "component": { - "type": "application", - "name": "OAuth2AuthorizationCode", - "version": "0.2.0", - "properties": [] - } - }, - "annotations": [] -} \ No newline at end of file diff --git a/out_fresh/OAuth2AuthorizationCode.specbom.spdx.json b/out_fresh/OAuth2AuthorizationCode.specbom.spdx.json deleted file mode 100644 index 1c98614..0000000 --- a/out_fresh/OAuth2AuthorizationCode.specbom.spdx.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "@context": [ - "https://spdx.github.io/spdx-v3/spdx-context.jsonld", - { - "speckl": "https://speckl.scoble.me/ns/v0.2#" - } - ], - "@type": "spdx:Document", - "spdx": { - "@id": "spdx:OAuth2AuthorizationCode", - "@type": "spdx:Snippet", - "name": "OAuth2AuthorizationCode", - "spdxVersion": "3.0.1", - "dataLicense": "CC0-1.0", - "creationInfo": { - "created": "2026-06-08T14:27:09.674Z", - "createdBy": [ - "Organization: Speckl", - "tool: speckl-compile-0.2.0" - ] - } - }, - "builtBy": [], - "relationships": [], - "elements": [] -} \ No newline at end of file diff --git a/out_fresh/OAuth2AuthorizationCode.ts b/out_fresh/OAuth2AuthorizationCode.ts deleted file mode 100644 index b82accf..0000000 --- a/out_fresh/OAuth2AuthorizationCode.ts +++ /dev/null @@ -1,192 +0,0 @@ -// Auto-generated by speckl-compile from OAuth2AuthorizationCode -// DO NOT EDIT MANUALLY — regenerate from .speckdl source - -export const OAuth2AuthorizationCodeOAuth2AuthorizationCodeState = { - Open: 'open', - Closed: 'closed', -} as const; -export type OAuth2AuthorizationCodeOAuth2AuthorizationCodeState = typeof OAuth2AuthorizationCodeOAuth2AuthorizationCodeState[keyof typeof OAuth2AuthorizationCodeOAuth2AuthorizationCodeState]; - - - -// Simple hash utility for SpeckDL hash() function -// In production, replace with a real crypto hash -function simpleHash(s: string, method?: string): string { - let h = 0; - for (let i = 0; i < s.length; i++) { - h = ((h << 5) - h + s.charCodeAt(i)) | 0; - } - return 'h_' + Math.abs(h).toString(16); -} - - -// Runtime type placeholders (opaque record types) -type AccessToken = any; -type AuthorizationCode = any; -type Bool }) = any; -type ClientId = any; -type ClientSecret = any; -type CodeChallenge = any; -type CodeVerifier = any; -type Map(AccessToken, { client_id: ClientId = any; -type Map(AuthorizationCode, { client_id: ClientId = any; -type Map(RefreshToken, { client_id: ClientId = any; -type Nat }) = any; -type RedirectUri = any; -type RefreshRequest = any; -type RefreshToken }) = any; -type Scope = any; -type SessionId = any; -type State = any; -type TokenRequest = any; -type UserId = any; - -export class OAuth2AuthorizationCodeMachine { - clients!: Map; client_secret: ClientSecret }>; - authorizationCodes!: Map(AuthorizationCode, { client_id: ClientId; - redirect_uri!: RedirectUri; - state!: State; - code_challenge!: CodeChallenge; - code_challenge_method!: string; - scope!: Scope; - user_id!: UserId; - session_id!: SessionId; - created_at!: number; - used!: Bool }); - accessTokens!: Map(AccessToken, { client_id: ClientId; - user_id!: UserId; - scope!: Scope; - expires_at!: number; - session_id!: SessionId; - refresh_token!: RefreshToken }); - refreshTokens!: Map(RefreshToken, { client_id: ClientId; - user_id!: UserId; - scope!: Scope; - access_token!: AccessToken; - created_at!: Nat }); - sessions!: Map; - stateNonces!: Map; - pkceChallenges!: Map; - currentTime!: number; - decisionLog: any[] = []; - - constructor() { - // No init block defined - } - - Authorize(client: ClientId, redirectUri: RedirectUri, scope: Scope, userId: UserId, sessionId: SessionId) { - const xxx: any = {} as any; // FIXME: parser dropped let/forall - const client_id: any = {} as any; // FIXME: parser dropped let/forall - const code_verifier_hash: any = {} as any; // FIXME: parser dropped let/forall - const __STR_LIT_0__: any = {} as any; // FIXME: parser dropped let/forall - const method: any = {} as any; // FIXME: parser dropped let/forall - const __STR_LIT_1__: any = {} as any; // FIXME: parser dropped let/forall - if (!(this.clients.has(client))) throw new Error('Guard failed: this.clients.has(client)'); - if (!(this.clients.get(client)!.redirect_uris.has(redirectUri))) throw new Error('Guard failed: this.clients.get(client)!.redirect_uris.has(redirectUri)'); - if (!(this.sessions.has(sessionId))) throw new Error('Guard failed: this.sessions.has(sessionId)'); - if (!(this.sessions.get(sessionId)!.user_id === userId)) throw new Error('Guard failed: this.sessions.get(sessionId)!.user_id === userId'); - const state = "state_" + simpleHash(client + redirectUri + this.currentTime); - const codeVerifier = "verifier_" + simpleHash(client + userId + this.currentTime); - const codeChallenge = simpleHash(codeVerifier, "S256"); - this.stateNonces.set(state, { client_id: client, redirect_uri: redirectUri }); - this.pkceChallenges.set(codeChallenge, { code_verifier_hash: simpleHash(codeVerifier, __STR_LIT_0__), method: __STR_LIT_1__ }); - const authCode = "code_" + simpleHash(client + userId + this.currentTime); - this.authorizationCodes.set(authCode, { client_id: client, redirect_uri: redirectUri, state: state, code_challenge: codeChallenge, code_challenge_method: __STR_LIT_0__, scope: scope, user_id: userId, session_id: sessionId, created_at: this.currentTime, used: false }); - } - - ApproveAuthorization(code: AuthorizationCode, userId: UserId) { - const xxx: any = {} as any; // FIXME: parser dropped let/forall - if (!(this.authorizationCodes.has(code))) throw new Error('Guard failed: this.authorizationCodes.has(code)'); - const c = this.authorizationCodes.get(code)!; - if (!(c.user_id === userId)) throw new Error('Guard failed: c.user_id === userId'); - if (!(c.used === false)) throw new Error('Guard failed: c.used === false'); - } - - ExchangeCode(req: TokenRequest) { - const xxx: any = {} as any; // FIXME: parser dropped let/forall - const client_id: any = {} as any; // FIXME: parser dropped let/forall - if (!(this.clients.has(req.client_id))) throw new Error('Guard failed: this.clients.has(req.client_id)'); - if (!(this.authorizationCodes.has(req.code))) throw new Error('Guard failed: this.authorizationCodes.has(req.code)'); - const c = this.authorizationCodes.get(req.code)!; - if (!(c.used === false)) throw new Error('Guard failed: c.used === false'); - if (!(c.client_id === req.client_id)) throw new Error('Guard failed: c.client_id === req.client_id'); - if (!(c.redirect_uri === req.redirect_uri)) throw new Error('Guard failed: c.redirect_uri === req.redirect_uri'); - const expectedChallenge = simpleHash(req.code_verifier, c.code_challenge_method); - if (!(expectedChallenge === c.code_challenge)) throw new Error('Guard failed: expectedChallenge === c.code_challenge'); - this.pkceChallenges.delete(c.code_challenge); - this.stateNonces.delete(c.state); - const accessToken = "access_" + simpleHash(req.client_id + c.user_id + this.currentTime); - const refreshToken = "refresh_" + simpleHash(req.client_id + c.user_id + this.currentTime); - const expiresAt = this.currentTime + 3600; - this.accessTokens.set(accessToken, { client_id: req.client_id, user_id: c.user_id, scope: c.scope, expires_at: expiresAt, session_id: c.session_id, refresh_token: refreshToken }); - this.refreshTokens.set(refreshToken, { client_id: req.client_id, user_id: c.user_id, scope: c.scope, access_token: accessToken, created_at: this.currentTime }); - } - - RefreshToken(req: RefreshRequest) { - const xxx: any = {} as any; // FIXME: parser dropped let/forall - const client_id: any = {} as any; // FIXME: parser dropped let/forall - if (!(this.clients.has(req.client_id))) throw new Error('Guard failed: this.clients.has(req.client_id)'); - if (!(this.refreshTokens.has(req.refresh_token))) throw new Error('Guard failed: this.refreshTokens.has(req.refresh_token)'); - const r = this.refreshTokens.get(req.refresh_token)!; - if (!(r.client_id === req.client_id)) throw new Error('Guard failed: r.client_id === req.client_id'); - this.accessTokens.delete(r.access_token); - const newAccessToken = "access_" + simpleHash(req.client_id + r.user_id + this.currentTime); - const newRefreshToken = "refresh_" + simpleHash(req.client_id + r.user_id + this.currentTime); - const expiresAt = this.currentTime + 3600; - this.accessTokens.set(newAccessToken, { client_id: req.client_id, user_id: r.user_id, scope: req.scope.or(r.scope), expires_at: expiresAt, session_id: r.access_token.session_id, refresh_token: newRefreshToken }); - this.refreshTokens.set(newRefreshToken, { client_id: req.client_id, user_id: r.user_id, scope: req.scope.or(r.scope), access_token: newAccessToken, created_at: this.currentTime }); - this.refreshTokens.delete(req.refresh_token); - } - - RevokeToken(client: ClientId, token: string, tokenType: string) { - const xxx: any = {} as any; // FIXME: parser dropped let/forall - const t: any = {} as any; // FIXME: parser dropped let/forall - const r: any = {} as any; // FIXME: parser dropped let/forall - if (!(this.clients.has(client))) throw new Error('Guard failed: this.clients.has(client)'); - if (tokenType === "access") { - if (!(this.accessTokens.has(token))) throw new Error('Guard failed: this.accessTokens.has(token)'); - this.t = this.accessTokens.get(token)!; - if (!(t.client_id === client)) throw new Error('Guard failed: t.client_id === client'); - this.s[token] = null; - this.s[t.refresh_token] = null; - } else { - if (tokenType === "refresh") { - if (!(this.refreshTokens.has(token))) throw new Error('Guard failed: this.refreshTokens.has(token)'); - this.r = this.refreshTokens.get(token)!; - if (!(r.client_id === client)) throw new Error('Guard failed: r.client_id === client'); - this.s[token] = null; - this.s[r.access_token] = null; - } - } - } - - VerifyPKCE(code: AuthorizationCode, verifier: CodeVerifier) { - const xxx: any = {} as any; // FIXME: parser dropped let/forall - if (!(this.authorizationCodes.has(code))) throw new Error('Guard failed: this.authorizationCodes.has(code)'); - const c = this.authorizationCodes.get(code)!; - if (!(c.used === false)) throw new Error('Guard failed: c.used === false'); - const expectedChallenge = simpleHash(verifier, c.code_challenge_method); - if (!(expectedChallenge === c.code_challenge)) throw new Error('Guard failed: expectedChallenge === c.code_challenge'); - } - - - - // V1: Always(NoTokenLeakage) - // Z3 call-out: Bounded Model Checking (BMC) with depth = decisionLog.length+1. - // Mirrors the SMT-LIB BMC emitted by compiler/src/generators/z3.ts (emitBMC). - // The inner expression is SpeckDL; we translate it to a TS boolean - // check that reads the current class state via this.. - async verify1(): Promise { - // Temporal: Always(NoTokenLeakage) - // LTL: always(p). Bounded check — p must hold at every step in the - // bounded trace (decision log + current state). The first step - // where p is false violates the always-quantified property. - if (!(NoTokenLeakage)) return false; - for (const _evt of this.decisionLog) { - // Each emit() entry is a step boundary; p is re-evaluated - // against the live state (BMC "safety-at-horizon" view). - if (!(NoTokenLeakage)) return false; - } - return true; - } -} diff --git a/scripts/canned-demo.sh b/scripts/canned-demo.sh deleted file mode 100755 index 03961ba..0000000 --- a/scripts/canned-demo.sh +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/env bash -# canned-demo.sh — 5-min "my AI doesn't slop" demo for Harris -# Story: gates, rubrics, filtered retry. Artifact: ToggleSwitch.speck. -# Run from the speckl repo root: bash scripts/canned-demo.sh -# -# What this proves: the same spec compiled twice produces byte-identical -# artifacts *except* for a real, gate-caught, deterministic-input violation -# (timestamps baked in by an LLM-written generator). The fix is one line -# per generator. The agent that wrote the gate is the same agent that -# would have written the slop. The gate is what makes it trustworthy. -# -# This is a *property*, not a promise. "My AI doesn't slop" because the -# gate is structural, not advisory. - -set -uo pipefail - -SPECKL_ROOT="${SPECKL_ROOT:-$HOME/speckl}" -SPEC="examples/ToggleSwitch.speck" -RUN_A="/tmp/speckl-demo-run-a" -RUN_B="/tmp/speckl-demo-run-b" -ARTIFACTS=(ToggleSwitch.ts ToggleSwitch.prov.jsonld ToggleSwitch.specbom.cdx.json ToggleSwitch.specbom.spdx.json) - -red() { printf "\033[0;31m%s\033[0m\n" "$*"; } -grn() { printf "\033[0;32m%s\033[0m\n" "$*"; } -ylw() { printf "\033[0;33m%s\033[0m\n" "$*"; } -hdr() { printf "\n\033[1;36m=== %s ===\033[0m\n" "$*"; } - -cd "$SPECKL_ROOT" || { red "FAIL: cd $SPECKL_ROOT"; exit 1; } - -hdr "BEAT 1 — The spec ($SPEC)" -ylw "(30 lines: two states, two actions, one invariant)" -wc -l "$SPEC" -echo -sleep 2 - -hdr "BEAT 2 — Compile #1 → $RUN_A" -rm -rf "$RUN_A" -node compiler/dist/index.js "$SPEC" -o "$RUN_A" 2>&1 | tail -8 -echo -sleep 1 - -hdr "BEAT 3 — Compile #2 → $RUN_B" -rm -rf "$RUN_B" -node compiler/dist/index.js "$SPEC" -o "$RUN_B" 2>&1 | tail -3 -echo -sleep 1 - -hdr "BEAT 4 — The gate: byte-stability across two compiles" -ylw "Rule: SHA-256 must match for all 4 artifacts." -echo -PASS=0; FAIL=0 -for f in "${ARTIFACTS[@]}"; do - H1=$(sha256sum "$RUN_A/$f" 2>/dev/null | cut -d' ' -f1) - H2=$(sha256sum "$RUN_B/$f" 2>/dev/null | cut -d' ' -f1) - if [ "$H1" = "$H2" ] && [ -n "$H1" ]; then - grn " ✓ MATCH $f" - PASS=$((PASS+1)) - else - red " ✗ SLOP $f" - red " A: $H1" - red " B: $H2" - FAIL=$((FAIL+1)) - fi -done -echo -ylw "Result: $PASS pass, $FAIL fail" -echo -sleep 2 - -if [ "$FAIL" -gt 0 ]; then - hdr "BEAT 5 — The diagnosis: why the slop?" - ylw "First slop artifact, side-by-side diff:" - echo - for f in "${ARTIFACTS[@]}"; do - if ! diff -q "$RUN_A/$f" "$RUN_B/$f" >/dev/null 2>&1; then - echo "--- diff $f ---" - diff "$RUN_A/$f" "$RUN_B/$f" | head -6 - echo - break - fi - done - ylw "Reading the diff: the slop is a timestamp." - ylw "The generator baked wall-clock time into the artifact." - ylw "The spec is identical. The output is not." - echo - sleep 3 - - hdr "BEAT 6 — The fix: where the slop came from" - echo "Searching the generators for the load-bearing bug:" - echo - grep -rn "new Date" compiler/src/generators/ 2>/dev/null | head -8 - echo - ylw "Every 'new Date()' call in a deterministic generator is a gate bypass." - ylw "The fix is one line per generator:" - ylw " new Date().toISOString() → process.env.BUILD_TIME || spec.created" - ylw "The agent that wrote this bug is the same agent that would write the fix." - ylw "The gate is what makes the second one trustworthy." - echo - sleep 3 - - hdr "BEAT 7 — The discipline (no fix applied — gap is the demo)" - ylw "The point isn't that the gap exists. The gap is HONEST." - ylw "The point is the gate caught it. The rubric was clear." - ylw "The retry is what makes the spec shippable." - echo - ylw "Same spec, same gate, same rubric. The agent's output is" - ylw "structurally prevented from drifting past the gate." - ylw "That's how 'my AI doesn't slop' becomes a property, not a promise." - echo -fi diff --git a/test-output/RetryHandler.prov.jsonld b/test-output/RetryHandler.prov.jsonld deleted file mode 100644 index 9afd1e9..0000000 --- a/test-output/RetryHandler.prov.jsonld +++ /dev/null @@ -1,61 +0,0 @@ -{ - "@context": { - "prov": "http://www.w3.org/ns/prov#", - "speckl": "https://speckl.scoble.me/ns/v0.2#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#" - }, - "@graph": [ - { - "@type": "prov:Entity", - "@id": "speck:RetryHandler", - "prov:qualifiedGeneration": { - "@type": "prov:Generation", - "prov:activity": { - "@type": "prov:Activity", - "prov:startTime": "2026-06-30T02:09:28.187Z" - } - }, - "rdfs:label": "RetryHandler", - "prov:wasDerivedFrom": { - "@id": "speck:FaultHandler" - }, - "rdfs:comment": "specialization for retry logic", - "speckl:satisfies": { - "@id": "requirement:RESILIENCE-REQ-01" - }, - "prov:wasAttributedTo": { - "@id": "agent:Scott Scoble" - }, - "prov:wasInformedBy": { - "@id": "source:architecture_review:AR-2024-0215" - } - }, - { - "@type": "prov:Entity", - "@id": "speck:FaultHandler" - }, - { - "@type": "prov:Entity", - "@id": "requirement:RESILIENCE-REQ-01", - "rdfs:label": "RESILIENCE-REQ-01", - "speckl:clause": "3.1.2" - }, - { - "@type": "prov:Entity", - "@id": "requirement:RESILIENCE-REQ-02", - "rdfs:label": "RESILIENCE-REQ-02" - }, - { - "@type": "prov:Agent", - "@id": "agent:Scott Scoble", - "rdfs:label": "Scott Scoble", - "foaf:email": "scott@scoble.me" - }, - { - "@type": "prov:Activity", - "@id": "source:architecture_review:AR-2024-0215", - "prov:type": "architecture_review", - "rdfs:label": "architecture_review - AR-2024-0215" - } - ] -} \ No newline at end of file diff --git a/test-output/RetryHandler.specbom.cdx.json b/test-output/RetryHandler.specbom.cdx.json deleted file mode 100644 index b4f34fc..0000000 --- a/test-output/RetryHandler.specbom.cdx.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "bomFormat": "CycloneDX", - "specVersion": "1.6", - "components": [], - "metadata": { - "tools": [], - "component": { - "type": "application", - "name": "RetryHandler", - "version": "0.2.0", - "properties": [ - { - "name": "speckl:derivesFrom", - "value": "FaultHandler" - }, - { - "name": "speckl:satisfies", - "value": "RESILIENCE-REQ-01 clause 3.1.2" - }, - { - "name": "speckl:satisfies", - "value": "RESILIENCE-REQ-02" - } - ] - } - }, - "annotations": [ - { - "subject": "speck:RetryHandler", - "annotations": [ - { - "type": "tag", - "value": "provenanceType", - "text": "author" - } - ], - "author": { - "name": "Scott Scoble", - "email": "scott@scoble.me" - }, - "timestamp": "2026-06-30T02:09:28.192Z" - }, - { - "subject": "speck:RetryHandler", - "annotations": [ - { - "type": "tag", - "value": "provenanceType", - "text": "source" - } - ], - "author": { - "name": "Speckl Compiler", - "email": "compiler@speckl.scoble.me" - }, - "timestamp": "2026-06-30T02:09:28.192Z" - }, - { - "subject": "speck:RetryHandler", - "annotations": [ - { - "type": "tag", - "value": "reviewType", - "text": "manual" - } - ], - "author": { - "name": "Speckl Compiler", - "email": "compiler@speckl.scoble.me" - }, - "timestamp": "2026-06-30T02:09:28.192Z" - } - ] -} \ No newline at end of file diff --git a/test-output/RetryHandler.specbom.spdx.json b/test-output/RetryHandler.specbom.spdx.json deleted file mode 100644 index cf74d3a..0000000 --- a/test-output/RetryHandler.specbom.spdx.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "@context": [ - "https://spdx.github.io/spdx-v3/spdx-context.jsonld", - { - "speckl": "https://speckl.scoble.me/ns/v0.2#" - } - ], - "@type": "spdx:Document", - "spdx": { - "@id": "spdx:RetryHandler", - "@type": "spdx:Snippet", - "name": "RetryHandler", - "spdxVersion": "3.0.1", - "dataLicense": "CC0-1.0", - "creationInfo": { - "created": "2026-06-30T02:09:28.194Z", - "createdBy": [ - "Organization: Speckl", - "tool: speckl-compile-0.2.0" - ] - }, - "annotations": [ - { - "@type": "spdx:Annotation", - "annotationType": "spdx:REVIEW", - "annotator": { - "@type": "spdx:Tool", - "name": "speckl-compile" - }, - "timestamp": "2026-06-30T02:09:28.194Z", - "comment": "Review type: manual" - } - ] - }, - "builtBy": [], - "relationships": [ - { - "from": { - "@id": "spdx:RetryHandler" - }, - "to": { - "@id": "spdx:speck:FaultHandler" - }, - "relationshipType": "spdx:derivesFrom" - }, - { - "from": { - "@id": "spdx:RetryHandler" - }, - "to": { - "@id": "spdx:requirement:RESILIENCE-REQ-01" - }, - "relationshipType": "speckl:satisfies", - "additionalProperties": [ - { - "name": "speckl:clause", - "value": "3.1.2" - } - ] - }, - { - "from": { - "@id": "spdx:RetryHandler" - }, - "to": { - "@id": "spdx:requirement:RESILIENCE-REQ-02" - }, - "relationshipType": "speckl:satisfies" - }, - { - "from": { - "@id": "spdx:RetryHandler" - }, - "to": { - "@id": "spdx:agent:Scott Scoble" - }, - "relationshipType": "spdx:wasAttributedTo" - }, - { - "from": { - "@id": "spdx:RetryHandler" - }, - "to": { - "@id": "spdx:source:architecture_review:AR-2024-0215" - }, - "relationshipType": "spdx:wasInformedBy" - } - ], - "elements": [ - { - "@type": "spdx:Requirement", - "@id": "spdx:requirement:RESILIENCE-REQ-01", - "name": "RESILIENCE-REQ-01" - }, - { - "@type": "spdx:Requirement", - "@id": "spdx:requirement:RESILIENCE-REQ-02", - "name": "RESILIENCE-REQ-02" - }, - { - "@type": "spdx:Person", - "@id": "spdx:agent:Scott Scoble", - "name": "Scott Scoble", - "email": "scott@scoble.me" - }, - { - "@type": "spdx:Activity", - "@id": "spdx:source:architecture_review:AR-2024-0215", - "name": "architecture_review - AR-2024-0215", - "type": "architecture_review" - } - ] -} \ No newline at end of file