Ctrl K
ComunidadGuías…

CHANGELOG.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Changelog

All notable changes to this project are documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

Git tags going forward are `vX.Y.Z` or `vX.Y.Z-<prerelease>` (for example
`v0.1.0-beta.1`). That leading `v` is required so
[`.github/workflows/release-agent.yml`](.github/workflows/release-agent.yml)
runs. How to cut a release, and the alpha→beta exit criteria, live in
[docs/release.md](docs/release.md).

## [Unreleased]

Operator-facing work on `main` since the public alpha cut. This is not a
released version. The next cut must add a dated section here and a new
`v…` tag. Do not reuse or move the legacy tag `0.0.1-alpha.1`.

### Added

- Session-bound proof-of-work and pinned Web Bot Auth skip
  ([#114](https://github.com/netgoat-xyz/netgoat/issues/114),
  [#116](https://github.com/netgoat-xyz/netgoat/pull/116)). Challenge is
  JSON. Text, click, and slider puzzles are gone. Verify is bound to the
  terminated TLS session, not an IP. An empty `bot_auth.pinned_directories`
  list fails open to the PoW lane.
- Terminate-only stack fingerprint v1
  ([#113](https://github.com/netgoat-xyz/netgoat/issues/113),
  [#117](https://github.com/netgoat-xyz/netgoat/pull/117)). Opaque
  `stack_class` (`{JA4}|{akamai_h2}|{alpn_order}`) is emitted only when
  this agent terminates TLS. Plaintext HTTP, TLS pass-through, and
  Cloudflare-in-front (`CF-Connecting-IP`) emit nothing. WAF context and
  challenge difficulty can use `stack_class` mismatch; User-Agent alone
  does not raise difficulty. HTTP/3 / QUIC remains a documented hole.
- Release train and production ops floor: this changelog,
  [docs/release.md](docs/release.md), and a production deploy plus
  metrics/alert section in [docs/operations.md](docs/operations.md).

### Changed

- README feature status and honesty notes now distinguish shipped
  behavior from roadmap
  ([#115](https://github.com/netgoat-xyz/netgoat/pull/115), updated again
  by [#117](https://github.com/netgoat-xyz/netgoat/pull/117)). JA4 is live
  only on the terminate path. Session-bound PoW and pinned Web Bot Auth
  skip are live on that same path. VSA, H3/QUIC fingerprint, and
  Turnstile/reCAPTCHA are not shipped.

### Fixed

- Missing `config.yml` is fatal. Plaintext HTTP on a public address is
  refused unless `allow_insecure_public_http: true` is set
  ([#111](https://github.com/netgoat-xyz/netgoat/pull/111)).
- CI runs `go vet` and `go test -race` on pull requests and `main`, and
  the release test job matches that baseline
  ([#110](https://github.com/netgoat-xyz/netgoat/pull/110),
  [#112](https://github.com/netgoat-xyz/netgoat/pull/112)).

## [0.0.1-alpha.1] / product label `v0.1.0-alpha.1` - 2026-03-16

Current public alpha. Treat the product version as **`v0.1.0-alpha.1`**.

### Tag naming

| Surface | Value |
| --- | --- |
| Git tag (only tag in this repo) | `0.0.1-alpha.1` |
| GitHub Release title | `🚀 Release v0.1.0-alpha.1` |
| README / docs alpha label | `v0.1.0-alpha.1` |
| `release-agent.yml` tag filter | `v*` — this historical tag does **not** match |

The tag, the Release title, and the SemVer version (`0.0.1` vs `0.1.0`)
disagree. That is a legacy mismatch. **Do not delete or retag
`0.0.1-alpha.1`.** The next release is a new `v…` tag on the intended
commit, with a changelog section and the release-agent workflow.

The GitHub Release body for this cut is not a durable change list.
Operator-facing behavior since this cut is tracked under `[Unreleased]`.