Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -691,7 +691,7 @@ func MTIClass(allowed ...string) Validator
func All(vs ...Validator) Validator // AND-combine
```

`Codec.Validate(m)` runs every present field's `Validate` rules plus `Required`/`RequiredOn(MTI)` rules and any schema-level cross-field rules, collecting **all** `Violation`s. This exhaustive, non-fail-fast behaviour is what makes the framework fuzz/conformance-friendly and lets a switch emit precise ISO response/reason codes for every malformed field in a single pass.
`Codec.Validate(m)` runs every present field's `Validate` rules plus `Required`/`RequiredOn(MTI)` rules and any schema-level cross-field rules, collecting **all** `Violation`s. This exhaustive, non-fail-fast behaviour is what makes Isopace fuzz/conformance-friendly and lets a switch emit precise ISO response/reason codes for every malformed field in a single pass.

---

Expand Down Expand Up @@ -984,7 +984,7 @@ jPOS `unpack()` eagerly decodes every present field into an `ISOField`/`String`
jPOS encodes every length×encoding combination as its own packager class (`IFA_LLLNUM`, `IFB_LLLBINARY`, `IFE_LLLCHAR`, …). Isopace makes the length prefix and the value codec orthogonal, independently-registered components, so ≈6 length × ≈12 value codecs compose into the full catalogue with zero bespoke classes — all resolvable by name from Go, YAML, or a derived profile. Adding EBCDIC to a numeric field is swapping one codec, not authoring a new class.

**4. Structural correctness invariants jPOS lacks.**
The bitmap is **always derived** from present fields at marshal time, so the classic jPOS bitmap/content desync footgun is impossible. `Message` is immutable with copy-on-write, so a decoded request is safely shared across the `Switch`, `Flow` stages, and async logging with zero locking and no defensive copies. `Validate()` is **exhaustive** — it returns *all* `Violation`s in one pass, each with `Path`, `Offset`, and `Rule`, versus jPOS's first-failure `ISOException` with an opaque string — which is exactly what makes the framework fuzz/conformance-friendly and lets a switch emit precise ISO response codes. The `Schema` and every struct-binding tag are validated at build/init time, turning config mistakes into startup failures.
The bitmap is **always derived** from present fields at marshal time, so the classic jPOS bitmap/content desync footgun is impossible. `Message` is immutable with copy-on-write, so a decoded request is safely shared across the `Switch`, `Flow` stages, and async logging with zero locking and no defensive copies. `Validate()` is **exhaustive** — it returns *all* `Violation`s in one pass, each with `Path`, `Offset`, and `Rule`, versus jPOS's first-failure `ISOException` with an opaque string — which is exactly what makes Isopace fuzz/conformance-friendly and lets a switch emit precise ISO response codes. The `Schema` and every struct-binding tag are validated at build/init time, turning config mistakes into startup failures.

**5. One model, many renderings — clean model/schema/codec separation.**
In jPOS the packager *is* the format and `ISOMsg` is hard-wired to ISO-8583 wire; producing JSON or another encoding means bespoke traversal per format with no single immutable schema object. Isopace splits `Message` (model) / `Schema` (definitions) / `FieldCodec`+`LengthCodec` (wire), and every renderer consumes one read-only `View`, so the identical `*Message` projects losslessly to ISO-8583 (any profile), JSON, protobuf, and ISO 20022 — and a new acquirer dialect is a `generic.LoadFile` config or a `Derive`/`Override` overlay, not a new packager class.
Expand Down
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ package is `gofmt`/`go vet` clean and tested under `go test -race`.

## [0.1.0] - 2026-06-01

First tagged release. A feature-complete, clean-room Go framework for ISO-8583
First tagged release. A feature-complete, clean-room Go package for ISO-8583
messaging and payment switching. The module is **stdlib-only** — no third-party
dependency in the module graph — and every package is `gofmt`/`go vet` clean and
tested under `go test -race`.
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ language; Go shown):
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion IMPLEMENTATION_PLAN.md
Original file line number Diff line number Diff line change
Expand Up @@ -370,7 +370,7 @@ The dependency-free heart. Built in slices so each compiles and tests green.
| 🟢 | SemVer policy + `CHANGELOG.md` | `docs/versioning.md`, `CHANGELOG.md` |
| 🟢 | Tag `v0.1.0` + GitHub release | annotated tag pushed and release published at `v0.1.0` |

> **Done:** the framework is assembled into runnable programs — an `issuer` host
> **Done:** Isopace is assembled into runnable programs — an `issuer` host
> and an `acquirer` client over a real switch, plus a `simulator` test host built
> from `runtime.Host` supervising an ISO-8583 listener and an ops admin endpoint
> (`/healthz`, `/readyz`, `/metrics`) with metrics wired through
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Isopace

**Isopace** is a financial transaction framework for Go — ISO-8583 messaging and
**Isopace** is a financial transaction package for Go — ISO-8583 messaging and
payment switching, plus the runtime, transaction pipeline, coordination, and
security building blocks needed to run a switch.

Expand Down
2 changes: 1 addition & 1 deletion adapters/otel/otel.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion adapters/otel/otel_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion adapters/payshield/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion adapters/payshield/payshield.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion adapters/payshield/payshield_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion adapters/payshield/proto.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion adapters/payshield/simulator.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion adapters/pkcs11/padding_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion adapters/pkcs11/pkcs11.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion adapters/pkcs11/pkcs11_softhsm_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion adapters/pkcs11/pkcs11_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion adapters/sql/sql.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion adapters/sql/sql_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion cmd/teq/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion conformance/bench_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion conformance/conformance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion conformance/doc.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion conformance/fuzz_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion connector/connector.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion connector/connector_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion docs/contributing.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ Every source file must begin with the SPDX dual-license header (Go shown):
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
4 changes: 2 additions & 2 deletions docs/examples.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description: >-

Isopace ships a set of runnable programs under
[`examples/`](https://github.com/teqpace-services/isopace/tree/main/examples)
that assemble the framework's building blocks into working switches and demos.
that assemble the package's building blocks into working switches and demos.
Each is small enough to read end-to-end. None require anything beyond the Go
toolchain — Isopace is stdlib-only.

Expand Down Expand Up @@ -64,7 +64,7 @@ The two programs implement a tiny acquirer ↔ issuer authorization flow over TC

## simulator

The `simulator` assembles a small switch from the framework's building blocks: a
The `simulator` assembles a small switch from the package's building blocks: a
`runtime.Host` supervises an ISO-8583 listener and an admin HTTP endpoint, with
the metrics registry wired in as the runtime observer.

Expand Down
2 changes: 1 addition & 1 deletion docs/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ go run ./examples/acquirer -addr 127.0.0.1:8583 -n 5 -amount 2500

### Simulator / test host

The `simulator` assembles a small switch from the framework's building blocks: a
The `simulator` assembles a small switch from the package's building blocks: a
`runtime.Host` supervises an ISO-8583 listener and an admin HTTP endpoint, with
the metrics registry wired in as the runtime observer.

Expand Down
6 changes: 3 additions & 3 deletions docs/index.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: Isopace — ISO-8583 & payment switching for Go
description: >-
A stdlib-only ISO-8583 messaging and payment-switching framework for Go:
A stdlib-only ISO-8583 messaging and payment-switching package for Go:
type-safe field access, zero-copy decode, a pluggable codec catalog, and
goroutine-native concurrency.
hide:
Expand All @@ -12,7 +12,7 @@ hide:
# Isopace

<p class="hero-tagline" markdown>
**A financial transaction framework for Go** — ISO-8583 messaging and payment
**A financial transaction package for Go** — ISO-8583 messaging and payment
switching, plus the runtime, transaction pipeline, coordination, and security
building blocks needed to run a switch.
</p>
Expand Down Expand Up @@ -145,7 +145,7 @@ stan, _ := iso8583.Get[int64](got, 11)

## The stack

The framework is layered with a strict one-directional dependency rule: the core
The packages are layered with a strict one-directional dependency rule: the core
model knows the wire format only through the `*Schema` it references, and every
renderer consumes one read-only `View`.

Expand Down
2 changes: 1 addition & 1 deletion docs/packages.md
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,7 @@ prefix-keyed SHA-256 message hash used by some acquirer links (e.g. CoralPay).

## rbac, store & ops — enterprise & ops { #rbac-store-ops }

The operational layer that turns the framework into a deployable service.
The operational layer that turns Isopace into a deployable service.

- `rbac` — role-based access control with PBKDF2 authentication.
- `store` — persistence.
Expand Down
2 changes: 1 addition & 1 deletion examples/acquirer/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion examples/flowdemo/authflow.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion examples/flowdemo/authflow_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion examples/flowdemo/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion examples/issuer/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion examples/playground/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion examples/posdemo/posdemo.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion examples/posdemo/posdemo_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion examples/runtimehost/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
2 changes: 1 addition & 1 deletion examples/runtimehost/runtimehost_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// Copyright (C) 2026 Teqpace Services Ltd.
//
// This file is part of Isopace, a financial transaction framework.
// This file is part of Isopace, a financial transaction package.
//
// Isopace is dual-licensed:
// - under the GNU Affero General Public License v3.0 or later (see LICENSE); or
Expand Down
Loading
Loading