diff --git a/CHANGELOG.md b/CHANGELOG.md index 8dff90381..8ba627aec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,22 @@ and [Semantic Versioning](https://semver.org/). now writes the generated `private_key` to `/tmp/tollgate-setup.log` alongside the existing SSID and IP entries. +- **Unified identity module (NIP-06 + HKDF + RevealSeed).** New + `src/identity` module with NIP-06 12-word BIP39 mnemonic derivation, + HKDF (RFC 5869) attribute derivation for IPv4/MAC/password (replacing + raw SHA-256), and a loopback-only `/identity/reveal-seed` endpoint + (1 KB body limit). 14 passing tests. + ([#331](https://github.com/OpenTollGate/tollgate-module-basic-go/pull/331)) + +- **Vendor-IE discovery + calibrated score boost.** The WGM now reads the + vendor-specific Information Element from beacon frames to detect TollGate + APs and calibrate how likely a discovered AP is a tollgate. Vendor IE + encode/decode is implemented from the wire-format spec with round-trip + tests, an encoder overflow check runs before cast, the config schema gains + a `vendor_ie_discovery` field, and the discovered-AP score is boosted based + on cross-platform WiFi research. Rebased from #332. + ([#353](https://github.com/OpenTollGate/tollgate-module-basic-go/pull/353)) + ### Changed - **Setup version bumped to v0.6.2.** Reinstall/upgrade now triggers a @@ -66,6 +82,7 @@ and [Semantic Versioning](https://semver.org/). resolved `main` independently, so legs could package different portal revisions). The resolved portal commit SHA is reported in the job summary. + ([#368](https://github.com/OpenTollGate/tollgate-module-basic-go/pull/368)) ### Fixed @@ -80,6 +97,17 @@ and [Semantic Versioning](https://semver.org/). misleading 30-second timeout. ([#360](https://github.com/OpenTollGate/tollgate-module-basic-go/pull/360)) +- **Build script no longer injects the test mint into release builds.** The + local build script `packaging/local-build-ipk.sh` sets `cli.Version`, + `GitCommit`, and `BuildTime` via ldflags but never set + `config_manager.GitBranch`, leaving it `unknown`. Because `IsDevBuild()` + treated any non-`main` branch as dev, `unknown` triggered dev mode and + injected a test mint (with dummy invoices) into every release `.ipk`. The + script now passes `-X ...config_manager.GitBranch=main` in `LDFLAGS`, and + `IsDevBuild()` treats `unknown`/empty branches the same as `main`, so only + actual non-`main` branch names enable dev mode. + ([#359](https://github.com/OpenTollGate/tollgate-module-basic-go/pull/359)) + - **Splash stub preserves query parameters on redirect.** The captive-portal redirect stub now appends `location.search` to the `splash.html` URL so NDS-provided query params (notably @@ -162,10 +190,11 @@ and [Semantic Versioning](https://semver.org/). known TollGates across scans with signal range, sample count, and latest pricing. New CLI command `tollgate-cli upstream known` shows the summary. The `upstream scan` output now includes `is_tollgate`, `price_per_step`, - and `step_size` fields — **placeholders until vendor-IE discovery lands - (#332)**: nothing populates them yet, so `is_tollgate` logs as `false` - and pricing as zero values. Foundation for Phase 2 speed probing and - Phase 3 advertised pricing in #311. + and `step_size` fields — now populated since vendor-IE discovery landed in + #353 (see Added below): `is_tollgate` and pricing reflect real TollGate + APs. Foundation for Phase 2 speed probing and Phase 3 advertised pricing + in #311. + ([#312](https://github.com/OpenTollGate/tollgate-module-basic-go/pull/312)) ### Fixed @@ -206,7 +235,8 @@ and [Semantic Versioning](https://semver.org/). probing the local box. Also demotes the per-payment success log from `Info` to `Debug` (it fires on every renewal and was noisy) ([#88](https://github.com/OpenTollGate/tollgate-module-basic-go/issues/88), - [#315](https://github.com/OpenTollGate/tollgate-module-basic-go/pull/315)). + [#315](https://github.com/OpenTollGate/tollgate-module-basic-go/pull/315), + [#347](https://github.com/OpenTollGate/tollgate-module-basic-go/pull/347)). - **Lightning quote persistence: data race + crash-safety fix.** `persistLightningQuotes` now deep-copies `lightningQuoteRecord` @@ -316,6 +346,24 @@ and [Semantic Versioning](https://semver.org/). the 37 existing exec.Command call sites (#263). 13 tests, stdlib only ([#265](https://github.com/OpenTollGate/tollgate-module-basic-go/pull/265)). +- **WalletPort interface + GonutsWallet adapter.** New `src/tollwallet` + `port.go` defines the `WalletPort` interface and primitive types + (`StatePaid`, `StateIssued`, …) abstracting away gonuts-specific types, + with a `GonutsWallet` adapter implementing it via the existing + gonuts-tollgate library and a build-time `cdk_wallet_stub.go` for the + future cdk-go adapter. Foundation for decoupling the merchant from + gonuts-tollgate; adds token-flow characterization tests. + ([#299](https://github.com/OpenTollGate/tollgate-module-basic-go/pull/299)) + +- **Supply chain: personal-fork `replace` directive dropped.** The + `replace github.com/OpenTollGate/gonuts-tollgate => github.com/felixfelix-bot/gonuts-tollgate v0.11.1` + directives in `src/go.mod` and `src/tollwallet/go.mod` are removed now + that the official OpenTollGate gonuts-tollgate v0.11.1 tag is published + (same codebase state as the fork). Both modules re-tidied against the + official release, removing the personal-fork dependency from the + upstream supply chain. No functional changes. + ([#361](https://github.com/OpenTollGate/tollgate-module-basic-go/pull/361)) + - **Operator guide.** New `docs/operator-guide.md` covering every `tollgate` CLI subcommand (service, wallet, private network, upstream Wi-Fi, config, health) with example output, flags, and a troubleshooting section; README @@ -323,18 +371,43 @@ and [Semantic Versioning](https://semver.org/). surface ([#188](https://github.com/OpenTollGate/tollgate-module-basic-go/pull/188)). -- **config_manager buildinfo tests synced to 7 production mints.** The - `buildinfo_test.go` expectations were stale after #359 added five more - production mints (lnserver.com, macadamia.cash, westernbtc.com, kashu.me, - cubabitcoin.org) and made `IsDevBuild()` treat `unknown`/empty branches as - non-dev. Tests now assert 7 production mints on `main`/`unknown`/empty and - 8 (7 + testnut) on feature branches, matching the merged behavior. - -- **CI: `src/merchant` added to the go-test matrix.** The merchant module - now builds and tests standalone (its go.mod gained the ltcsuite/ltcd - `exclude` directive and a full re-tidy in #361), so it is no longer - omitted from the matrix. `src/cli`, `src/upstream_detector` and +- **CI debt resolved: config_manager buildinfo tests + merchant in the + go-test matrix.** The `buildinfo_test.go` expectations were stale after + #359 added five more production mints (lnserver.com, macadamia.cash, + westernbtc.com, kashu.me, cubabitcoin.org) and made `IsDevBuild()` treat + `unknown`/empty branches as non-dev; tests now assert 7 production mints + on `main`/`unknown`/empty and 8 (7 + testnut) on feature branches, + matching the merged behavior. Separately, `src/merchant` now builds and + tests standalone (its go.mod gained the ltcsuite/ltcd `exclude` + directive and a full re-tidy in #361), so it is added to the go-test + matrix. `src/cli`, `src/upstream_detector` and `src/upstream_session_manager` remain omitted pending the same rewrite. + ([#365](https://github.com/OpenTollGate/tollgate-module-basic-go/pull/365)) + +- **CI: `package-apk` portal build uses Node 20, not Debian Node 12.** + The apk job installed Node via `apt-get` inside the `openwrt/sdk` + container (Debian bullseye → Node 12.22.12), which crashed the + captive-portal build (`vite build`) with a `module.enableCompileCache?.()` + SyntaxError on every main push since Aug 26. Replaced with the same + `actions/setup-node@v4` (node 20) pattern `package-ipk` already uses. + ([#366](https://github.com/OpenTollGate/tollgate-module-basic-go/pull/366)) + +- **CI: build-matrix trigger hygiene.** `push` builds are restricted to + `main` + `v*` tags (PRs already build every branch — eliminating + same-commit double-builds and fan-out bursts), markdown/docs-only + changes are ignored via `paths-ignore`, and a `concurrency` group with + `cancel-in-progress` supersedes redundant runs on the same ref. Cuts + the workflow's 43k runner-minutes YTD waste. + ([#369](https://github.com/OpenTollGate/tollgate-module-basic-go/pull/369)) + +- **CI: apk SDK build-tree caching + job timeouts.** `package-apk` gains + an `actions/cache` step (SHA-pinned `@v5`) caching `/builder/dl`, + `staging_dir`, and `build_dir` keyed per SDK target with + `restore-keys` fallback, so subsequent runs skip feed downloads and + dependency compiles. `timeout-minutes` added to all heavy jobs + (compile 30, portal 15, ipk 30, apk 90, publish 15) replacing the + 6-hour default. + ([#370](https://github.com/OpenTollGate/tollgate-module-basic-go/pull/370)) ### Security