commit ed20088fcccbd1622def32f5fe151bc38e9727d1 parent 62a8e2ec3b979ca5a77dea6bd7155a7436f8467e Author: James Eversole <james@eversole.co> Date: Sat, 24 Oct 2026 18:20:27 -0500 Refresh canonical IO site assets and complete naming coverage Prepare immutable 0.9.0 releases, all 63 complete library interfaces, independently captured goldens and compiler origin 62a8e2e. Preserve historical release coordinates and label retired source paths without substituting current source. Cover nested workspace maps and neutral registry runner names; retain explicit envelope-version inspection. Rebuild the final support cohort with genuine receipts. Native flake checks, 220 JS tests, Chromium/Firefox and private IO controls pass. Rolling retention is the remaining checkpoint gate. Diffstat:
31 files changed, 819 insertions(+), 101 deletions(-)
diff --git a/archive/scp/tricu.workspace b/archive/scp/tricu.workspace @@ -15,7 +15,6 @@ module parser = lib/parser.tri module patterns = lib/patterns.tri module prelude = lib/prelude.tri module socket = lib/socket.tri - # tricu source compiler and shared module/CAS infrastructure module source.ast = lib/source/ast.tri module source.build = lib/source/build.tri @@ -37,7 +36,6 @@ module source.resolve = lib/source/resolve.tri module source.stable = lib/source/stable.tri module source.unit = lib/source/unit.tri module source.workspace-build = lib/source/workspace-build.tri - # Arboricx formats and services module arboricx = lib/arboricx/arboricx.tri module arboricx.common = lib/arboricx/common.tri @@ -45,7 +43,6 @@ module arboricx.dispatch = lib/arboricx/dispatch.tri module arboricx.manifest = lib/arboricx/manifest.tri module arboricx.nodes = lib/arboricx/nodes.tri module arboricx.server = lib/arboricx/server.tri - # SCP parsing, validation and lexical compilation module consumers.base-source = lib/consumer/compiler/base-source.tri module consumers.lexical-worker = lib/consumer/compiler/lexical-worker.tri @@ -54,7 +51,6 @@ module consumers.source = lib/consumer/compiler/source.tri module consumers.unit-compile = lib/consumer/compiler/unit-compile.tri module consumers.unit-source = lib/consumer/compiler/unit-source.tri module consumers.validate = lib/consumer/compiler/validate.tri - # SCP authored IR, reference execution and runtime adapters module consumers.effect = lib/consumer/runtime/effect.tri module consumers.effect-compose = lib/consumer/runtime/effect-compose.tri @@ -64,30 +60,24 @@ module consumers.effect-packages = lib/consumer/effects/packages.tri module consumers.file = lib/consumer/runtime/file.tri module consumers.linked-reference = lib/consumer/runtime/linked-reference.tri module consumers.structural = lib/consumer/runtime/structural.tri - # SCP project phases and publication module consumers.build-driver = lib/consumer/build/build-driver.tri module consumers.command = lib/consumer/build/command.tri module consumers.configure = lib/consumer/build/configure.tri module consumers.unit-build = lib/consumer/build/unit-build.tri - # SCP formatting and single-source tools module consumers.format = lib/consumer/tools/format.tri module consumers.source-worker = lib/consumer/tools/source-worker.tri - # Registry-specific adapters module consumers.registry-base = lib/consumer/registry/registry-base.tri module consumers.registry-path = lib/consumer/registry/registry-path.tri module consumers.registry-source = lib/consumer/registry/registry-source.tri module consumers.registry = lib/consumer/registry/registry.tri - # Text-specific adapters module consumers.text-summary = lib/consumer/text/text-summary.tri - # Reusable lambda comparison implementations module consumers.comparison.registry-lambda = lib/consumer/comparison/registry-lambda.tri module consumers.comparison.text-summary-lambda = lib/consumer/comparison/text-summary-lambda.tri - # Research fixtures, alternative lowerings and pinned-source linking module consumers.fizzbuzz = lib/consumer/experiments/fizzbuzz.tri module consumers.layout = lib/consumer/experiments/layout.tri @@ -98,7 +88,6 @@ module consumers.lowerings.project = lib/consumer/experiments/lowerings/project. module consumers.lowerings.specialize = lib/consumer/experiments/lowerings/specialize.tri module consumers.lowerings.success = lib/consumer/experiments/lowerings/success.tri module consumers.lowerings.tail-fold = lib/consumer/experiments/lowerings/tail-fold.tri - # Application workspace declarations module demos.consumer-configuration-workspace = demos/consumers/configurations/configuration-workspace.tri module demos.consumer-fizzbuzz-workspace = demos/consumers/fizzbuzz/fizzbuzz-workspace.tri diff --git a/demos/arboricx-inspection/tricu.workspace b/demos/arboricx-inspection/tricu.workspace @@ -2,7 +2,7 @@ tricu.workspace.v1 arboricx_app ../../tricu-apps/arboricxServer.tri arboricx_handlers ../../lib/arboricx/handlers.tri arboricx_server ../../lib/arboricx/server.tri -arboricx_streaming_v2 ../../lib/arboricx/streaming-v2.tri +arboricx_streaming ../../lib/arboricx/streaming.tri base ../../lib/base.tri bytes ../../lib/bytes.tri conversions ../../lib/conversions.tri @@ -11,10 +11,9 @@ handler_log ../../lib/handlers/log.tri handlers ../../lib/handlers.tri http ../../lib/http.tri io ../../lib/io.tri -io_v2 ../../lib/io-v2.tri -io_v2_artifacts ../../lib/io-v2/artifacts.tri -io_v2_http ../../lib/io-v2/http-transport.tri -io_v2_storage ../../lib/io-v2/storage.tri +io_artifacts ../../lib/io/artifacts.tri +io_http ../../lib/io/http-transport.tri +io_storage ../../lib/io/storage.tri native_math ../../lib/math/native.tri parser ../../lib/parser.tri prelude ../../lib/prelude.tri diff --git a/demos/interactionTrees/greet.tri b/demos/interactionTrees/greet.tri @@ -1,6 +1,6 @@ !import io as IO !import io_text as Text !export main --- Explicit v2 output, with ordinary write failure checked before success. +-- Explicit output, with ordinary write failure checked before success. main = IO.io (IO.require IO.stdout (writer : IO.require (Text.writeText writer "Hello, tricu\n") (_ : IO.pure ""))) diff --git a/docs/compiler-rebuilding.md b/docs/compiler-rebuilding.md @@ -117,7 +117,7 @@ python3 test/bootstrap_generations.py "$FIRST" --bootstrap-kit "$V1_KIT" \ ``` Acceptance of the selected cohort requires full pair verification and retention. -Both current source maps select `compiler_io`, the compiler storage facade, +The compiler source map selects `compiler_io`, the compiler storage facade, plus its v2 dependencies. Compiler source imports this facade explicitly; general application `io` is independent. The packaged compiler uses v2. Input limits and source-owned storage semantics are described in the @@ -138,7 +138,7 @@ compiler, writes a versioned kit, stages the full v2 map and builds only rejects conflicting versions, missing transition adapters and unsupported hosts: ```sh -python3 test/io_generation.py "$TRICU" --directory /tmp/new-v2-generation-probe +python3 test/io_generation.py "$TRICU" --directory /tmp/new-io-generation-probe ``` This probe covers preparation and one module. It also checks mixed native, unit diff --git a/docs/validation.md b/docs/validation.md @@ -1207,7 +1207,7 @@ For a retained-built v2 candidate application compiler, test actual offline repl ```sh python3 test/io_provenance.py result/bin/tricu \ - --compiler-bundle "$V2_CANDIDATE" --directory /tmp/new-v2-provenance + --compiler-bundle "$V2_CANDIDATE" --directory /tmp/new-io-provenance ``` This captures a dependency graph with raw Unicode source, removes its producer, diff --git a/ext/demo-site/bundles/99824824d27932bc9e44851fff367ae0fea6d05a7604bb634bf0daad8ef5ab7e.arboricx b/ext/demo-site/bundles/99824824d27932bc9e44851fff367ae0fea6d05a7604bb634bf0daad8ef5ab7e.arboricx Binary files differ. diff --git a/ext/demo-site/bundles/e27bf77a09cdc2d867aaccf65d0578da3308c877e51dea1bb87286ddc7196228.arboricx b/ext/demo-site/bundles/e27bf77a09cdc2d867aaccf65d0578da3308c877e51dea1bb87286ddc7196228.arboricx Binary files differ. diff --git a/ext/demo-site/bundles/f5d1f34f05dedf85861410c087c42786a5079a1c449b9dc2069e39f088005a19.arboricx b/ext/demo-site/bundles/f5d1f34f05dedf85861410c087c42786a5079a1c449b9dc2069e39f088005a19.arboricx Binary files differ. diff --git a/ext/demo-site/bundles/faff942bf4539f70d3fd5b085d6435199307d71e07da18f4b144c0b0597eb897.arboricx b/ext/demo-site/bundles/faff942bf4539f70d3fd5b085d6435199307d71e07da18f4b144c0b0597eb897.arboricx Binary files differ. diff --git a/ext/demo-site/compiler-reference.v1 b/ext/demo-site/compiler-reference.v1 @@ -3,31 +3,31 @@ module source.index source_index lib/source/index.tri d3db01d9854f2371c0e1d36a99 module source.map source_map lib/source/map.tri 8090a03dbe01b0403683c71d1a2f944c41647a77acb7918c36f0b8f329e9648c module source.unit source_unit lib/source/unit.tri 0883c40a3f5257574290b9598dca64073f52f9af126adf14c76f6974f26dfff0 module prelude prelude lib/prelude.tri 0c26a0142d15cc2a11a4317264491c797944e76ea8afa07a1efef240a70f4289 -module compiler.io compiler_io lib/source/io-v2.tri 575f7c3c8834bd2780f444a0078e72366fe2f0de6c4e00b4c3722e4da8bb9693 -module source.object source_object lib/source/object.tri 0f98a415e9bcdd223cd27eba9b501e91fe6b3778a2d5ea59218815081ab3d767 +module compiler.io compiler_io lib/source/io.tri b3b105527413625cc748a0a2934f0326c918f18b88d52502c6094ce705c59d3d +module source.object source_object lib/source/object.tri 1edbb06d7b853e57bac59654fa0a2224f5678131a0151ff744f4ea1a48228979 module source.module source_module lib/source/module.tri 49be76ef3607cedcafd4e6a599b90a7f0601b5d030e1431011e879342c9b0e91 module source.resolve source_resolve lib/source/resolve.tri 7f5f726392cbbdaa9f30aef09952a31eda14f034e04112a210f60f10542f6add module source.build source_build lib/source/build.tri 3bfd3a8ea35a6316e1ef9cc53ac2418a9dbd6115c69d129a1b2de81c87877e7a -module parser parser lib/parser.tri 31e8c679e086bdf9b68e05a4bb71fd413e66e53fd93b2e4b4a806930020b36e4 +module parser parser lib/parser.tri 7d287f19293acd8122bec448436b6ccbb51c499512a75e9879361a3f171d2cea module source.order source_order lib/source/order.tri ec97f34c89ead701af75053ea340ead1bb0fda13d83b474ca760c3aa359970fa module source.compile source_compile lib/source/compile.tri 3764484ae723d4311cf04b769251badf7f7a190d9480389303847be1ce665bb9 -module source.program source_program lib/source/program.tri 297b2195345b9bf4c49857aacd48545604157a9a0f7b3cb5d8ec7759e2e41e83 -module source.ast source_ast lib/source/ast.tri b6d05cace61c04032ea39a858dedc7482988dbb3ed47581a9a3239094263d314 -module base base lib/base.tri 7ba2537cc4ec0571a7aa8a02557551245ca04f5bc08d9f9c1eb4d2606ec67b37 -module bytes bytes lib/bytes.tri 6d057be42bc16788a34ce80cca7cb97251cf7dbbae8fd57100a31206ab3dd2a0 +module source.program source_program lib/source/program.tri e0be902e11394f4cdf1bac89b72e8f34aa2dda5fd51efb7b78fa17eab74b143e +module source.ast source_ast lib/source/ast.tri 780ce0315f02aa6bee4008cb073821f8fa0b0aeeea1f63de340129ab9450b50f +module base base lib/base.tri bc0a1a2c0f898586162729f1f03bbbb6ec08f21967bd4689d3ca4472e7102665 +module bytes bytes lib/bytes.tri 6ac03aae16808dc006858964549a13b7a9fffbc1b1d602ecd818145bbb91ea32 module conversions conversions lib/conversions.tri fd93454ad6cf7b0d906f367bed9a679f7f7e73cf424e33d8a62e63b023db6522 -module source.lexer source_lexer lib/source/lexer.tri 94ee3a70dbed59015891f7f5c2ef588d64f1a885218edc35eed98d96d85fd11b +module source.lexer source_lexer lib/source/lexer.tri 5171aa6561af480161f3c89a8001e681a1457e2f45ff78dfc10a8a3d8bfded8f module source.parser source_parser lib/source/parser.tri 23c8142e9629f029ae22b7c0b377bbfb69e4f9ecc5ce452094c47d063a49c9d6 -module source.core source_core lib/source/core.tri b132ca49c22098c8a5d638517d701ad8141028d9389594ac2134240d240a2637 -module source.lock source_lock lib/source/lock.tri 52c3f1b1f0d29975e3932850451dc8e3cee93ac475dac869d8e9eba7838bd830 +module source.core source_core lib/source/core.tri db23a84ef0ebd87b8b183475294a12378079f3deeb5b7e1b8cde310116f6dfcc +module source.lock source_lock lib/source/lock.tri 182bfa07e8065f3d8974a22a8ce2d6bbd6ccc6d11b861cf776d4ee945234256f module source.bundle source_bundle lib/source/bundle.tri 2373335a22f1a6c7d00c7dd612ec8498deb8502eaf48bd6e8aa9f9407a1bfc13 module graph graph lib/graph.tri e98fc7955feb673b86ac9176a211136493d6247b011cb80995fb53464028f976 module lexer lexer lib/lexer.tri 946bbf9797a5cf722c6e85f36ac36b1ec2dd3d1f3b2650187c182dff12162bf7 -module source.pattern source_pattern lib/source/pattern.tri b27f1eac18cbe8ad80cdd91f9f546b2d2a782b6cc5c5676232491b95751abe5a -module source.equations source_equations lib/source/equations.tri 825f175f5c6dd56e103b94e924283acf5913cbc4554fb42fc07a034f460d2076 -module source.stable source_stable lib/source/stable.tri 0d38a5a7511d4a08f648dfa28beaa312f9139bf9639f7779f2f83ac45134f439 -module math.native native_math lib/math/native.tri e9d0b87564d13695bef695c552e9707710d9147877f9d9dc5282c7335664cc57 -module io.v2 io_v2 lib/io-v2.tri 70485b7a5b624602449ced706a59277661d24eba73e0d6bacd4fa2968c79ec5d -module io.v2.storage io_v2_storage lib/io-v2/storage.tri 998f42cfd911244b126f5f83ab96a88e08517761b72e390d5c816f5566babd08 -module io.v2.text io_v2_text lib/io-v2/text.tri 4feaf064737bd896868e26bbe0d3ee7afaa79e217a58cd6196bf363d1a48ee30 -bundle 4c004391e4adddd550da0c73029fd471235935f9c0dc1a4ae7d54e43645c6e63 +module source.pattern source_pattern lib/source/pattern.tri 23d08ecc36fb9dadf24e70d2d94b518de1d289c70b652c6ebf4f41275f611718 +module source.equations source_equations lib/source/equations.tri 460303928fd6ec6ce437d55d7c50b009eb50840acbd93403bfed73a58c10b67c +module source.stable source_stable lib/source/stable.tri 47ebe7c143d9a639e3d4c9a8cc346411ac9607eeb9c6962050c9289c1a8cbbdf +module math.native native_math lib/math/native.tri ee0c8a09870e69fff8710da95ed672937da1943a37359fde82b941bc8c53a4b3 +module io io lib/io.tri 6ea754bc1920cda4dccfa3268a2346ab4c82d94dbf2656cbb24a2a846440fe93 +module io.storage io_storage lib/io/storage.tri f389a5949bce196d183e11389c9bd46f3e97cb990b6f9368300e6df79ee6e1a1 +module io.text io_text lib/io/text.tri e552168676a7653722b5821e2bfce8e06d760f5f9ddc91af0857040cc5cd6a12 +bundle 2ca3ab7e9bc2b7671f5e0a383c805ea00ec461de5df2a7405a5b18f879b19cb6 diff --git a/ext/demo-site/compiler.json b/ext/demo-site/compiler.json @@ -1,8 +1,8 @@ { "schema": 1, - "hash": "ee26329e1d6936fe64d37b4887ff5d153d65eb1e2b0d5f14b7dcf8249434a622", + "hash": "faff942bf4539f70d3fd5b085d6435199307d71e07da18f4b144c0b0597eb897", "export": "source_unit.compileStableModuleDefinitions", "backend": "stable", "reference": "test/fixtures/compiler-library.arboricx", - "referenceCommit": "7a196486d85b86aaab0d1ee62eec24eaa88b763a" + "referenceCommit": "62a8e2ec3b979ca5a77dea6bd7155a7436f8467e" } diff --git a/ext/demo-site/demos.json b/ext/demo-site/demos.json @@ -3,9 +3,9 @@ "backend": "stable", "nativeCompilerSha256": "6b7b389d64af12d85b85598db69d7ff71cf3dcb991c584e17e0caec8bcb44c7b", "compilerExport": "source_unit.compileStableModuleDefinitions", - "compilerBundleSha256": "ee26329e1d6936fe64d37b4887ff5d153d65eb1e2b0d5f14b7dcf8249434a622", - "compilerManifest": "f20f1ff67904f892a55d645e9b830454c285413bfc47c960d4208ca49eff244b", - "hostSha256": "6c1c71c66ad07dc6064408cffa5c8e034bb305232396baa033615abc94747f7e", + "compilerBundleSha256": "faff942bf4539f70d3fd5b085d6435199307d71e07da18f4b144c0b0597eb897", + "compilerManifest": "3dec0a4afa2327872dbd63247e86e40fbf85030188b5be799e1b82cb9f57f5b2", + "hostSha256": "0379ea68db3664a6672e7ae56338953935de3d15318d49a07fa634bded59af80", "demos": { "names-values": { "demandCases": [], diff --git a/ext/demo-site/environments.json b/ext/demo-site/environments.json @@ -1,6 +1,6 @@ { "schema": 1, - "compiler": "ee26329e1d6936fe64d37b4887ff5d153d65eb1e2b0d5f14b7dcf8249434a622", + "compiler": "faff942bf4539f70d3fd5b085d6435199307d71e07da18f4b144c0b0597eb897", "profiles": { "empty": null, "practical": { diff --git a/ext/demo-site/packages.json b/ext/demo-site/packages.json @@ -4717,6 +4717,687 @@ "manifest": "05e75a9f4d3c40db786f64820b78774566b8d51d77d11e6e1e244dad9360568e", "hash": "48ae69290f1858d9534fe1f60f7540ecaca466b6ec1f48a208c7b73981277fef", "title": "lib/tools/format-tri.tri" + }, + { + "name": "tricu-base", + "version": "0.9.0", + "hash": "f9f0ab0e44f6ae39479d74c6c66a2bdaba3f40bd26781c3ec95300c2ee3c07f3", + "manifest": "fa9d4df0f82cac2754fdd3e92009cb48064856ff4cc5b18f092309aef7ff5ed4", + "title": "Foundation: lists, Results and decimal formatting" + }, + { + "name": "tricu-file-io", + "version": "0.9.0", + "hash": "ae9c12c9bf2013b0c8711860a9b9dae310085dafc9c29388f6d6d3308b5f7b2b", + "manifest": "6f8add87fe39dd16c98025492360d957a4d97459631c08d0d0c10abfbec28de4", + "title": "File IO and hashing actions" + }, + { + "name": "arboricx-inspection", + "version": "0.9.0", + "hash": "f571888c5aa3f7a91e9d5d6c45c674851ea8e3598514ad8d535fd3e9056d0314", + "manifest": "fe9b420e1e776fa1dda7b77857e322c0509ed308bb18441b76a3b03023f93468", + "title": "Arboricx inspection: validate without execution" + }, + { + "name": "tricu-compiler", + "version": "0.9.0", + "hash": "faff942bf4539f70d3fd5b085d6435199307d71e07da18f4b144c0b0597eb897", + "manifest": "3dec0a4afa2327872dbd63247e86e40fbf85030188b5be799e1b82cb9f57f5b2", + "title": "Compiler library (stable browser source-unit API; native helpers)" + }, + { + "name": "tricu-source-builder", + "version": "0.9.0", + "hash": "6b7b389d64af12d85b85598db69d7ff71cf3dcb991c584e17e0caec8bcb44c7b", + "manifest": "12a965c8226a2501bc4ba3d5c885104f363fc1af984304aa9c6b7e4971869e08", + "title": "Stable native application compiler (modules, imports and publication)" + }, + { + "name": "arboricx-server", + "version": "0.9.0", + "hash": "7f18bb0a5c425b055912aecdd442776f3102f023c70e721395b3296ff0d42689", + "manifest": "a6876256adddf94e4631b6e14540df4db22b6ece63444ad963dc92174acee48d", + "title": "Arboricx registry server (native sockets and filesystem)" + }, + { + "name": "tricu-http", + "version": "0.9.0", + "hash": "aa8da80b7ea0e728ed276627737b8cc5350dda77d2360af6eac93b75667acaab", + "manifest": "b33334423eddc3c01098d0c0ad303da37044892cb0b6e6bad22af677ccf3aff6", + "title": "HTTP parsing, responses and native socket handlers" + }, + { + "name": "tricu-intensional-contracts", + "version": "0.9.0", + "hash": "ecab246978f122d1c13bc00028ca2cbc9332a8fc247a0b9726d74c712e5c1315", + "manifest": "7467e74f0c5b7dfad8d6a14d34171b2b0bcd7750423894e2ca920e0535fde7d1", + "title": "Intensional contracts: tree shapes and numeric structure" + }, + { + "name": "tricu-graphs", + "version": "0.9.0", + "hash": "5d3381723aafa9c5e4c4c3a6975de9481eb3160cbe52aca24076900528ef2603", + "manifest": "7b798a3afae6dce07b718bed855c7209ec3b898bb70b379dece935c4033cf9b6", + "title": "Dependency ordering and cycle witnesses (validated small graphs)" + }, + { + "name": "tricu-parser", + "version": "0.9.0", + "hash": "18b24788592f74b9c564c30214dff0231cb86338661d944ab697e7ae4ca1103e", + "manifest": "14282088469cc420dd014700da06998f6bb8dcf990fc885a464c0a1e1858e20d", + "title": "Parser combinators: diagnostics, consumption and commitment" + }, + { + "name": "tricu-math", + "version": "0.9.0", + "hash": "0932c810f71d18c022939b4faaa52722cc3b83330831ef5bec7659d03fd26ae1", + "manifest": "7f87549d587fa8c3be88af0ea988db3adcc3b35f1ffb48973553491b075614db", + "title": "Binary arithmetic and ASCII classifiers (canonical naturals only)" + }, + { + "name": "tricu-lexer", + "version": "0.9.0", + "hash": "5ec6ccb4827f0548444e480c0e6196ddaa7a570a44ebc6a91a922d7e59bf3012", + "manifest": "816df1a32853750a1254112aff8ae8c55ca86bf70e809d226969ab1d43a6688b", + "title": "Located character scans and token positions" + }, + { + "name": "tricu-binary", + "version": "0.9.0", + "hash": "1a52036b938708db5759dfa94c2058e27df5b638c625ef253b5e09e316c2a21d", + "manifest": "7a24af56a9ce9b947cadcafd3a9da127b1507275bfac62b9fa55e27490b176dc", + "title": "Checked byte readers, prefix parsing and UTF-8 validation" + }, + { + "name": "tricu-patterns", + "version": "0.9.0", + "hash": "3f65dce1eb074d496c42c961b0f9149ace2527ce8b3b968622b871ea5c5dc7ed", + "manifest": "703db8cd6c5679861257d1cc38c17be200241ade8db3812e8c387e9274aaa56e", + "title": "Ordered predicate/action dispatch and thunked conditionals" + }, + { + "name": "tricu-list-traversal", + "version": "0.9.0", + "hash": "60afc41f04fa65130326eeed4ca9e128bee5e90c7041f9641bbf9cfe87c142cd", + "manifest": "4c79b7ad124027147b8fddd98c2b66cfd776c36d915c95dfb1fbf9b31a51fb88", + "title": "Early-stopping list folds with retained input suffixes" + }, + { + "name": "tricu-formatter", + "version": "0.9.0", + "hash": "48ae69290f1858d9534fe1f60f7540ecaca466b6ec1f48a208c7b73981277fef", + "manifest": "05e75a9f4d3c40db786f64820b78774566b8d51d77d11e6e1e244dad9360568e", + "title": "Conservative tricu equation alignment (not an AST printer)" + }, + { + "name": "parser-demo", + "version": "0.9.0", + "hash": "355e41506f39e05da8c8a72a68aa810a486e062480322bac11af67e86980520e", + "manifest": "0c34bfdf800f8bd1b742e375a8f7c555c88d0c827268f684259433e834d94fed", + "title": "Parser combinators: complete input, prefixes and committed errors", + "demo": "parser" + }, + { + "name": "lexer-demo", + "version": "0.9.0", + "hash": "e756a481b3056a2e76f50316ccf77bfab8b15727b7bec899580c2eb919e668b2", + "manifest": "ed99e054e9c862668e165f458d3afcdc56279f766eea7a3886d440aea7252b63", + "title": "Located scans: matched prefix, remainder and character positions", + "demo": "lexer" + }, + { + "name": "tricu-lib-arboricx", + "version": "0.9.0", + "manifest": "3f70d95cf1bae0928ee89acd2a9e0cdd8287796efae32a9f08d33e3dd0149c55", + "hash": "20ddb39e1a87ad0708a374aebe7b6884e5729124bc7cc30d2e9f96f0c0d713ee", + "title": "lib/arboricx/arboricx.tri" + }, + { + "name": "tricu-lib-arboricx-common", + "version": "0.9.0", + "manifest": "0d779adef29b51ee875bf2f46ec03bef30ec48d200e7e05c9e20bd90b28ac4a4", + "hash": "6238f17acf707772ac12645f14297fd8b335af45b9189b9dc4c320a18893e50f", + "title": "lib/arboricx/common.tri" + }, + { + "name": "tricu-lib-arboricx-dispatch", + "version": "0.9.0", + "manifest": "eda078ba018de68718b2b7aa2d790578ac079cf98c963a78f7fcae5178fd2c19", + "hash": "ccf21f4b49546f330cf335cf768cfc2d146549831dd84e79d80bbbe4da03b914", + "title": "lib/arboricx/dispatch.tri" + }, + { + "name": "tricu-lib-arboricx-handlers", + "version": "0.9.0", + "manifest": "2c1c876d1baf0c2ddf0bd212ecd9acd3eb916d8f492d271177c6db0be84ff29d", + "hash": "f5d1f34f05dedf85861410c087c42786a5079a1c449b9dc2069e39f088005a19", + "title": "lib/arboricx/handlers.tri" + }, + { + "name": "tricu-lib-arboricx-manifest", + "version": "0.9.0", + "manifest": "2a8a2b591dfc4192b8ded6e2ea75e94f6ff41183636f6024b6d5eb590ec8d2aa", + "hash": "4382e93cddca0d828b6a39ce171ae0253a54fb9932be4bc54d747cf698fa58fe", + "title": "lib/arboricx/manifest.tri" + }, + { + "name": "tricu-lib-arboricx-nodes", + "version": "0.9.0", + "manifest": "d158e4ebe9fd6cfb752023bbe031614b190b9eab79e9680875a1fc55dc481a23", + "hash": "cc68d1a06bc193f54069be7553bcaa3ccd37d129c9a38fff9b8220b2d864daee", + "title": "lib/arboricx/nodes.tri" + }, + { + "name": "tricu-lib-arboricx-server", + "version": "0.9.0", + "manifest": "a6876256adddf94e4631b6e14540df4db22b6ece63444ad963dc92174acee48d", + "hash": "7f18bb0a5c425b055912aecdd442776f3102f023c70e721395b3296ff0d42689", + "title": "lib/arboricx/server.tri" + }, + { + "name": "tricu-lib-arboricx-streaming", + "version": "0.9.0", + "manifest": "409b5431c67c3e8e5e3ae64b85c2d66259576e73ebc02708af37de12139946f6", + "hash": "1e9978b755fcbb1f50b9f1050854fb38d13a087a4260e871d7e0e65c24fcbeca", + "title": "lib/arboricx/streaming.tri" + }, + { + "name": "tricu-lib-base", + "version": "0.9.0", + "manifest": "bd2c14d6db6b69308a5252a8e839705a55d30e815f012900b094315263e08d81", + "hash": "8676994c48d79512a1ff5f8f4ccdaf538248b411e6829dfc061b76b8a6b89d23", + "title": "lib/base.tri" + }, + { + "name": "tricu-lib-binary", + "version": "0.9.0", + "manifest": "7a24af56a9ce9b947cadcafd3a9da127b1507275bfac62b9fa55e27490b176dc", + "hash": "1a52036b938708db5759dfa94c2058e27df5b638c625ef253b5e09e316c2a21d", + "title": "lib/binary.tri" + }, + { + "name": "tricu-lib-bytes", + "version": "0.9.0", + "manifest": "16cff955cb9ab44063ed21651002d209ef7d3592fa005cd3dc32e287d6ca5b68", + "hash": "8ee2c0b4fec670afc9db5552e6907ace29ae2c0bda07897e70d451f9bb56160c", + "title": "lib/bytes.tri" + }, + { + "name": "tricu-lib-conversions", + "version": "0.9.0", + "manifest": "78ce6db3557cd57f2c5799989d16a8f40104de5c4485646734a23093dc458a4e", + "hash": "4641a286fd7129b4ee90b47c54623104aaacf7e1fdc30d56ce12b17acf7a106b", + "title": "lib/conversions.tri" + }, + { + "name": "tricu-lib-graph", + "version": "0.9.0", + "manifest": "7b798a3afae6dce07b718bed855c7209ec3b898bb70b379dece935c4033cf9b6", + "hash": "5d3381723aafa9c5e4c4c3a6975de9481eb3160cbe52aca24076900528ef2603", + "title": "lib/graph.tri" + }, + { + "name": "tricu-lib-handler-artifacts", + "version": "0.9.0", + "manifest": "7465681c852959e227ecea6fa93d8648479af52d92e0898ff7937495d506ff55", + "hash": "99824824d27932bc9e44851fff367ae0fea6d05a7604bb634bf0daad8ef5ab7e", + "title": "lib/handlers/artifacts.tri" + }, + { + "name": "tricu-lib-handler-log", + "version": "0.9.0", + "manifest": "8e266f85d668a1f414dada9e4cca4d19a737bb1e19bf2a1ef985017175708c31", + "hash": "7dac7b3d84202ef4d253ce99c95850c1ae7a532a9e7907712f559da2d061c2d0", + "title": "lib/handlers/log.tri" + }, + { + "name": "tricu-lib-handlers", + "version": "0.9.0", + "manifest": "11d3aa8404e25e3bafad7835fdc008c2b6838cd5d01110edf4297e6fd47c1008", + "hash": "e27bf77a09cdc2d867aaccf65d0578da3308c877e51dea1bb87286ddc7196228", + "title": "lib/handlers.tri" + }, + { + "name": "tricu-lib-http", + "version": "0.9.0", + "manifest": "b33334423eddc3c01098d0c0ad303da37044892cb0b6e6bad22af677ccf3aff6", + "hash": "aa8da80b7ea0e728ed276627737b8cc5350dda77d2360af6eac93b75667acaab", + "title": "lib/http.tri" + }, + { + "name": "tricu-lib-intensional", + "version": "0.9.0", + "manifest": "7467e74f0c5b7dfad8d6a14d34171b2b0bcd7750423894e2ca920e0535fde7d1", + "hash": "ecab246978f122d1c13bc00028ca2cbc9332a8fc247a0b9726d74c712e5c1315", + "title": "lib/intensionalContracts.tri" + }, + { + "name": "tricu-lib-io-artifacts", + "version": "0.9.0", + "manifest": "6acd32c1279a1889feb3bda2f8713f973beb3493107895dbba5fe3b1ad1fe1f3", + "hash": "ae3c5524aa4a094972d2b84aff10e3a9e8d60c3b3fb94b43ff7bd850740eade9", + "title": "lib/io/artifacts.tri" + }, + { + "name": "tricu-lib-io-http", + "version": "0.9.0", + "manifest": "078dbc9ff97ac74a96475abfa117a0aaf0dd6526e0a794a5fff83b498afadf72", + "hash": "32b486a33a072d0e116cca6ea8bd7619a699086364ab4c36a62b0a4f24406bfe", + "title": "lib/io/http-transport.tri" + }, + { + "name": "tricu-lib-io-storage", + "version": "0.9.0", + "manifest": "3d91cca2954567f6741488ea2abc1166803a52db9d5dce82952fe9d69edde15a", + "hash": "b5ee969404912ef682d37b259985a3303b1b19840ac9a15a2f65c92799b4d2cf", + "title": "lib/io/storage.tri" + }, + { + "name": "tricu-lib-io-text", + "version": "0.9.0", + "manifest": "1f960c57efadb21eb66bba8a057181c6ca744b7d110064a37522daabf230d691", + "hash": "9621dfdca33605922b59be467053569d99995ed36b77f52f2a36e07d9059bf95", + "title": "lib/io/text.tri" + }, + { + "name": "tricu-lib-io", + "version": "0.9.0", + "manifest": "867297ac5383885892a84acc2630c94491fc6ea436aaaccd5bc49d866c631400", + "hash": "dea811622fcfc1c9f9b5e7a138fec0e00ead024bcf3f7f04339b5a1dbcfdfe19", + "title": "lib/io.tri" + }, + { + "name": "tricu-lib-lexer", + "version": "0.9.0", + "manifest": "816df1a32853750a1254112aff8ae8c55ca86bf70e809d226969ab1d43a6688b", + "hash": "5ec6ccb4827f0548444e480c0e6196ddaa7a570a44ebc6a91a922d7e59bf3012", + "title": "lib/lexer.tri" + }, + { + "name": "tricu-lib-native-math", + "version": "0.9.0", + "manifest": "7f87549d587fa8c3be88af0ea988db3adcc3b35f1ffb48973553491b075614db", + "hash": "0932c810f71d18c022939b4faaa52722cc3b83330831ef5bec7659d03fd26ae1", + "title": "lib/math/native.tri" + }, + { + "name": "tricu-lib-parser", + "version": "0.9.0", + "manifest": "14282088469cc420dd014700da06998f6bb8dcf990fc885a464c0a1e1858e20d", + "hash": "18b24788592f74b9c564c30214dff0231cb86338661d944ab697e7ae4ca1103e", + "title": "lib/parser.tri" + }, + { + "name": "tricu-lib-patterns", + "version": "0.9.0", + "manifest": "703db8cd6c5679861257d1cc38c17be200241ade8db3812e8c387e9274aaa56e", + "hash": "3f65dce1eb074d496c42c961b0f9149ace2527ce8b3b968622b871ea5c5dc7ed", + "title": "lib/patterns.tri" + }, + { + "name": "tricu-lib-prelude", + "version": "0.9.0", + "manifest": "6aa33a710955e5746f322775b9078f57ba4145f6b723ff4b76a292285e919823", + "hash": "5e658c44623c78819845f704007d78b5e132bf64fa986a9d3770d0aa7db9d824", + "title": "lib/prelude.tri" + }, + { + "name": "tricu-lib-socket", + "version": "0.9.0", + "manifest": "fbf35bdc703a44baf1f842cc7aff5ced17bec1b634b9e2a185982391feb5086f", + "hash": "ab4b3e164f3cebbf979ad75424b195cbadf3a8a7023a891b46270ef883363d30", + "title": "lib/socket.tri" + }, + { + "name": "tricu-lib-source-ast", + "version": "0.9.0", + "manifest": "c6579f89e47a16694f1c08fe9825b183d8bc272e23cd744eb954c106b689c32f", + "hash": "af66062931c5de826bd336625d53c1c354fe6cc736e56e247ae550c542f0fa8a", + "title": "lib/source/ast.tri" + }, + { + "name": "tricu-lib-source-build-stable", + "version": "0.9.0", + "manifest": "b5d3967e4c46a94bd7db0f917a34543540bf87641f6f504f5be419a64df0622c", + "hash": "512e34c1dbdcf519074402f7a7ca559baec58ae199a6a71aa2e2e3d9c8148687", + "title": "lib/source/build-stable.tri" + }, + { + "name": "tricu-lib-source-build", + "version": "0.9.0", + "manifest": "47e846c7400db17134da233cb2ea5e34a0dabb370bc75aa31f3463b6a132f24d", + "hash": "5d55adb6a8868cc4861b0b993cd58c31375f6d0696e199f2aef06e464389b2ad", + "title": "lib/source/build.tri" + }, + { + "name": "tricu-lib-source-bundle", + "version": "0.9.0", + "manifest": "429e9d90706ea8f1301c398dc5b7dcdf7897f8d51cc4b6e9c580b142c598c4b1", + "hash": "c834c36fa1b984ad4d6b34fbdd784b3c1b732b1433f549b00e8df1931cf9a3b5", + "title": "lib/source/bundle.tri" + }, + { + "name": "tricu-lib-source-compile", + "version": "0.9.0", + "manifest": "fb41d71410ad8fb9c0da35a5ab0a6b782b9814bd7629737b710b7404648939cd", + "hash": "fffeb2fd3c25c6eb7fc21660eee8be391ef2a3adae58e28359d9f6920e82df1f", + "title": "lib/source/compile.tri" + }, + { + "name": "tricu-lib-source-core", + "version": "0.9.0", + "manifest": "83e1dc8052f806b19ebc737998bbdfff23211b23a6bbe2ae6adbede8ad1652a2", + "hash": "d7105ef477224dfb10ad2773e54744cb3f87ddf304eb753d7cb9ba40ea9cc3df", + "title": "lib/source/core.tri" + }, + { + "name": "tricu-lib-source-equations", + "version": "0.9.0", + "manifest": "568c5d782a847e4f8d6b7061d51d34fc527a466b872ede27032104293df3bf8f", + "hash": "982ae0c7b3fcad6764df5187b00ea3c4bc8563c6244f8bd8f12c8706bd3ab9f5", + "title": "lib/source/equations.tri" + }, + { + "name": "tricu-lib-source-export-cache", + "version": "0.9.0", + "manifest": "d937bb405fb9b40b88046e37623aee1b080a0b93a5c568aff132baeef9f44f54", + "hash": "cb21c5c6255ade072b773c014b05dd66b84bc1bfa56be4d09df33552d97d9799", + "title": "lib/source/export-cache.tri" + }, + { + "name": "tricu-lib-source-index", + "version": "0.9.0", + "manifest": "c2946fe3ac0daf1a06d6f7deab9f7ad08d679c241b04ad9c0c6d3b6038cf091d", + "hash": "1f18232479e776982515edc3fe2c0f39fad79e2b428c2ff040d92edf5441ac6a", + "title": "lib/source/index.tri" + }, + { + "name": "tricu-lib-compiler-io", + "version": "0.9.0", + "manifest": "e4757cead2d1072f68e6f2d01f8fde489b0d3fabef7733edd5e1c4b060857acc", + "hash": "5278cc3f3eddc4f1760997bff84e707ec6b9571fdaa7c3b895de7a2b22b92f35", + "title": "lib/source/io.tri" + }, + { + "name": "tricu-lib-source-lexer", + "version": "0.9.0", + "manifest": "4cc4ed214d6e474b339c970d04cc09ced20c6472758b58897aabbd6f3a5bbb42", + "hash": "b75e428ce6d587893829792a87c3a374993d22c900eea793f2713e822440cb9f", + "title": "lib/source/lexer.tri" + }, + { + "name": "tricu-lib-source-lock", + "version": "0.9.0", + "manifest": "97d9a9f670d55eec307a98766da971c1e796cff9d8325e63aa761bbc646a2f48", + "hash": "666164df3ec739d1c3d3637ec72ed9a85e9012a7c9c5f38c3bc96ebb22e3334d", + "title": "lib/source/lock.tri" + }, + { + "name": "tricu-lib-source-map", + "version": "0.9.0", + "manifest": "0dd304903f93f2fc2a38d42b44eb41f2cb44b7ed0216774921edbdc4d3565e16", + "hash": "f9d6e016542fb43b725b7ec9863a914d16bed229e7d58542879b9df07ce248c4", + "title": "lib/source/map.tri" + }, + { + "name": "tricu-lib-source-module", + "version": "0.9.0", + "manifest": "d1d0667b5c3b717f91a4e89f06bea2686d5d54c4575e5432600b69a584b5f48a", + "hash": "beda492ecd9338eb0c75af08506edad760b914ab0c73ef055e1e1d7946821d6d", + "title": "lib/source/module.tri" + }, + { + "name": "tricu-lib-source-object", + "version": "0.9.0", + "manifest": "cf1cfb646630b6fa904524d2af75769c0133387e8b43ef8acf8fce8e73e19c5f", + "hash": "b55d959236f74eccd882eaa91d0cec0776b13a0bb5a2bd846a65cd7ac0f59b2a", + "title": "lib/source/object.tri" + }, + { + "name": "tricu-lib-source-order", + "version": "0.9.0", + "manifest": "1d55b1616e892be989d2c987099c84bef61686fc67f6a3eb5b1a373626b0ca5e", + "hash": "53e15c0de7a8ed6cb1454e285a08d65b0a3cd1ffad877a6f598c94afa61d21d4", + "title": "lib/source/order.tri" + }, + { + "name": "tricu-lib-source-parser", + "version": "0.9.0", + "manifest": "425b921ef62e99dd93f6d3389c82fdbb583eaeb857975717441c5469f98f3a73", + "hash": "9f63810fee2e20762f1a198535448a2187a90065a35428ec82a11aad85575643", + "title": "lib/source/parser.tri" + }, + { + "name": "tricu-lib-source-pattern", + "version": "0.9.0", + "manifest": "d14232cb623da7a59883ae5e0c773fa71037a887a7dcf3352e48cc8dff421123", + "hash": "1930e13f58f774f90a838b49128b1bcfd5a0f90a67ec779571858e001489b70c", + "title": "lib/source/pattern.tri" + }, + { + "name": "tricu-lib-source-program", + "version": "0.9.0", + "manifest": "447aa7d321344146772a2693e83b2ab87a0058e281c42780e1bb5b24e0ea995d", + "hash": "24b52c4f58744204c49b807b2af730a4800068742507f4138ba2e1a78bad0678", + "title": "lib/source/program.tri" + }, + { + "name": "tricu-lib-source-resolve", + "version": "0.9.0", + "manifest": "ed934dd01014852aa2e3734444538d0c0807da41bc661cd3965eca6ed16ceffe", + "hash": "29588b9deced8a3726d1d01c65c8d8e27bf29f4c91d4ff782c1e702492425fa6", + "title": "lib/source/resolve.tri" + }, + { + "name": "tricu-lib-source-stable", + "version": "0.9.0", + "manifest": "5189315a72af93ee9fe3dbc8c73e07e97b980b4c91b9c2f6244d447461db55dd", + "hash": "f326c8cd2ea455c9b59c4b4f335e11eda1d895d0f2f847477b9511e9ae58a9f8", + "title": "lib/source/stable.tri" + }, + { + "name": "tricu-lib-source-staged-conditional-experiment", + "version": "0.9.0", + "manifest": "43113de593d0e70f3f94e8dafff0600d6f60b5a011d80cdc6e84166fed29b682", + "hash": "ac310bbeb7fbd02c670282a3e968b407252f99459bdac11039fbf20b85b73b17", + "title": "lib/source/staged-conditional-experiment.tri" + }, + { + "name": "tricu-lib-source-staged-list-experiment", + "version": "0.9.0", + "manifest": "c1c062475b966bd6adae0148db1751959400f59ba73c6f84ca0e561599639e98", + "hash": "77bde8dca27110eac44e6f5e44a1bf604b9ad4ad6909aa362d244e6f779539dc", + "title": "lib/source/staged-list-experiment.tri" + }, + { + "name": "tricu-lib-source-staging-experiment", + "version": "0.9.0", + "manifest": "db8e78afce2dadd987a2e7840b1107da75d3cc9c4ac3e5cd217cf0bc2ff00790", + "hash": "5a04fad3e19493bc235c3215001c98c8255d31dbb88556fda5d995aa21f7f43e", + "title": "lib/source/staging-experiment.tri" + }, + { + "name": "tricu-lib-source-unit", + "version": "0.9.0", + "manifest": "1e395371289a7c43d4237a30b3a6c186a38039f0b7c9a87f27e64f43f4da90a9", + "hash": "aed41fa6979157996f487232be608a7e89322ad40d2d2681af55a08a8d52d68f", + "title": "lib/source/unit.tri" + }, + { + "name": "tricu-lib-arboricx-inspect", + "version": "0.9.0", + "manifest": "fe9b420e1e776fa1dda7b77857e322c0509ed308bb18441b76a3b03023f93468", + "hash": "f571888c5aa3f7a91e9d5d6c45c674851ea8e3598514ad8d535fd3e9056d0314", + "title": "lib/arboricx/inspect.tri" + }, + { + "name": "tricu-lib-handler-testing", + "version": "0.9.0", + "manifest": "4a7b39b868bc30f46460b5cee2bb225a9db665775353aa5c71aafa567de7881e", + "hash": "e56378259592a4867829ca5447904b30ac5e21bd496eb68ad4d872c1af973d69", + "title": "lib/handlers/testing.tri" + }, + { + "name": "tricu-lib-handler-upload", + "version": "0.9.0", + "manifest": "6acd32c1279a1889feb3bda2f8713f973beb3493107895dbba5fe3b1ad1fe1f3", + "hash": "bbfdfb86841f2984340122be73b21a39b808e6ef02232e40e8c7016f0ff68851", + "title": "lib/handlers/upload.tri" + }, + { + "name": "tricu-lib-io-objects", + "version": "0.9.0", + "manifest": "1ed153be17b754f1a058e419d84a39e2169d5d6518bb47e8ee8785b02860e424", + "hash": "bb3135842e3cebfe6bd10e0766a6711e4d46a8cf157af1dcc9f97e25795ac0a1", + "title": "lib/io/objects.tri" + }, + { + "name": "tricu-lib-packages-base", + "version": "0.9.0", + "manifest": "fa9d4df0f82cac2754fdd3e92009cb48064856ff4cc5b18f092309aef7ff5ed4", + "hash": "f9f0ab0e44f6ae39479d74c6c66a2bdaba3f40bd26781c3ec95300c2ee3c07f3", + "title": "lib/packages/base.tri" + }, + { + "name": "tricu-lib-packages-io", + "version": "0.9.0", + "manifest": "6f8add87fe39dd16c98025492360d957a4d97459631c08d0d0c10abfbec28de4", + "hash": "ae9c12c9bf2013b0c8711860a9b9dae310085dafc9c29388f6d6d3308b5f7b2b", + "title": "lib/packages/io.tri" + }, + { + "name": "tricu-lib-recursion-list", + "version": "0.9.0", + "manifest": "4c79b7ad124027147b8fddd98c2b66cfd776c36d915c95dfb1fbf9b31a51fb88", + "hash": "60afc41f04fa65130326eeed4ca9e128bee5e90c7041f9641bbf9cfe87c142cd", + "title": "lib/recursion/list.tri" + }, + { + "name": "tricu-lib-source-bundle-stable", + "version": "0.9.0", + "manifest": "a06948780686a4432f97ce0a7ab5f8ed66a535a6d5563275e5f32375a679cb59", + "hash": "3de401378f33dd8f93e9ca11c1c2bd73a458dabcd8d631a33ba17306f83d7d3b", + "title": "lib/source/bundle-stable.tri" + }, + { + "name": "tricu-lib-tools-format-tri", + "version": "0.9.0", + "manifest": "05e75a9f4d3c40db786f64820b78774566b8d51d77d11e6e1e244dad9360568e", + "hash": "48ae69290f1858d9534fe1f60f7540ecaca466b6ec1f48a208c7b73981277fef", + "title": "lib/tools/format-tri.tri" + }, + { + "name": "names-values", + "version": "0.9.0", + "hash": "8d1b7e1f6dfefe983167ee8d9631476caaa0c3dc689a85628e9ca627ebaef6d0", + "manifest": "e30e884e7925c755b111c5a753d78fcb5bafeb9f431f7261f4d7e1e905faba7d", + "title": "Names and values", + "demo": "names-values" + }, + { + "name": "arithmetic", + "version": "0.9.0", + "hash": "38110ab45a75a9c8771d6422277cb3083e667a4368aa33df0b43af672f17375e", + "manifest": "a07edd4c204a3ac8ddc20764de23857bcf9906c4c69d0f5706ad2fe0518f3646", + "title": "Doing arithmetic", + "demo": "arithmetic" + }, + { + "name": "functions", + "version": "0.9.0", + "hash": "be5f4675c9b0b6d9c093fe44a9695da9f428c88d62b0f4f1340017067fa81fa9", + "manifest": "819a33501800bcf6ade9ab179b550485c118361b4bf6143da830a62e6a062964", + "title": "Your first function", + "demo": "functions" + }, + { + "name": "lists", + "version": "0.9.0", + "hash": "3cc5d36c5b70a20362117e3349aa044efca8adca56105424965065395a9f3e76", + "manifest": "449e93952f46fe794539e588aaf7f6355ac50c791563505a24e3d8824845af52", + "title": "Working with lists", + "demo": "lists" + }, + { + "name": "transform-list", + "version": "0.9.0", + "hash": "9f10d772b42628acfe843eec7524d8de1ba9ea4344d3952c6c091c98c4d1c72d", + "manifest": "e82efc3f0168a2967dfcab62acbff785012402fc6e316adb73e1978f05b1d4be", + "title": "Transforming a list", + "demo": "transform-list" + }, + { + "name": "choices", + "version": "0.9.0", + "hash": "1972c98bfe599fef2a72cc946401a5cc9280026a8c46fdd7c8ccdc7093ee90cc", + "manifest": "381360c28e8204def839f99608e785962aca8625f77dfeabe083b3db65ec3cab", + "title": "Making a choice", + "demo": "choices" + }, + { + "name": "language-reference", + "version": "0.9.0", + "hash": "86717d7f9d69fe730c6c6172c42c49895623aa070bf675e1b5f751adb30616c1", + "manifest": "9984385a5ab9b81094343d2b4203e825d44c07de67f0e399ad55660e5e431998", + "title": "Language reference", + "demo": "language-reference" + }, + { + "name": "greet", + "version": "0.9.0", + "hash": "b6f32449d85257fbd0a589d29ef05ea4a503c4a7e6105926d408b0551a34fd77", + "manifest": "e29abf0fedb2886d37e1ac26644ad833b6e66c950c1fbc8482189445b435b855", + "title": "A conversation", + "demo": "greet" + }, + { + "name": "microscope", + "version": "0.9.0", + "hash": "493a125b649639c0df8348b4aeb3a455b7139cae0634ba114866c48813500bc5", + "manifest": "095aa94589307f9c8fb2b7e6c8dd4e63cc31ab2cac33e780882867df4cfe1a23", + "title": "Tree microscope", + "demo": "microscope" + }, + { + "name": "rgb", + "version": "0.9.0", + "hash": "b8c0e21c09f63511794cc62827a6b231e62a55f7e779022a1b740aaba29b0368", + "manifest": "e37bd20d45ecd6b3721aa1af12deb7284fe6c9c079741c36e11ab07726316309", + "title": "RGB validator", + "demo": "rgb" + }, + { + "name": "shipping", + "version": "0.9.0", + "hash": "4aa9ce9f19dfce87ecb3f6bd0a2e881dafcbcd3d2e4b4075befbb378d80833ea", + "manifest": "dcdd3568bca3bef06919c3de6449d78a400b6156a27cf90dd2a5bdbc8ec64d8f", + "title": "Shipping policies", + "demo": "shipping" + }, + { + "name": "events", + "version": "0.9.0", + "hash": "8b51693c63658d59c8083ec1c95cf1f6565ce5799791f540e92caf508613c9fb", + "manifest": "a0c4ab3bc22f01eb18f60391d08f64cadb767253eec1ba54016d2f6441286c44", + "title": "Event adapters", + "demo": "events" + }, + { + "name": "registration", + "version": "0.9.0", + "hash": "679733e17a86cc5e3f5282ca824cad4c9c0febd260e51f6a87e16dd14c02c45a", + "manifest": "e5271ade40a68b9fad92f531859c4411b3ef5773533b36f60a6a1a02dc680a36", + "title": "Registration validator", + "demo": "registration" + }, + { + "name": "migration", + "version": "0.9.0", + "hash": "730aeb8203ff504b7483999a6477a292b10871f82e94a77d3d5f7b49ecc3b6b3", + "manifest": "0713754ddf34e447f3581fc105226da560f0c6533f1e08b666057e061866b600", + "title": "Profile migrations", + "demo": "migration" } ] } diff --git a/ext/demo-site/reference.py b/ext/demo-site/reference.py @@ -8,6 +8,28 @@ import re import sys +# These paths belong to immutable releases predating canonical IO naming. +# Current implementation context is published only when its source exists. +HISTORICAL_SOURCE_PATHS = { + 'lib/io-v2.tri', 'lib/io-v2/artifacts.tri', 'lib/io-v2/http-transport.tri', + 'lib/io-v2/objects.tri', 'lib/io-v2/storage.tri', 'lib/io-v2/text.tri', + 'lib/source/io-v2.tri', 'lib/arboricx/streaming-v2.tri', 'lib/packages/io-v2.tri', +} + + +def source_reference(root, title): + source = (root / title).resolve() + if not source.is_relative_to(root / 'lib'): + raise ValueError('library source escapes the source root') + if not source.is_file(): + if title not in HISTORICAL_SOURCE_PATHS: + raise ValueError('missing current library source: ' + title) + return None, f'Historical source path: `{title}`. Its source is retained in Git history. ' + relative = source.relative_to(root).as_posix() + return source, (f'[Repository source](../source/{relative}.txt) from this site build. ' + f'Source SHA-256: `{hashlib.sha256(source.read_bytes()).hexdigest()}`. ') + + def generate(root, output): site = root / 'ext/demo-site' sys.path.insert(0, str(root / 'test')) @@ -36,12 +58,11 @@ def generate(root, output): filename = release['name'] + '-' + release['version'] + '.md' rows.append(dict(release, title=short, description=description, alias=alias, names=names, reference='libraries/' + filename, **({'usage': note['usage']} if 'usage' in note else {}))) - source = (root / release['title']).resolve() - assert source.is_relative_to(root / 'lib') and source.is_file() - relative = source.relative_to(root).as_posix() - # Source is a labelled checkout reference; export membership comes from - # the immutable published bundle, including inherited/reexported names. - write('source/' + relative + '.txt', source.read_text()) + source, source_note = source_reference(root, release['title']) + # Export membership comes from the immutable published bundle; current + # checkout source is separately labelled implementation context. + if source is not None: + write('source/' + source.relative_to(root).as_posix() + '.txt', source.read_text()) write('libraries/' + filename, f'# {short} · {release["version"]}\n\n{description}\n\n' f'```tricu\n!import {release["manifest"]} as {alias}\n```\n\n' @@ -51,8 +72,7 @@ def generate(root, output): '## Calling conventions\n\n' + note.get('usage', 'Consult the source and protocol guides for argument order, encoding and effects.') + '\n\n' '[Complete examples](../examples.md) · [Language features](../language-features.md) · [Contracts](../contracts.md) · [Host ABI](../host-abi.md) · [Parser protocol](../parser.md)\n\n' f'## Complete published interface ({len(names)} exports)\n\n```text\n' + '\n'.join(names) + '\n```\n\n' - f'## Source reference\n\n[Repository source](../source/{relative}.txt) from this site build. ' - f'Source SHA-256: `{hashlib.sha256(source.read_bytes()).hexdigest()}`. ' + '## Source reference\n\n' + source_note + 'The export list above describes the selected published bundle; repository source is provided for implementation context. ' 'Workspace import names in source resolve through the [library directory](../libraries.md) when adapting code for the playground.\n') write('libraries.md', '# Published tricu libraries\n\nChoose a release to get its complete exports, manifest import and calling conventions. ' diff --git a/ext/demo-site/test/compiler-conformance.json b/ext/demo-site/test/compiler-conformance.json @@ -1,6 +1,6 @@ { - "compilerBundleSha256": "ee26329e1d6936fe64d37b4887ff5d153d65eb1e2b0d5f14b7dcf8249434a622", - "hostSha256": "6c1c71c66ad07dc6064408cffa5c8e034bb305232396baa033615abc94747f7e", + "compilerBundleSha256": "faff942bf4539f70d3fd5b085d6435199307d71e07da18f4b144c0b0597eb897", + "hostSha256": "0379ea68db3664a6672e7ae56338953935de3d15318d49a07fa634bded59af80", "backend": "stable", "export": "source_unit.compileStableModuleDefinitions", "cases": [ diff --git a/ext/demo-site/test/conformance.json b/ext/demo-site/test/conformance.json @@ -1,5 +1,5 @@ { - "hostSha256": "6c1c71c66ad07dc6064408cffa5c8e034bb305232396baa033615abc94747f7e", + "hostSha256": "0379ea68db3664a6672e7ae56338953935de3d15318d49a07fa634bded59af80", "description": "All normal trees <=5 nodes, every ordered application pair; lazy regression and partial/multiple applications.", "cases": [ { diff --git a/ext/demo-site/test/contracts-conformance.json b/ext/demo-site/test/contracts-conformance.json @@ -1,6 +1,6 @@ { - "compilerBundleSha256": "ee26329e1d6936fe64d37b4887ff5d153d65eb1e2b0d5f14b7dcf8249434a622", - "hostSha256": "6c1c71c66ad07dc6064408cffa5c8e034bb305232396baa033615abc94747f7e", + "compilerBundleSha256": "faff942bf4539f70d3fd5b085d6435199307d71e07da18f4b144c0b0597eb897", + "hostSha256": "0379ea68db3664a6672e7ae56338953935de3d15318d49a07fa634bded59af80", "contractsSourceSha256": "8f69b32c50461edd5db536becb6faedd5ba33945bf774534592034350702600a", "bindings": { "matchResult": "base.matchResult", diff --git a/ext/demo-site/test/modules.test.mjs b/ext/demo-site/test/modules.test.mjs @@ -25,7 +25,14 @@ test('every library source has a complete-interface package; no module allowlist // Historical package names remain indexed when an authored workspace alias // changes. Check every source and its current alias, not an allowlist or the // first historical release carrying the same source-path title. - assert.deepEqual([...new Set(libraries.map(r => r.title))].sort(), paths.sort()); + // Immutable releases can outlive their source filenames. Only the explicit + // historical IO paths are absent; every current source still needs its exact + // authored alias and independently checked full interface below. + const historicalPaths = new Set(['lib/io-v2.tri','lib/io-v2/artifacts.tri', + 'lib/io-v2/http-transport.tri','lib/io-v2/objects.tri','lib/io-v2/storage.tri', + 'lib/io-v2/text.tri','lib/source/io-v2.tri','lib/arboricx/streaming-v2.tri', + 'lib/packages/io-v2.tri']); + assert.deepEqual([...new Set(libraries.filter(r => !historicalPaths.has(r.title)).map(r => r.title))].sort(), paths.sort()); const workspace=(await readFile(new URL('tricu.workspace',root),'utf8')).trimEnd().split('\n'); assert.equal(workspace.shift(),'tricu.workspace.v1'); const aliases=new Map(workspace.map(row=>{const [alias,path]=row.split('\t');return [path,alias];})); diff --git a/flake.nix b/flake.nix @@ -121,24 +121,24 @@ ''; arboricxServerBundle = mkRegistryBundle "arboricx-server" "${./.}/tricu-apps/arboricxServer.tri"; - arboricxServerRunner = mkRegistryV2Runner "arboricx-server" arboricxServerBundle; - arboricxStreamingBundle = mkRegistryBundle "arboricx-streaming-v2" "${./.}/tricu-apps/arboricxStreaming.tri"; - mkRegistryV2Runner = name: bundle: pkgs.writeShellScriptBin name '' + arboricxServerRunner = mkRegistryRunner "arboricx-server" arboricxServerBundle; + arboricxStreamingBundle = mkRegistryBundle "arboricx-streaming" "${./.}/tricu-apps/arboricxStreaming.tri"; + mkRegistryRunner = name: bundle: pkgs.writeShellScriptBin name '' exec ${tricuPackage}/bin/tricu arboricx run \ --module "$(${pkgs.coreutils}/bin/cat ${bundle}/manifest)" --name main \ --store ${bundle}/runtime --io --no-result \ +RTS -N1 -M2048m -RTS ''; - arboricxStreamingRunner = mkRegistryV2Runner "arboricx-streaming-v2" arboricxStreamingBundle; - arboricxStreamingFaultBundle = mkRegistryBundle "arboricx-streaming-v2-fault" "${./.}/test/io/registry-log-failure.tri"; - arboricxStreamingFaultRunner = mkRegistryV2Runner "arboricx-streaming-v2-fault" arboricxStreamingFaultBundle; - mkRegistryV2Test = name: runner: pkgs.runCommand "${name}-test" { + arboricxStreamingRunner = mkRegistryRunner "arboricx-streaming" arboricxStreamingBundle; + arboricxStreamingFaultBundle = mkRegistryBundle "arboricx-streaming-fault" "${./.}/test/io/registry-log-failure.tri"; + arboricxStreamingFaultRunner = mkRegistryRunner "arboricx-streaming-fault" arboricxStreamingFaultBundle; + mkRegistryTest = name: runner: pkgs.runCommand "${name}-test" { nativeBuildInputs = [ pkgs.python3 ]; } '' mkdir -p $out python3 ${./test/arboricx_deployment.py} ${runner}/bin/${name} \ --io-version 2 --handler-policy \ - --fault-runner ${arboricxStreamingFaultRunner}/bin/arboricx-streaming-v2-fault \ + --fault-runner ${arboricxStreamingFaultRunner}/bin/arboricx-streaming-fault \ --report $out/report.json python3 ${./test/streaming_protocol.py} ${runner}/bin/${name} \ --io-version 2 > $out/protocol.txt @@ -582,7 +582,7 @@ checks.currentIONames = pkgs.runCommand "tricu-current-io-names" { nativeBuildInputs = [ pkgs.python3 ]; } '' - python3 ${tricuSource}/test/current_io_names.py + python3 ${./.}/test/current_io_names.py mkdir -p $out ''; @@ -696,9 +696,9 @@ }; # Opt-in acceptance runs the actual default entrypoint and common v2 gates. - packages.arboricxServerTest = mkRegistryV2Test "arboricx-server" arboricxServerRunner; + packages.arboricxServerTest = mkRegistryTest "arboricx-server" arboricxServerRunner; packages.arboricxStreamingRunner = arboricxStreamingRunner; - packages.arboricxStreamingTest = mkRegistryV2Test "arboricx-streaming-v2" arboricxStreamingRunner; + packages.arboricxStreamingTest = mkRegistryTest "arboricx-streaming" arboricxStreamingRunner; packages.arboricxServerBundle = arboricxServerBundle; packages.arboricxServerRunner = arboricxServerRunner; packages.arboricxServer = pkgs.dockerTools.buildImage { diff --git a/src/InteractionInspection.hs b/src/InteractionInspection.hs @@ -187,7 +187,7 @@ decode nodes limits view idx = case view of of Left err -> boundedFailure err Right (1, action) -> Decoded "tricuIO v1" "decoded" [("action",Action,action)] - Right (2, action) -> Decoded "tricuIO" "decoded" [("action",ActionV2,action)] + Right (2, action) -> Decoded "tricuIO v2" "decoded" [("action",ActionV2,action)] Right (n, _) -> Decoded ("unsupported tricuIO version " <> tshow n) "unknown" [] Action -> case pair nodes idx of Left _ -> failure "expected action pair (tag, payload)" diff --git a/test/InteractionInspectionTests.hs b/test/InteractionInspectionTests.hs @@ -111,7 +111,7 @@ interactionInspectionTests = testGroup "Interaction inspection" let req = action 10 (Fork (ofString "file") (Fork (ofNumber 1) (Fork (ofString "open-writer") (action 26 (ofString "DO-NOT-DELETE"))))) envelope = Fork (ofString "tricuIO") . Fork (ofNumber 2) os = occurrences (inspect defaultLimits [("main",envelope (action 1 (Fork req req)))]) - map occurrenceSummary (take 3 os) @?= ["tricuIO","Bind","Facility file@1/open-writer"] + map occurrenceSummary (take 3 os) @?= ["tricuIO v2","Bind","Facility file@1/open-writer"] map occurrenceStatus (drop 3 os) @?= ["opaque","opaque"] assertBool "no payload preview" (not (any (Text.isInfixOf "DO-NOT-DELETE" . occurrenceSummary) os)) , testCase "v2 does not inherit permissive v1 tag decoding or numeric facilities" $ do diff --git a/test/current_io_names.py b/test/current_io_names.py @@ -7,7 +7,7 @@ from pathlib import Path import re ROOT = Path(__file__).resolve().parent.parent -OBSOLETE = re.compile(r'IOV2|ioV2|\bio_v2\b|io-v2|StreamingV2|streaming-v2|runIOV2|scopeV2|spawnV2|V2Host') +OBSOLETE = re.compile(r'IOV2|ioV2|\bio_v2\b|io-v2|StreamingV2|streaming-v2|runIOV2|scopeV2|spawnV2|V2Host|mkRegistryV2') def main(): @@ -23,7 +23,8 @@ def main(): *(ROOT/'ext/demo-site/src').rglob('*.ts'), *(ROOT/'ext/haskell-wasm').glob('*.hs'), *(ROOT/'ext/haskell-wasm').glob('*.mjs'), - ROOT/'tricu.workspace', ROOT/'bootstrap/compiler-source-map.v1'] + ROOT/'tricu.workspace', ROOT/'bootstrap/compiler-source-map.v1', ROOT/'flake.nix'] + production += [p for parent in ['demos','test'] for p in (ROOT/parent).rglob('tricu.workspace') if 'fixtures' not in p.parts] for path in production: for number, line in enumerate(path.read_text().splitlines(), 1): if OBSOLETE.search(line): diff --git a/test/effect_interfaces/tricu.workspace b/test/effect_interfaces/tricu.workspace @@ -10,5 +10,4 @@ native_math ../../lib/math/native.tri parser ../../lib/parser.tri prelude ../../lib/prelude.tri socket ../../lib/socket.tri -io_v2 ../../lib/io-v2.tri -io_v2_storage ../../lib/io-v2/storage.tri +io_storage ../../lib/io/storage.tri diff --git a/test/fixtures/reference-source/8802318b7919f8b41c22e3e7d091540a279a1e8dc2506e8048aa42df7d1849a9.tri b/test/fixtures/reference-source/8802318b7919f8b41c22e3e7d091540a279a1e8dc2506e8048aa42df7d1849a9.tri @@ -0,0 +1,6 @@ +!import io as IO +!import io_text as Text +!export main +-- Explicit output, with ordinary write failure checked before success. +main = IO.io (IO.require IO.stdout (writer : + IO.require (Text.writeText writer "Hello, tricu\n") (_ : IO.pure ""))) diff --git a/test/fixtures/support-library.v1 b/test/fixtures/support-library.v1 @@ -19,7 +19,7 @@ module demos.levelOrderTraversal demos_levelOrderTraversal demos/levelOrderTrave module demos.contractEffects demos_contractEffects demos/contractEffects.tri 67252839e937e841c9fdc37a2518622a1da5bfd907d983494e92ee30b10427f4 module demos.interactionTrees demos_interactionTrees demos/interactionTrees.tri 53b86101d6aa83cce2d7217c168602faca01b9985be46b910b6579096e959ad1 module demos.runArboricxBundle demos_runArboricxBundle demos/runArboricxBundle.tri 2bd3e520f8a282604fe7683a9ecef2636d3d4151961cd0cd9a7348e64cef18d1 -module demos.interactionTrees.greet demos_interactionTrees_greet demos/interactionTrees/greet.tri c948d33d35cc38027a1bab745e27375b1e3ceeb1804d481450fc8dc6661cb234 +module demos.interactionTrees.greet demos_interactionTrees_greet demos/interactionTrees/greet.tri 8802318b7919f8b41c22e3e7d091540a279a1e8dc2506e8048aa42df7d1849a9 module demos.interactionTrees.environment demos_interactionTrees_environment demos/interactionTrees/environment.tri d5586bcbcafd3522fd3d0d52f8918dbc18265aae1209d28a5c2e380a45861eac module demos.interactionTrees.state demos_interactionTrees_state demos/interactionTrees/state.tri 1153f9329dc602485d0ecf696d3e1c23aecf021f6f639cf1a3a1230933b65728 module demos.interactionTrees.shout demos_interactionTrees_shout demos/interactionTrees/shout.tri 6190c2917f61d1873cbe70a23d6b7ad3bc630f837f8be385d9423a0cd3419f0d @@ -81,7 +81,7 @@ rebuilt demos_levelOrderTraversal 0ef507454afb4df437f724419aa49e6beb6b554309bb2b rebuilt demos_contractEffects 69973d45ff50088bef57cdf3e1994d63ba34f9f354ed7e25127bf3f9c39f1a25 8ef18c3d4c4a817d6afc966295a2783f4caaa3411e7ff4081f44fd8af6f7e872 f02843f6598c2a6712abb5e0f96cb0a54565476b409b91b733f15d536146bdc0 rebuilt demos_interactionTrees 0958fed4fe3cf232ca57d9d6ea0aff2b91c58c4682b08a332e5e23bcee0d0b54 e12e22e2ee0830368b1aa0a7c769f6f9848ce4cad30dd2f1b798db95615db82f f02843f6598c2a6712abb5e0f96cb0a54565476b409b91b733f15d536146bdc0 rebuilt demos_runArboricxBundle 0931ed7ea7f82ca816766256396f1d81ee28c60df4c056df82ed7e421dd31f3e 9d0179d9ceb8a47d318a7e8980cb88a2c0b35c0eefd9ae5ecd880df6ba428312 f02843f6598c2a6712abb5e0f96cb0a54565476b409b91b733f15d536146bdc0 -rebuilt demos_interactionTrees_greet 634975f9669a6c00b3c3bb4a917d478d308f1b694c92282e0fa821482834d3c0 71d24edfbe66ad27be351c949c21d7ba62969917271022f91fc6ac8817ad3434 f02843f6598c2a6712abb5e0f96cb0a54565476b409b91b733f15d536146bdc0 +rebuilt demos_interactionTrees_greet 90e4ede9682340ad4398bdf68d0977ac4b65ecf85e5e55ee6eac07df7629b2a8 71d24edfbe66ad27be351c949c21d7ba62969917271022f91fc6ac8817ad3434 f02843f6598c2a6712abb5e0f96cb0a54565476b409b91b733f15d536146bdc0 rebuilt demos_interactionTrees_environment 8d02106b82d23b296ac7e49d16205cf0d10a0c6b4c62888e7fd8c70f27e211d4 1f4dc4271627a9c7d390f95bbe3ba9dffb87493c8727f78440138c9fe31b4bf1 f02843f6598c2a6712abb5e0f96cb0a54565476b409b91b733f15d536146bdc0 rebuilt demos_interactionTrees_state f7f888c6622506e28d0f666bb07a76fabccb74adcd07a417b1592d9f3bf36982 0f58214fafae6a3ba5016f853517dcd6200475ccdc83f9f1ad3396054eece1ea f02843f6598c2a6712abb5e0f96cb0a54565476b409b91b733f15d536146bdc0 rebuilt demos_interactionTrees_shout e3ab70456521b0e3e2a2ee5731ad8b20d8e7cab6358d62d0790fe5a8acc95733 b9db7b3f111a1656168e85ebcce70bc16ab494417b4fe0343c2199dcbcb47c7d f02843f6598c2a6712abb5e0f96cb0a54565476b409b91b733f15d536146bdc0 diff --git a/test/fixtures/support-receipts/demos_interactionTrees_greet.receipt b/test/fixtures/support-receipts/demos_interactionTrees_greet.receipt @@ -1,5 +1,5 @@ arboricx.build-receipt.v1 -source c948d33d35cc38027a1bab745e27375b1e3ceeb1804d481450fc8dc6661cb234 +source 8802318b7919f8b41c22e3e7d091540a279a1e8dc2506e8048aa42df7d1849a9 compiler f02843f6598c2a6712abb5e0f96cb0a54565476b409b91b733f15d536146bdc0 options 307cf2eafa67562f5c3a6d4555c1fc1ccb9b91f43d0b74d564f5aa0bb73ffd0f output 71d24edfbe66ad27be351c949c21d7ba62969917271022f91fc6ac8817ad3434 diff --git a/test/handlers/tricu.workspace b/test/handlers/tricu.workspace @@ -17,8 +17,7 @@ socket ../../lib/socket.tri arboricx_handlers ../../lib/arboricx/handlers.tri handler_upload ../../lib/handlers/upload.tri arboricx_streaming ../../lib/arboricx/streaming.tri -io_v2 ../../lib/io-v2.tri -io_v2_storage ../../lib/io-v2/storage.tri -io_v2_artifacts ../../lib/io-v2/artifacts.tri +io_storage ../../lib/io/storage.tri +io_artifacts ../../lib/io/artifacts.tri test_observe observe.tri test_state state.tri diff --git a/test/interaction_inspection.py b/test/interaction_inspection.py @@ -133,7 +133,7 @@ def main(): v2 = json.loads(run('--as', 'io', '--json').stdout) assert v2['supportedVersions'] == [1, 2] assert [o['summary'] for o in v2['occurrences'][:3]] == [ - 'tricuIO', 'Bind', 'Facility file@1/open-writer'] + 'tricuIO v2', 'Bind', 'Facility file@1/open-writer'] assert [o['status'] for o in v2['occurrences'][3:]] == ['opaque', 'opaque'] assert victim.read_text() == 'untouched' diff --git a/test/io/README.md b/test/io/README.md @@ -16,26 +16,26 @@ The operation layout is a research protocol subject to revision. nix flake check nix build .# PYTHONDONTWRITEBYTECODE=1 python3 test/io_protocol.py result/bin/tricu \ - --directory /tmp/new-v2-protocol-check + --directory /tmp/new-io-protocol-check PYTHONDONTWRITEBYTECODE=1 python3 test/interaction_inspection.py result/bin/tricu PYTHONDONTWRITEBYTECODE=1 python3 test/io_streams.py result/bin/tricu \ - --directory /tmp/new-v2-stream-check + --directory /tmp/new-io-stream-check PYTHONDONTWRITEBYTECODE=1 python3 test/io_tcp.py result/bin/tricu \ - --directory /tmp/new-v2-tcp-check + --directory /tmp/new-io-tcp-check PYTHONDONTWRITEBYTECODE=1 python3 test/io_directory.py result/bin/tricu \ - --directory /tmp/new-v2-directory-check + --directory /tmp/new-io-directory-check PYTHONDONTWRITEBYTECODE=1 python3 test/io_positioned.py result/bin/tricu \ - --directory /tmp/new-v2-positioned-check + --directory /tmp/new-io-positioned-check PYTHONDONTWRITEBYTECODE=1 python3 test/io_files.py result/bin/tricu \ - --directory /tmp/new-v2-file-check + --directory /tmp/new-io-file-check PYTHONDONTWRITEBYTECODE=1 python3 test/io_tasks.py result/bin/tricu \ - --directory /tmp/new-v2-task-check + --directory /tmp/new-io-task-check PYTHONDONTWRITEBYTECODE=1 python3 test/io_publication.py result/bin/tricu \ - --directory /tmp/new-v2-publication-check + --directory /tmp/new-io-publication-check ``` Use new output directories. The scripts compile current source through the -packaged v2 compiler, execute under OS process authority, and record source hashes, +packaged compiler, execute under OS process authority, and record source hashes, commands, full results and measurements. File checks cover complete binary output through 1 MiB, direct and handled borrowing, ownership transfer, implicit joining, acquisition failures, and cancellation after an acknowledged chunk. Copying uses @@ -546,7 +546,7 @@ digests, absent/blocked roots, limits, exponentially shared cross-store copying, and actual concurrent publishers. Native synchronization tests cover opened-inode identity/cursor behavior, modes, non-directories/FIFOs, leases, cancellation, primary/cleanup faults and once-only descriptor release. Power-loss durability is -outside these tests. The packaged compiler uses this source-owned v2 storage +outside these tests. The packaged compiler uses this source-owned storage policy; full reproduction is covered by the compiler rebuilding guide. ## Strict UTF-8 and source-text conveniences @@ -820,7 +820,7 @@ Service-level Results remain ordinary values. `H.liftIO (IO.spawn ...)` alone do not capture handler routing: use `H.spawn` for handler computations. `H.collect` is a state-threading transformer, not shared mutable state. It rejects -v2 scope/spawn boundaries rather than silently sharing or dropping its state; +scope/spawn boundaries rather than silently sharing or dropping its state; install child-local collection inside the child body explicitly. General shared cells/channels and implicit child-state snapshots are not implemented. Captured services that refer to resources still obey the real resource scopes. @@ -970,7 +970,7 @@ count or safe implicit retry. Immutable-store policy assumes cooperating writers there is no transaction against external mutation or universal crash guarantee. `lib/source/io.tri` is the **compiler storage facade**, imported as -`compiler_io`. It constructs v2 actions for the operations used by the source compiler. +`compiler_io`. It constructs IO actions for the operations used by the source compiler. It preserves Result continuation/remainder conventions, uses a declared 64-MiB source/metadata/encoded-tree budget, and requires parent-first directory creation. Missing ancestors fail. Directory @@ -979,7 +979,7 @@ return false for missing paths and non-files, but propagate other operation erro Indexed reads spool in the object's parent directory, suitable for the writable compiler application store. Callers must supply a writable parent directory. -Both compiler source maps select `compiler_io` and its v2 dependencies. The +The compiler source map selects `compiler_io` and its IO dependencies. The general application module `io` reexports the complete `io` facade. ```sh @@ -1127,14 +1127,14 @@ Build/run the native-OS-authority streaming runner: ```sh nix build .#arboricxStreamingRunner -./result/bin/arboricx-streaming-v2 +./result/bin/arboricx-streaming nix build .#arboricxStreamingTest python3 test/io_http.py /path/to/nix-built/tricu --directory /new/output ``` The runner binds port 8080 and uses `./store` with a 16-connection FIFO window. Its packaged runtime store needs no compiler cache in the working directory. -The default `arboricxServerRunner` and image use the same v2 composition. Symlinks +The default `arboricxServerRunner` and image use the same composition. Symlinks follow OS authority; wrong-digest bytes fail authentication. Deployment tests use v2 and retain retired-grant rejection controls. Public deployment is a separate operator action. @@ -1165,12 +1165,12 @@ no-op, not an implicit scheduling barrier. Yield offers a scheduling opportunity it does not guarantee alternation, fairness, ordering or message atomicity. No wall-clock reads, timeout/race combinator or deadline API is implied by this group. -`demos/interactionTrees.tri` now uses v2 scoped children and consumed join tickets; +`demos/interactionTrees.tri` now uses scoped children and consumed join tickets; the parent alone writes stdout. `demos/interactionTrees/yield.tri` installs child- local log collection and prints the collected results from the parent. This explicitly retires the old demo's incorrect claim that yield guarantees alternating writes and avoids concurrent stdout lease conflicts. Published historical fixture -bundles retain their original provenance alongside current v2 publications. +bundles retain their original provenance alongside current publications. ```sh python3 test/io_clock.py result/bin/tricu --directory /new/clock-controls @@ -1301,9 +1301,9 @@ Invalid limits reject before reading, including when the reader is stale. The migrated `getLineAsync` demo starts a child read, writes prompts from the parent, then consumes the child's join ticket. EOF and an empty name differ, and write/read -failures are checked. `greet` and `forkAwait` also use v2; the parent serializes +failures are checked. `greet` and `forkAwait` also use IO; the parent serializes `forkAwait` output rather than assuming concurrent writes are atomic. Historical -published v1 fixtures remain frozen alongside the current v2 releases. +published v1 fixtures remain frozen alongside the current releases. ```sh python3 test/io_lines.py result/bin/tricu --directory /new/line-controls diff --git a/test/unit.py b/test/unit.py @@ -1613,6 +1613,23 @@ class BackendDefaultTests(unittest.TestCase): self.assertEqual(captured[0].backend, override or 'stable') +class HistoricalLibraryReferenceTests(unittest.TestCase): + def test_historical_paths_are_labelled_without_source_substitution(self): + import importlib.util + spec = importlib.util.spec_from_file_location('site_reference', ROOT/'ext/demo-site/reference.py') + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + source, note = module.source_reference(ROOT, 'lib/io-v2.tri') + self.assertIsNone(source) + self.assertIn('Historical source path', note) + source, note = module.source_reference(ROOT, 'lib/io.tri') + self.assertEqual(source, ROOT/'lib/io.tri') + self.assertIn('Source SHA-256', note) + for path in ['lib/missing-current.tri', '../outside.tri', '/etc/passwd']: + with self.assertRaises(ValueError): + module.source_reference(ROOT, path) + + class CheckpointProgressTests(unittest.TestCase): def test_private_and_unselected_files_are_never_read_as_checkpoints(self): from bootstrap_generations import published_checkpoints