plexus-synapse-3.17.3: plexus-synapse.cabal
cabal-version: 3.0
name: plexus-synapse
version: 3.17.3
synopsis: Schema-driven CLI for Plexus RPC servers
description: Synapse is the command-line frontend for Plexus RPC. It discovers a
server's methods at runtime and builds its commands, help text,
parameter validation and output rendering from the schema, with no
code generation or static configuration.
license: MIT
license-file: LICENSE
author: hypermemetic
maintainer: hypermemetic@proton.me
copyright: (c) 2025-2026 hypermemetic
category: Network
build-type: Simple
tested-with: GHC == 9.8.4, GHC == 9.12.4
flag build-examples
description: Build example programs (schema-discovery)
default: False
manual: True
flag build-keychain-tests
description: Build and run SELF-8 keychain tests. These shell out to
`security` on macOS and touch the real keychain; they're
opt-in so default `cabal test` runs stay quiet.
Enable with: cabal test -f build-keychain-tests
default: False
manual: True
library
exposed-modules:
Synapse.Schema.Types
Synapse.Schema.Functor
Synapse.Endpoint
Synapse.Monad
Synapse.Log
Synapse.Algebra.Navigate
Synapse.Algebra.Render
Synapse.Algebra.Walk
Synapse.Algebra.Recursion
Synapse.Transport
Synapse.Reconnect
Synapse.Output
Synapse.Cache
Synapse.Deprecation
Synapse.Renderer
Synapse.IR.Types
Synapse.IR.Builder
Synapse.IR.Read
Synapse.IR.Cache
Synapse.Bidir
Synapse.CLI.Help
Synapse.CLI.Parse
Synapse.CLI.Support
Synapse.CLI.Template
Synapse.CLI.Source
Synapse.CLI.Transform
Synapse.CLI.Similarity
Synapse.Find
Synapse.Backend.Discovery
Synapse.Self
Synapse.Self.Types
Synapse.Self.Resolve
Synapse.Self.IO
Synapse.Self.Resolve.Literal
Synapse.Self.Resolve.Env
Synapse.Self.Resolve.File
Synapse.Self.Resolve.Keychain
Synapse.Self.Resolve.Default
Synapse.Self.Command
Synapse.Self.Commands
Synapse.Self.Template
Synapse.Self.Pattern
Synapse.Self.Examples
Synapse.Self.Debugger
Synapse.Self.Protocol.Validator
Synapse.Self.Protocol.StreamTracker
Synapse.Self.Protocol.Reporter
Synapse.Self.Protocol.TestRunner
Synapse.Identity.Proof
Synapse.Identity.Store
Synapse.Identity.Session
Synapse.Identity.Command
Synapse.Auth
Synapse.Auth.Loopback
Synapse.Hold
Synapse.SchemaStore
build-depends:
base >= 4.17 && < 5,
-- SYNAPSE-28: setCallRouter, substrateRpcSub, unsubscribe
plexus-protocol >= 0.5.5,
aeson >= 2.0 && < 2.3,
aeson-pretty >= 0.8 && < 0.9,
text >= 2.0 && < 2.2,
bytestring >= 0.11 && < 0.13,
case-insensitive >= 1.2 && < 1.3,
websockets >= 0.13 && < 0.14,
network >= 3.1 && < 3.3,
async >= 2.2 && < 2.3,
stm >= 2.5 && < 2.6,
streaming >= 0.2 && < 0.3,
mtl >= 2.3 && < 2.4,
transformers >= 0.6 && < 0.7,
containers >= 0.6 && < 0.8,
unordered-containers >= 0.2 && < 0.3,
hashable >= 1.4 && < 1.6,
prettyprinter >= 1.7 && < 1.8,
mustache >= 2.4 && < 2.5,
directory >= 1.3 && < 1.4,
filepath >= 1.4 && < 1.6,
yaml >= 0.11 && < 0.12,
vector >= 0.12 && < 0.14,
scientific >= 0.3 && < 0.4,
regex-tdfa >= 1.3 && < 1.4,
time >= 1.12 && < 1.15,
array >= 0.5 && < 0.6,
process >= 1.6 && < 1.7,
fast-logger >= 3.0 && < 3.3,
katip >= 0.8 && < 0.9,
base64-bytestring >= 1.2 && < 1.3,
optparse-applicative >= 0.18 && < 0.19,
unix >= 2.7 && < 2.9,
-- IDENTITY-43: Ed25519 keys and their randomness
crypton >= 1.0 && < 1.2,
ram >= 0.20 && < 0.23
hs-source-dirs: src
default-language: GHC2021
default-extensions:
OverloadedStrings
DeriveGeneric
DeriveAnyClass
DerivingStrategies
GeneralizedNewtypeDeriving
LambdaCase
RecordWildCards
executable synapse
main-is: Main.hs
autogen-modules: Paths_plexus_synapse
other-modules: Paths_plexus_synapse
build-depends:
base >= 4.17 && < 5,
plexus-protocol,
plexus-synapse,
aeson >= 2.0 && < 2.3,
text >= 2.0 && < 2.2,
bytestring >= 0.11 && < 0.13,
mtl >= 2.3 && < 2.4,
containers >= 0.6 && < 0.8,
directory >= 1.3 && < 1.4,
filepath >= 1.4 && < 1.6,
katip >= 0.8 && < 0.9,
optparse-applicative >= 0.18 && < 0.19,
prettyprinter >= 1.7 && < 1.8,
time >= 1.12 && < 1.14
hs-source-dirs: app
default-language: GHC2021
default-extensions:
OverloadedStrings
RecordWildCards
LambdaCase
-- SYNAPSE-28: the holder (synapse _hold) serves many runs at once
ghc-options: -threaded
executable schema-discovery
main-is: SchemaDiscovery.hs
build-depends:
base >= 4.17 && < 5,
plexus-protocol,
plexus-synapse,
aeson >= 2.0 && < 2.3,
text >= 2.0 && < 2.2,
streaming >= 0.2 && < 0.3
hs-source-dirs: examples
default-language: GHC2021
default-extensions:
OverloadedStrings
if !flag(build-examples)
buildable: False
executable reporter-demo
main-is: ReporterDemo.hs
build-depends:
base >= 4.17 && < 5,
plexus-synapse,
text >= 2.0 && < 2.2
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
if !flag(build-examples)
buildable: False
executable validation-report-test
main-is: ValidationReportTest.hs
build-depends:
base >= 4.17 && < 5,
plexus-synapse,
text >= 2.0 && < 2.2,
aeson >= 2.0 && < 2.3
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
if !flag(build-examples)
buildable: False
executable protocol-test-demo
main-is: ProtocolTestDemo.hs
build-depends:
base >= 4.17 && < 5,
plexus-synapse,
text >= 2.0 && < 2.2
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
if !flag(build-examples)
buildable: False
test-suite cli-test
type: exitcode-stdio-1.0
main-is: CLISpec.hs
build-depends:
base >= 4.17 && < 5,
text >= 2.0 && < 2.2,
process >= 1.6 && < 1.7,
hspec >= 2.10 && < 2.12
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
ghc-options: -threaded
test-suite ir-test
type: exitcode-stdio-1.0
main-is: IRSpec.hs
build-depends:
base >= 4.17 && < 5,
plexus-synapse,
text >= 2.0 && < 2.2,
containers >= 0.6 && < 0.8,
hspec >= 2.10 && < 2.12,
aeson >= 2.2 && < 2.3,
bytestring >= 0.11 && < 0.13,
katip >= 0.8 && < 0.9
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
LambdaCase
RecordWildCards
ghc-options: -threaded
test-suite schema-decode-test
type: exitcode-stdio-1.0
main-is: SchemaDecodeSpec.hs
build-depends:
base >= 4.17 && < 5,
plexus-protocol,
aeson >= 2.2 && < 2.3,
aeson-qq >= 0.8 && < 0.9,
bytestring >= 0.11 && < 0.13,
vector >= 0.13 && < 0.14
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
ghc-options: -threaded
test-suite req8-render-test
type: exitcode-stdio-1.0
main-is: Req8RenderSpec.hs
build-depends:
base >= 4.17 && < 5,
plexus-protocol,
plexus-synapse,
aeson >= 2.2 && < 2.3,
aeson-qq >= 0.8 && < 0.9,
containers >= 0.6 && < 0.8,
text >= 2.0 && < 2.2
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
ghc-options: -threaded
test-suite render-test
-- SYNAPSE-12: a backend's help laid out (blank lines, columns, wrapping,
-- required before optional, types as the schema says them).
-- SYNAPSE-13: in the gh / cargo shape — listings of one-line summaries in
-- their groups; a method's page with its usage line, aligned options,
-- values and examples; an older service's schema still rendered.
type: exitcode-stdio-1.0
main-is: RenderSpec.hs
build-depends:
base >= 4.17 && < 5,
plexus-protocol,
plexus-synapse,
aeson >= 2.2 && < 2.3,
aeson-qq >= 0.8 && < 0.9,
containers >= 0.6 && < 0.8,
text >= 2.0 && < 2.2,
hspec >= 2.10 && < 2.12
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
ghc-options: -threaded
test-suite typeref-json
type: exitcode-stdio-1.0
main-is: TypeRefJson.hs
build-depends:
base >= 4.17 && < 5,
plexus-synapse,
text >= 2.0 && < 2.2,
aeson >= 2.2 && < 2.3,
aeson-pretty >= 0.8 && < 0.9,
bytestring >= 0.11 && < 0.13
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
ghc-options: -threaded
test-suite parse-test
type: exitcode-stdio-1.0
main-is: ParseSpec.hs
build-depends:
base >= 4.17 && < 5,
plexus-synapse,
text >= 2.0 && < 2.2,
aeson >= 2.2 && < 2.3,
containers >= 0.6 && < 0.8,
vector >= 0.12 && < 0.14,
hspec >= 2.10 && < 2.12
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
ghc-options: -threaded
-- SYNAPSE-10: a parameter's value from a file or stdin
test-suite source-test
type: exitcode-stdio-1.0
main-is: SourceSpec.hs
build-depends:
base >= 4.17 && < 5,
plexus-synapse,
text >= 2.0 && < 2.2,
bytestring >= 0.11 && < 0.13,
directory >= 1.3 && < 1.4,
filepath >= 1.4 && < 1.6,
hspec >= 2.10 && < 2.12
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
ghc-options: -threaded
test-suite path-normalization-test
type: exitcode-stdio-1.0
main-is: PathNormalizationSpec.hs
build-depends:
base >= 4.17 && < 5,
plexus-synapse,
text >= 2.0 && < 2.2,
hspec >= 2.10 && < 2.12
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
ghc-options: -threaded
test-suite websocket-raw-test
type: exitcode-stdio-1.0
main-is: WebSocketRaw.hs
build-depends:
base >= 4.17 && < 5,
text >= 2.0 && < 2.2,
aeson >= 2.2 && < 2.3,
bytestring >= 0.11 && < 0.13,
websockets >= 0.13 && < 0.14
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
ghc-options: -threaded
test-suite bidir-test
type: exitcode-stdio-1.0
main-is: BidirSpec.hs
build-depends:
base >= 4.17 && < 5,
plexus-protocol,
plexus-synapse,
text >= 2.0 && < 2.2,
bytestring >= 0.11 && < 0.13,
aeson >= 2.2 && < 2.3,
hspec >= 2.10 && < 2.12
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
RecordWildCards
ghc-options: -threaded
test-suite bidir-integration-test
type: exitcode-stdio-1.0
main-is: BidirIntegrationSpec.hs
build-depends:
base >= 4.17 && < 5,
plexus-synapse,
text >= 2.0 && < 2.2,
containers >= 0.6 && < 0.8,
hspec >= 2.10 && < 2.12,
katip >= 0.8 && < 0.9
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
RecordWildCards
ghc-options: -threaded
test-suite stream-tracker-test
type: exitcode-stdio-1.0
main-is: StreamTrackerSpec.hs
build-depends:
base >= 4.17 && < 5,
plexus-synapse,
text >= 2.0 && < 2.2,
aeson >= 2.2 && < 2.3,
bytestring >= 0.11 && < 0.13,
hspec >= 2.10 && < 2.12
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
ghc-options: -threaded
test-suite deprecation-test
type: exitcode-stdio-1.0
main-is: DeprecationSpec.hs
build-depends:
base >= 4.17 && < 5,
plexus-protocol,
plexus-synapse,
text >= 2.0 && < 2.2,
aeson >= 2.0 && < 2.3,
containers >= 0.6 && < 0.8,
directory >= 1.3 && < 1.4,
hspec >= 2.10 && < 2.12
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
ghc-options: -threaded
test-suite self-test
type: exitcode-stdio-1.0
main-is: SelfSpec.hs
other-modules:
SelfCommandSpec
SelfMigrationSpec
SelfSafeWriteSpec
build-depends:
base >= 4.17 && < 5,
plexus-synapse,
text >= 2.0 && < 2.2,
bytestring >= 0.11 && < 0.13,
containers >= 0.6 && < 0.8,
aeson >= 2.2 && < 2.3,
directory >= 1.3 && < 1.4,
filepath >= 1.4 && < 1.6,
hspec >= 2.10 && < 2.12,
time >= 1.12 && < 1.15,
temporary >= 1.3 && < 1.4,
base64-bytestring >= 1.2 && < 1.3,
unix >= 2.7 && < 2.9
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
ghc-options: -threaded
test-suite identity-test
-- IDENTITY-43: the canonical message, the fixed proof vector the Rust
-- side cross-checks, and the key and session stores' order (env, a
-- mocked keychain, files in a directory of the test's own).
type: exitcode-stdio-1.0
main-is: IdentitySpec.hs
build-depends:
base >= 4.17 && < 5,
async >= 2.2 && < 2.3,
plexus-synapse,
text >= 2.0 && < 2.2,
bytestring >= 0.11 && < 0.13,
base64-bytestring >= 1.2 && < 1.3,
aeson >= 2.2 && < 2.3,
containers >= 0.6 && < 0.8,
directory >= 1.3 && < 1.4,
filepath >= 1.4 && < 1.6,
hspec >= 2.10 && < 2.12,
temporary >= 1.3 && < 1.4,
unix >= 2.7 && < 2.9
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
ghc-options: -threaded
test-suite ir12-method-role-test
type: exitcode-stdio-1.0
main-is: IR12MethodRoleSpec.hs
build-depends:
base >= 4.17 && < 5,
containers >= 0.6 && < 0.8,
plexus-protocol,
plexus-synapse,
aeson >= 2.2 && < 2.3,
bytestring >= 0.11 && < 0.13,
hspec >= 2.10 && < 2.12
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
ghc-options: -threaded
test-suite keychain-test
-- SELF-8 keychain tests. Opt-in via `-f build-keychain-tests` because
-- they shell out to macOS `security` and touch the real keychain.
type: exitcode-stdio-1.0
main-is: KeychainSpec.hs
build-depends:
base >= 4.17 && < 5,
plexus-synapse,
text >= 2.0 && < 2.2,
hspec >= 2.10 && < 2.12,
uuid >= 1.3 && < 1.4
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
ghc-options: -threaded
if !flag(build-keychain-tests)
buildable: False
test-suite auth-test
-- AUTH-8: the auth shapes plexus-protocol parses (and their absence),
-- the anonymous page, the caller's header and grant columns, the refusal
-- block, the loopback's state check, and the flows end to end against a
-- service in miniature (test/MockService.hs) on ports of their own.
type: exitcode-stdio-1.0
main-is: AuthSpec.hs
other-modules: MockService
build-depends:
base >= 4.17 && < 5,
plexus-protocol,
plexus-synapse,
aeson >= 2.2 && < 2.3,
aeson-qq >= 0.8 && < 0.9,
bytestring >= 0.11 && < 0.13,
containers >= 0.6 && < 0.8,
text >= 2.0 && < 2.2,
katip >= 0.8 && < 0.9,
network >= 3.1 && < 3.3,
websockets >= 0.13 && < 0.14,
vector >= 0.12 && < 0.14,
hspec >= 2.10 && < 2.12
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
ghc-options: -threaded
test-suite find-test
-- SYNAPSE-17: _find's matcher (exact, prefix, typo at both thresholds,
-- snake_case subsequence, every word, ranking) and its renders against
-- the mock service's catalog (menger's schema as it was, test/fixtures), on a
-- terminal and piped; a caller's view; the IR cache's hash check.
type: exitcode-stdio-1.0
main-is: FindSpec.hs
other-modules: MockService
build-depends:
base >= 4.17 && < 5,
plexus-synapse,
aeson >= 2.2 && < 2.3,
bytestring >= 0.11 && < 0.13,
containers >= 0.6 && < 0.8,
directory >= 1.3 && < 1.4,
filepath >= 1.4 && < 1.6,
text >= 2.0 && < 2.2,
katip >= 0.8 && < 0.9,
network >= 3.1 && < 3.3,
websockets >= 0.13 && < 0.14,
vector >= 0.12 && < 0.14,
hspec >= 2.10 && < 2.12
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
ghc-options: -threaded
test-suite reconnect-test
-- SYNAPSE-20: a lost connection is noticed (a close, a drop before any
-- answer, a silent peer by its keepalive) and synapse rides out the
-- outage — a read sent again, a stream resumed with since, a write that
-- went out never repeated, one that never left sent when the backend is
-- back, the window run out — against a flaky service on ports of its own.
type: exitcode-stdio-1.0
main-is: ReconnectSpec.hs
build-depends:
base >= 4.17 && < 5,
plexus-protocol,
plexus-synapse,
directory >= 1.3 && < 1.4,
filepath >= 1.4 && < 1.6,
unix >= 2.7 && < 2.9,
aeson >= 2.2 && < 2.3,
text >= 2.0 && < 2.2,
network >= 3.1 && < 3.3,
websockets >= 0.13 && < 0.14,
hspec >= 2.10 && < 2.12
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
ghc-options: -threaded
test-suite hold-test
-- SYNAPSE-28: a call costs one round trip and the server's time — the
-- multiplexer and the holder carry every call on one connection (counted
-- at the mock service), a stream abandoned is unsubscribed, the holder exits
-- idle; and the built synapse, end to end: cold fills the cache on one
-- connection, warm opens none and fetches nothing, --no-hold opens one,
-- a renamed method falls back and answers.
type: exitcode-stdio-1.0
main-is: HoldSpec.hs
other-modules: MockService
build-tool-depends: plexus-synapse:synapse
build-depends:
base >= 4.17 && < 5,
plexus-protocol,
plexus-synapse,
aeson >= 2.2 && < 2.3,
async >= 2.2 && < 2.3,
bytestring >= 0.11 && < 0.13,
directory >= 1.3 && < 1.4,
filepath >= 1.4 && < 1.6,
network >= 3.1 && < 3.3,
process >= 1.6 && < 1.7,
temporary >= 1.3 && < 1.4,
text >= 2.0 && < 2.2,
vector >= 0.12 && < 0.14,
websockets >= 0.13 && < 0.14,
hspec >= 2.10 && < 2.12
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
ghc-options: -threaded
test-suite pipe-test
-- SYNAPSE-26: a closed stdout is not an outage — the built synapse, its
-- stdout a pipe whose reader closes early (… | head -1): a write sent
-- once and exit 141, a stream ended (unsubscribed) and exit 141, with no
-- reconnect; a socket dropping with stdout open still reconnects (a read
-- resent, a write that went out exit 75).
type: exitcode-stdio-1.0
main-is: PipeSpec.hs
other-modules: MockService
build-tool-depends: plexus-synapse:synapse
build-depends:
base >= 4.17 && < 5,
aeson >= 2.2 && < 2.3,
bytestring >= 0.11 && < 0.13,
directory >= 1.3 && < 1.4,
filepath >= 1.4 && < 1.6,
network >= 3.1 && < 3.3,
process >= 1.6 && < 1.7,
temporary >= 1.3 && < 1.4,
text >= 2.0 && < 2.2,
vector >= 0.12 && < 0.14,
websockets >= 0.13 && < 0.14,
hspec >= 2.10 && < 2.12
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
ghc-options: -threaded
test-suite output-test
-- SYNAPSE-39: synapse -o FILE — the built synapse against the mock
-- service: an answer in FILE is what stdout would have had (plain and
-- -j) and stdout is empty; a failed call leaves no FILE and nothing
-- beside it, with its own exit code; a stream's items land as they come;
-- FILE is 0600; -o - is stdout; a FILE that cannot be made: exit 73,
-- nothing sent.
type: exitcode-stdio-1.0
main-is: OutputSpec.hs
other-modules: MockService
build-tool-depends: plexus-synapse:synapse
build-depends:
base >= 4.17 && < 5,
aeson >= 2.2 && < 2.3,
bytestring >= 0.11 && < 0.13,
directory >= 1.3 && < 1.4,
filepath >= 1.4 && < 1.6,
network >= 3.1 && < 3.3,
process >= 1.6 && < 1.7,
temporary >= 1.3 && < 1.4,
text >= 2.0 && < 2.2,
unix >= 2.7 && < 2.9,
vector >= 0.12 && < 0.14,
websockets >= 0.13 && < 0.14,
hspec >= 2.10 && < 2.12
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
ghc-options: -threaded
test-suite endpoint-test
-- SCAFFOLD-21: --url and -H/-P with --tls/--path read into one address,
-- and every key derived from it — the session store's (a plain address
-- keyed exactly as before), the proof's audience, the options messages
-- tell the reader to type, the plexus-protocol config.
type: exitcode-stdio-1.0
main-is: EndpointSpec.hs
build-depends:
base >= 4.17 && < 5,
plexus-protocol,
plexus-synapse,
text >= 2.0 && < 2.2,
hspec >= 2.10 && < 2.12
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
test-suite tls-test
-- SCAFFOLD-21: synapse speaks wss — the probe, a call and a key login
-- through a TLS terminator of the test's own (a CA openssl makes for the
-- run, in front of the mock service), at a path; an unknown CA and a wrong
-- name refused at the handshake. Pending without openssl.
type: exitcode-stdio-1.0
main-is: TlsSpec.hs
other-modules: MockService
build-depends:
base >= 4.17 && < 5,
plexus-protocol,
plexus-synapse,
aeson >= 2.2 && < 2.3,
base64-bytestring >= 1.2 && < 1.3,
bytestring >= 0.11 && < 0.13,
directory >= 1.3 && < 1.4,
filepath >= 1.4 && < 1.6,
katip >= 0.8 && < 0.9,
network >= 3.1 && < 3.3,
process >= 1.6 && < 1.7,
temporary >= 1.3 && < 1.4,
text >= 2.0 && < 2.2,
tls >= 2.1 && < 2.5,
vector >= 0.12 && < 0.14,
websockets >= 0.13 && < 0.14,
hspec >= 2.10 && < 2.12
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
ghc-options: -threaded
benchmark ir-bench
-- SYNAPSE-CC-8: the IR builder alone, over menger's 2026-10-29 schemas
-- (test/fixtures/ir-coverage, gzipped): decoded once, then the IR built
-- 20 times from memory — median, p90, bytes allocated per build.
type: exitcode-stdio-1.0
main-is: IRBench.hs
other-modules: IRFixture
build-depends:
base >= 4.17 && < 5,
plexus-synapse,
aeson >= 2.2 && < 2.3,
bytestring >= 0.11 && < 0.13,
containers >= 0.6 && < 0.8,
katip >= 0.8 && < 0.9,
text >= 2.0 && < 2.2,
zlib >= 0.6 && < 0.8
hs-source-dirs: bench test
default-language: GHC2021
default-extensions:
OverloadedStrings
ghc-options: -O2 -threaded -rtsopts "-with-rtsopts=-T"
test-suite ir-coverage-test
-- SYNAPSE-CC-8 (IR 2.1): every schema read whole or refused by name —
-- one fixture per evidence row (test/fixtures/ir-coverage), menger's
-- 2026-10-29 schemas whole (exactly 21 refusals, the IR equal to its
-- golden, every construct 2.0 typed serialized as before), a 3.16.0
-- plan discarded, and the built synapse's -i against a service with a
-- bare object: exit 65.
type: exitcode-stdio-1.0
main-is: IRCoverageSpec.hs
other-modules: IRFixture, MockService
build-tool-depends: plexus-synapse:synapse
build-depends:
base >= 4.17 && < 5,
plexus-protocol,
plexus-synapse,
aeson >= 2.2 && < 2.3,
aeson-pretty >= 0.8 && < 0.9,
bytestring >= 0.11 && < 0.13,
containers >= 0.6 && < 0.8,
directory >= 1.3 && < 1.4,
filepath >= 1.4 && < 1.6,
katip >= 0.8 && < 0.9,
network >= 3.1 && < 3.3,
process >= 1.6 && < 1.7,
temporary >= 1.3 && < 1.4,
text >= 2.0 && < 2.2,
vector >= 0.12 && < 0.14,
websockets >= 0.13 && < 0.14,
zlib >= 0.6 && < 0.8,
hspec >= 2.10 && < 2.12
hs-source-dirs: test
default-language: GHC2021
default-extensions:
OverloadedStrings
ghc-options: -threaded
-- NAMING-9: the naming gate (scripts/naming-gate.sh) in the suite. The
-- spec counts the gate's lines and shows the first; it never diffs them.
-- Its heap is capped (-M6G; +RTS -M... -RTS overrides it), so no regression
-- of that can take the machine (2026-10-29: an hspec diff reached 7.3 GB).
test-suite naming-gate
type: exitcode-stdio-1.0
main-is: NamingGateSpec.hs
build-depends:
base >= 4.17 && < 5,
process >= 1.6 && < 1.7,
hspec >= 2.10 && < 2.12
hs-source-dirs: test
default-language: GHC2021
ghc-options: -threaded -rtsopts "-with-rtsopts=-M6G"