Skip to content
Merged
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
21 changes: 20 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,24 @@ under *Changed* or *Removed*.
The `Unreleased` block accumulates entries during development and is rolled into a
dated version block (`## [X.Y.Z] — YYYY-MM-DD`) when a release PR closes a milestone.

## [1.1.0] — 2026-06-14

**Milestone 8 — Internationalization & Post-Release Governance.** The first
post-1.0 **MINOR**: purely **additive** documentation and governance — the library
binary is unchanged from `v1.0.x` (no API/ABI/behaviour change), so existing
consumers are unaffected. It stands up a **documentation-translation system**
(English stays the single normative source; Simplified Chinese `zh-Hans` and
Japanese `ja` cover the full translatable surface — README, spec, patterns-catalogue
overview — under `docs/i18n/`, with a commit-pinned staleness manifest and a
glossary), establishes the **maintained-product governance** (the post-release
maintenance protocol, and English made the spec's normative language), and adds an
**agent-runnable consistency lint** (`tools/consistency_lint.py`) plus its CI gate
and agent-contract wiring that prove the project stays internally congruent after
every change. Four new ADRs (0032 i18n architecture, 0033 English-normative spec,
0034 maintenance protocol, 0035 consistency lint) take the running total to **35**. No spec row changes — Milestone 8 is additive
documentation/governance. Full release notes in
[`docs/releases/v1.1.0.md`](docs/releases/v1.1.0.md).

### Changed (M8.7)

- **Consistency lint wired into the agent contract** (ROADMAP §8.7). [`AGENTS.md`](AGENTS.md)
Expand Down Expand Up @@ -1035,7 +1053,8 @@ Milestone 2 → `v0.2.0`. Full release notes in

---

[Unreleased]: https://github.com/danielPoloWork/pbr-cpp-memory-pool/compare/v1.0.1...HEAD
[Unreleased]: https://github.com/danielPoloWork/pbr-cpp-memory-pool/compare/v1.1.0...HEAD
[1.1.0]: https://github.com/danielPoloWork/pbr-cpp-memory-pool/releases/tag/v1.1.0
[1.0.1]: https://github.com/danielPoloWork/pbr-cpp-memory-pool/releases/tag/v1.0.1
[1.0.0]: https://github.com/danielPoloWork/pbr-cpp-memory-pool/releases/tag/v1.0.0
[0.6.0]: https://github.com/danielPoloWork/pbr-cpp-memory-pool/releases/tag/v0.6.0
Expand Down
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
[![docs-site](https://github.com/danielPoloWork/pbr-cpp-memory-pool/actions/workflows/docs-site.yml/badge.svg)](https://github.com/danielPoloWork/pbr-cpp-memory-pool/actions/workflows/docs-site.yml)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![Standard: C++17 / ANSI C](https://img.shields.io/badge/Standard-C%2B%2B17%20%2F%20ANSI%20C-blue.svg)](docs/specs/01_spec_cpp_memory_pool.md)
[![Status: v1.0.1 stable](https://img.shields.io/badge/Status-v1.0.1%20stable-brightgreen.svg)](https://github.com/danielPoloWork/pbr-cpp-memory-pool/releases/tag/v1.0.1)
[![Status: v1.1.0 stable](https://img.shields.io/badge/Status-v1.1.0%20stable-brightgreen.svg)](https://github.com/danielPoloWork/pbr-cpp-memory-pool/releases/tag/v1.1.0)

> Part of the **Purpose-Built References (PBR)** series — small, didactic, production-quality C/C++ reference implementations of high-performance building blocks.

Expand Down Expand Up @@ -191,6 +191,8 @@ Reports for other host × compiler combinations (Linux / GCC, Linux / Clang, mac

## Status

`v1.1.0` — **internationalization & post-release governance** (Milestone 8), the first post-1.0 MINOR. Purely **additive** — the library binary is unchanged from `v1.0.x`. Documentation now ships in **Simplified Chinese (`zh-Hans`) and Japanese (`ja`)** (English stays normative — [`docs/i18n/`](docs/i18n/), [ADR-0032](docs/adr/0032-documentation-i18n-architecture.md)); the spec is English-normative ([ADR-0033](docs/adr/0033-english-as-the-spec-normative-language.md)); a [post-release maintenance protocol](docs/workflow/maintenance.md) ([ADR-0034](docs/adr/0034-post-release-maintenance-protocol.md)) governs the maintained-product phase; and an agent-runnable [`consistency lint`](tools/consistency_lint.py) ([ADR-0035](docs/adr/0035-agent-runnable-consistency-lint.md)) gates cross-artifact congruence in CI and the agent contract. Four new ADRs (0032–0035) bring the total to 35. Release notes: [`docs/releases/v1.1.0.md`](docs/releases/v1.1.0.md). The earlier line:

`v1.0.1` — **packaging patch** over the frozen `v1.0.0` API: adds the vcpkg port and the Conan 2.x recipe (Phase 2 distribution, ADRs [0030](docs/adr/0030-vcpkg-port.md) / [0031](docs/adr/0031-conan-recipe.md)). The shipped library is byte-identical to `v1.0.0` — a `PATCH`, no API/ABI/behaviour change. Release notes: [`docs/releases/v1.0.1.md`](docs/releases/v1.0.1.md). The stable baseline it patches:

`v1.0.0` — **the first stable release.** The public C ABI (`memory_pool_create` / `_alloc` / `_free` / `_destroy` plus the O(1) introspection accessors) and the C++ surface (`Pool`, `TypedPool<T>`, `PoolAllocator<T>`, `InstrumentedPool`, `PoolObserver`) are frozen under the SemVer 1.0 promise — no breaking change without a `2.0.0`. `v1.0.0` seals the feature set built across Milestones 0–6 — the O(1) implicit-free-list fixed-block pool with zero per-block metadata, the RAII / typed / STL-allocator C++ wrappers, compile-time-configurable thread safety, optional geometric dynamic growth, and opt-in observability — and adds the Milestone 7 polish: the published Doxygen API site (M7.1), the expanded usage / performance / compatibility README (M7.2), `find_package` install + pkg-config packaging (M7.4), and the patterns-catalogue (M7.5) and specification-compliance (M7.6, [ADR-0029](docs/adr/0029-spec-compliance-acceptance-audit.md)) acceptance audits. All fifteen Spec Coverage Map rows are ✅, re-verified end-to-end. Twenty-nine ADRs (0001–0029) record every decision; all eleven adopted design patterns are Implemented. Release notes for `v1.0.0` live in [`docs/releases/v1.0.0.md`](docs/releases/v1.0.0.md).
Expand All @@ -205,7 +207,7 @@ Reports for other host × compiler combinations (Linux / GCC, Linux / Clang, mac
| 5 | Dynamic Growth Mode | ✅ complete |
| 6 | Observability & Decorators | ✅ complete |
| 7 | Release & Polish | ✅ complete |
| 8 | i18n & Post-Release Governance | ⏳ next |
| 8 | i18n & Post-Release Governance | ✅ complete |

See [`ROADMAP.md`](ROADMAP.md) for the per-task breakdown and the Spec Coverage Map at the bottom (traceability from spec sections to roadmap items).

Expand Down
13 changes: 12 additions & 1 deletion ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ Goal: *post-`v1.0.0`*, stand up a **modular, professional documentation-translat
- [x] 8.5 ADR + doc: **post-release maintenance protocol** — `docs/workflow/maintenance.md` defining the patch / minor / major decision tree (SemVer post-1.0), the hotfix-branch + backport workflow, the security-fix handling path, the deprecation policy, and exactly how `version.hpp` / `CHANGELOG.md` / release notes move for a **patch** release (`v1.0.x`) vs. a **milestone minor**. Formalizes the update / fix / patch governance for the maintained-product phase; cross-links ADR-0004 (versioning), ADR-0008 (tag delegation), and §11 of `AGENTS.md`. Done as [ADR-0034](docs/adr/0034-post-release-maintenance-protocol.md) (the decision) + [`docs/workflow/maintenance.md`](docs/workflow/maintenance.md) (the governance doc). The protocol names the **version-protected surface** (C ABI + C++ types + compile-time knobs + the CMake imported target), fixes a **three-question decision tree** (break consumer code → MAJOR; backward-compatible addition / milestone / deprecation → MINOR; fix / docs / packaging / perf with no API change → PATCH; **ambiguous rounds up**), reuses the milestone-close mechanics ([`release.md`](docs/workflow/release.md)) with only the moved `version.hpp` component differing per level, defines the **hotfix path by releasability** (fix on `master` → next PATCH when releasable; else branch from the released tag → PATCH → mandatory forward-port to `master`), a **private-first, `Security`-categorized** security path, and a **deprecate-in-MINOR → window → remove-in-MAJOR** deprecation policy. The agent-vs-human release boundary and tag delegation are unchanged. Five rejected alternatives recorded (ad-hoc per release, trunk-only without hotfix-from-tag, fold into `release.md`, heavyweight release-branch/LTS model, define-security-later). `release.md` gains a reciprocal pointer to `maintenance.md`. Documentation-only — no code change.
- [x] 8.6 **Agent-runnable consistency lint** + ADR: a dependency-free checker (portable runner under `tools/`, wired into a CI job — extends the existing `docs.yml` ADR-sanity checks) asserting the project is internally congruent after any change — version constants in lockstep across `version.hpp` / `CHANGELOG.md` / README badge / latest `docs/releases/*.md`; every ADR indexed and reciprocally linked; every catalogued pattern has both an ADR **and** a live code location; the Spec Coverage Map has no dangling rows; the i18n manifest (§8.2) has no entry staler than its English source; and `ROADMAP.md` checkbox state is internally consistent. Exits non-zero with an actionable report. The ADR records the check catalogue and the "post-release congruence" contract. Implemented as [ADR-0035](docs/adr/0035-agent-runnable-consistency-lint.md) + [`tools/consistency_lint.py`](tools/consistency_lint.py) (Python 3 **standard-library only** — dependency-free in the spec §3.3 sense applied to tooling; runnable as `python tools/consistency_lint.py`) + a new **`consistency` job** in [`docs.yml`](.github/workflows/docs.yml) (full-history checkout for the git-based freshness check). The six checks: (1) version lockstep across `version.hpp` / CHANGELOG / README badge / newest release notes; (2) ADR index ↔ file bijection + sequential numbering; (3) every Adopted pattern row cites an existing ADR **and** an existing `src/main/cpp/` path; (4) Spec Coverage Map has no dangling row (valid glyph + non-empty items cell); (5) no `translated` i18n manifest row is staler than its English source (`git log <recorded>..HEAD -- <source>` empty); (6) README milestone-complete state agrees with ROADMAP checkboxes + no malformed checkbox. It runs all checks then reports every failure and exits non-zero. Validated locally (passes on the consistent tree; a negative test confirmed it catches a deliberately-broken version badge). Five rejected alternatives recorded (pure-bash, no-lint, third-party framework, pre-commit-hook-only, symbol-level pattern check). Wiring the lint into the agent contract (pre-PR checklist) is §8.7.
- [x] 8.7 Wire the §8.6 lint into the agent contract: a **post-release congruence checklist** added to `AGENTS.md` (and surfaced as a checkbox in the PR template) — run the lint before drafting any post-1.0 PR — plus the mapping from each failing check to its remediation in the §8.5 maintenance protocol. Done: [`AGENTS.md`](AGENTS.md) §6.4 gains a **mandatory post-release congruence check** (run `python tools/consistency_lint.py` and make it pass before drafting any post-`v1.0.0` PR, pointing at the failure→remediation map); the [PR template](.github/PULL_REQUEST_TEMPLATE.md) gains a *Documentation Impact* checkbox for it; and [`docs/workflow/maintenance.md`](docs/workflow/maintenance.md) gains a **failure → remediation table** mapping each of the six lint checks (`version-lockstep`, `adr-index`, `patterns`, `spec-map`, `i18n-freshness`, `milestones`) to exactly how to fix it. CI still re-runs the lint (the `consistency` job, M8.6); this item makes "run it first, locally" a contract obligation. Documentation-only — no code change.
- [ ] 8.8 **Close Milestone 8 → `v1.1.0`**: bump `version.hpp` (`MINOR=1`), roll `CHANGELOG.md` `Unreleased` into a `[1.1.0]` block, draft `docs/releases/v1.1.0.md`, refresh the README status block / badge / milestone table, and open the release PR (ADR-0004 §2). First post-1.0 minor — the §8.5 protocol governs from here on.
- [x] 8.8 **Close Milestone 8 → `v1.1.0`**: bump `version.hpp` (`MINOR=1`), roll `CHANGELOG.md` `Unreleased` into a `[1.1.0]` block, draft `docs/releases/v1.1.0.md`, refresh the README status block / badge / milestone table, and open the release PR (ADR-0004 §2). First post-1.0 minor — the §8.5 protocol governs from here on. [`version.hpp`](src/main/cpp/it/d4np/memorypool/version.hpp) is bumped to `MAJOR=1 MINOR=1 PATCH=0` and `PBR_MEMORY_POOL_VERSION_STRING` to `"1.1.0"`; the `pool_smoke` version-check `TEST_CASE` asserts the new components. [`CHANGELOG.md`](CHANGELOG.md) `[Unreleased]` is rolled into a sealed `## [1.1.0] — 2026-06-14` block (the M8.1–M8.7 + M8.9 subsections under a Milestone 8 headline; first post-1.0 MINOR, purely additive docs/governance — library binary unchanged); fresh empty `[Unreleased]`; bottom link references rewritten (`[Unreleased]` → `compare/v1.1.0...HEAD`, new `[1.1.0]` → `releases/tag/v1.1.0`). [`docs/releases/v1.1.0.md`](docs/releases/v1.1.0.md) carries the human-prose release notes for `release.yml`. [`README.md`](README.md) status badge (`v1.0.1` → `v1.1.0`), status paragraph, and milestone table (Milestone 8 `⏳ next` → `✅ complete`) are refreshed. The closing release classified as a **MINOR** per the M8.5 decision tree (additive surface, no API/ABI/behaviour change). The maintainer reviews and merges this PR, then the agent tags `v1.1.0` from `master` per [ADR-0008](docs/adr/0008-delegate-tag-creation-and-push-to-the-agent.md), and the maintainer clicks *Publish* on the draft GitHub Release. **This closes Milestone 8 and the planned roadmap.**
- [x] 8.9 *(Emerged mid-M8, prerequisite for §8.3/§8.4)* Establish **English as the specification's normative language**. The spec [`docs/specs/01_spec_cpp_memory_pool.md`](docs/specs/01_spec_cpp_memory_pool.md) was authored in Italian (the original contract); [ADR-0032](docs/adr/0032-documentation-i18n-architecture.md) assumes a single English-normative source and `AGENTS.md` §2 mandates English for on-disk artifacts, so the spec cannot be coherently localized (the "English is normative" banner) while its source is Italian. Decided in [ADR-0033](docs/adr/0033-english-as-the-spec-normative-language.md): the spec is translated to English **in place** as the normative source — a **faithful** translation (every requirement, the API, the Free List description, the diagram, and the verification strategy preserved with identical meaning; only the prose language changes, so the frozen contract is not semantically altered), with the Italian original preserved in git history (commit `3ccff68`). Three alternatives rejected (keep Italian + translate per-language, add `it` as an i18n target, dual-language file). This unblocks the §8.3 / §8.4 spec translations from a clean English source. `documentation.md` gains a "spec is maintained in English" note.

---
Expand Down Expand Up @@ -168,6 +168,17 @@ When a roadmap item flips from ⏳ to ✅, update the corresponding cell(s) in t

> Living, dated note describing where the project stands at the end of the most recent work session. Updated at the close of each session so the next session resumes from a known point without re-reading the full PR history. Latest entry first; older entries are kept for trail.

### 2026-06-14 — End of M8 release session (v1.1.0) — planned roadmap complete

- **Done in this session** — the whole of Milestone 8 plus two patch/normalization items: 8.1 (ADR-0032 i18n architecture), 8.2 (i18n scaffold), 8.3 (`zh-Hans` translation — spec / patterns / README, page-by-page), 8.4 (`ja` translation, same), 8.5 (ADR-0034 + `maintenance.md` post-release protocol), 8.6 (ADR-0035 + `tools/consistency_lint.py` + the `consistency` CI job), 8.7 (lint wired into `AGENTS.md` + PR template + remediation map), 8.9 (ADR-0033 — spec translated to English in place as the normative source), and 8.8 (this release PR — bump to `1.1.0`, roll `CHANGELOG.md` into `[1.1.0] — 2026-06-14`, add `docs/releases/v1.1.0.md`, refresh README). Also this session: `v1.0.1` packaging patch (vcpkg + Conan, M7.8/M7.9) tagged, and an English-normalization sweep of residual Italian spec quotations across the ROADMAP + six ADRs.
- **Library state on `master`** — the `v1.0.x` surface, **unchanged** (Milestone 8 is additive docs/governance; the static archive is byte-identical). New non-code surface: `docs/i18n/{zh-Hans,ja}/` covering README + spec + patterns overview with a commit-pinned manifest + glossary; `docs/workflow/maintenance.md`; `tools/consistency_lint.py` + its `docs.yml` job. The spec is now English-normative.
- **ADRs accepted to date** — 0001–0035. Total: **35** (Milestone 8 added 0032–0035).
- **Patterns catalogue** — unchanged: eleven Implemented; no new pattern in M8.
- **Spec Coverage Map** — unchanged: fifteen rows ✅ (M8 is additive; no spec row maps to it).
- **Versions** — `v1.0.0` (stable), `v1.0.1` (packaging patch) tagged & released; `v1.1.0` is this release PR (first post-1.0 MINOR).
- **Open issues / follow-ups** — none blocking. Noted small follow-ups: add a `SECURITY.md` (referenced by the maintenance protocol); bump CI action versions off the deprecated Node.js 20; optional vcpkg/Conan CI smoke jobs. After this PR merges, the agent tags `v1.1.0` from `master` (ADR-0008) and the maintainer clicks *Publish*.
- **Resume the next session with** — the planned roadmap (Milestones 0–8) is **complete**. Future work is maintained-product governance per [`docs/workflow/maintenance.md`](docs/workflow/maintenance.md): fixes as PATCH releases, additive features as MINOR, and the noted follow-ups above.

### 2026-06-14 — Packaging patch release (v1.0.1)

- A maintenance **`PATCH`** cut by the maintainer's request, immediately after M7.9 merged: it bundles the M7.8 vcpkg port + M7.9 Conan recipe (the post-1.0 packaging additions) into a tagged release. **Chosen as `1.0.1`, not `1.1.0`,** because the shipped library is byte-identical to `v1.0.0` (only repository-side packaging metadata was added) and to keep the Milestone 8 close targeted at `v1.1.0`. `version.hpp` → `1.0.1`, `pool_smoke` asserts updated, `CHANGELOG.md` `[Unreleased]` rolled into `## [1.0.1] — 2026-06-14`, `docs/releases/v1.0.1.md` added, README badge/status refreshed. Not a numbered roadmap item — an ad-hoc patch release. After merge: agent tags `v1.0.1`, maintainer publishes. Next: Milestone 8 (i18n & governance → `v1.1.0`).
Expand Down
4 changes: 2 additions & 2 deletions docs/i18n/translation-status.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@ Status vocabulary:

| Source page | Source commit | Translated at | Status | Reviewer |
|-------------|:-------------:|:-------------:|:------:|----------|
| [`README.md`](../../README.md) | `a01d4f4` | `a01d4f4` | `translated` | — |
| [`README.md`](../../README.md) | `a01d4f4` | `a01d4f4` | `stale` | — |
| [`docs/specs/01_spec_cpp_memory_pool.md`](../specs/01_spec_cpp_memory_pool.md) | `2e55dfa` | `2e55dfa` | `translated` | — |
| [`docs/patterns/README.md`](../patterns/README.md) | `524f0cc` | `524f0cc` | `translated` | — |

## `ja` (Japanese)

| Source page | Source commit | Translated at | Status | Reviewer |
|-------------|:-------------:|:-------------:|:------:|----------|
| [`README.md`](../../README.md) | `be70cf8` | `be70cf8` | `translated` | — |
| [`README.md`](../../README.md) | `be70cf8` | `be70cf8` | `stale` | — |
| [`docs/specs/01_spec_cpp_memory_pool.md`](../specs/01_spec_cpp_memory_pool.md) | `612f9d2` | `612f9d2` | `translated` | — |
| [`docs/patterns/README.md`](../patterns/README.md) | `6c6aeb7` | `6c6aeb7` | `translated` | — |

Expand Down
Loading
Loading