diff --git a/CHANGELOG.md b/CHANGELOG.md index 6441be9..9ac80b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,37 @@ the [versioning policy](https://teqpace-services.github.io/isopace/versioning/). ## [Unreleased] +## [1.0.0-rc.1] - 2026-06-09 + +First release candidate for `v1.0.0`. This is an **interim, feedback-seeking +tag under a "may still change" banner** — not the v1.0.0 contract itself. Per +the [roadmap to v1](ROADMAP-to-v1.md), it deliberately **narrows** what v1 will +freeze and is published to gather integration feedback before the API freeze: + +- **Stable candidate — the core.** `iso8583`, `packager`, `fieldcodec`, + `lengthcodec`, and `render` are proposed for the v1 API freeze. Feedback is + solicited against these surfaces specifically. +- **Experimental — may still change.** The higher layers (`runtime`, `flow`, + `space`, `store`, `mux`, `link`, `listener`, `connector`, `gateway`, `teq`, + `vault`, `rbac`, `ops`) remain explicitly experimental and are **not** covered + by the rc's stability intent until they have soaked. +- **Production crypto (HSM) is not yet shipped.** The only `vault` backends are + software (`SoftVault`, `SealedVault`); the certified-HSM / PKCS#11 path + (roadmap B1) is outstanding. Do not treat the crypto path as production-ready. + +No code change since `0.3.0` in the root module; the OpenTelemetry and SQL +adapters ship as separate modules (`adapters/otel`, `adapters/sql`) so the core +dependency graph stays empty. Still **stdlib-only**; every package is +`gofmt`/`go vet` clean and tested under `go test -race`. + +### Added + +- **`adapters/otel/` and `adapters/sql/`** — the first production integrations as + standalone modules (each its own `go.mod`): a `runtime.Observer` over the + OpenTelemetry SDK, and a `store.Store` over `database/sql` (driver chosen by the + integrator, so none enters the core graph). The root module remains + dependency-free. + ### Changed - **Docs:** corrected the `CoralPay` / `Zone` profile descriptions to state their @@ -184,7 +215,8 @@ tested under `go test -race`. authenticates in constant time; expose it only behind appropriate network controls. -[Unreleased]: https://github.com/teqpace-services/isopace/compare/v0.3.0...HEAD +[Unreleased]: https://github.com/teqpace-services/isopace/compare/v1.0.0-rc.1...HEAD +[1.0.0-rc.1]: https://github.com/teqpace-services/isopace/compare/v0.3.0...v1.0.0-rc.1 [0.3.0]: https://github.com/teqpace-services/isopace/compare/v0.2.0...v0.3.0 [0.2.0]: https://github.com/teqpace-services/isopace/compare/v0.1.0...v0.2.0 [0.1.0]: https://github.com/teqpace-services/isopace/releases/tag/v0.1.0 diff --git a/README.md b/README.md index 37a3d3d..726e7d5 100644 --- a/README.md +++ b/README.md @@ -9,14 +9,16 @@ It is an independent, clean-room implementation in the spirit of zero-copy decoding, a pluggable codec catalog, and goroutine-native concurrency. The module is **stdlib-only** — no third-party dependency in the module graph. -> **Status: `v0.3.0` — acquirer-profiles release.** Adds the `CoralPay` and -> `Zone` ISO 8583:1987 switch profiles (each a clean-room layout composed from -> public ISO 8583:1987 field semantics), a prefix-keyed SHA-256 message MAC, and a -> fixed-width `tlv` codec. Feature-complete across the planned layers and tested -> under `-race`, but pre-1.0: the API may change between minor versions (see -> [`docs/versioning.md`](docs/versioning.md)). The software `Vault` backend is -> for development/testing — production PIN and key handling require a certified -> HSM. +> **Status: `v1.0.0-rc.1` — first release candidate.** An **interim, +> feedback-seeking** tag under a "may still change" banner — not the v1.0.0 +> contract yet (see the [roadmap to v1](ROADMAP-to-v1.md)). It narrows what v1 +> will freeze: the **core** — `iso8583`, `packager`, `fieldcodec`, +> `lengthcodec`, `render` — is a stability candidate and the surface we want +> feedback on; the **higher layers** (`runtime`, `flow`, `space`, `store`, +> transport, `gateway`, `teq`, `vault`, `rbac`, `ops`) remain **experimental** +> until they soak. The software `Vault` backend is for development/testing — +> **production PIN and key handling require a certified HSM, which is not yet +> shipped.** Still stdlib-only; tested under `-race`. A product of **[Teqpace Services Ltd.](https://teqpace.com)** diff --git a/docs/index.md b/docs/index.md index 2c63afb..b83b786 100644 --- a/docs/index.md +++ b/docs/index.md @@ -21,7 +21,7 @@ building blocks needed to run a switch. ![License](https://img.shields.io/badge/license-AGPL--3.0%20%2F%20commercial-blue) ![Go](https://img.shields.io/badge/Go-1.26-00ADD8?logo=go&logoColor=white) ![Dependencies](https://img.shields.io/badge/dependencies-stdlib--only-success) -![Status](https://img.shields.io/badge/status-v0.3.0%20·%20pre--1.0-orange) +![Status](https://img.shields.io/badge/status-v1.0.0--rc.1-orange)

[Get started :material-rocket-launch:](getting-started.md){ .md-button .md-button--primary } @@ -36,13 +36,16 @@ access, zero-copy decoding, a pluggable codec catalog, and goroutine-native concurrency. The module is **stdlib-only** — there is no third-party dependency anywhere in its graph. -!!! warning "Pre-1.0 — `v0.3.0`, the acquirer-profiles release" +!!! warning "`v1.0.0-rc.1` — first release candidate (interim, may still change)" - Feature-complete across the planned layers and tested under `-race`, but the - API may change between minor versions (see the + A feedback-seeking tag under a "may still change" banner — **not the v1.0.0 + contract yet** (see the [roadmap to v1](https://github.com/teqpace-services/isopace/blob/main/ROADMAP-to-v1.md)). + It narrows what v1 will freeze: the **core** (`iso8583`, `packager`, + `fieldcodec`, `lengthcodec`, `render`) is a stability candidate; the + **higher layers** remain experimental until they soak (see the [versioning policy](versioning.md)). The software `Vault` backend is for development and testing — **production PIN and key handling require a - certified HSM.** + certified HSM, which is not yet shipped.** ## Why Isopace diff --git a/examples/simulator/main.go b/examples/simulator/main.go index 06fcf1a..5604cec 100644 --- a/examples/simulator/main.go +++ b/examples/simulator/main.go @@ -38,7 +38,7 @@ import ( "github.com/teqpace-services/isopace/runtime" ) -const version = "0.3.0" +const version = "1.0.0-rc.1" func main() { posAddr := flag.String("addr", "127.0.0.1:8583", "ISO-8583 listen address") diff --git a/simulator b/simulator new file mode 100755 index 0000000..71257c9 Binary files /dev/null and b/simulator differ