From 6eb2ceb0cd9d0420d3b7e48c09f5497b3195176e Mon Sep 17 00:00:00 2001 From: Iwan Kelaiah Date: Sat, 19 Sep 2026 12:22:17 +1000 Subject: [PATCH] release: prepare v0.8.0 Bump version metadata to 0.8.0, finalize the changelog with the release date, record the completed milestone in the roadmap, and add the v0.8.0 release note describing the project configuration contract. Verified locally: make test (CLI and functional suites), the documentation link check, and the portable Windows release build (embedded-assets executable, version check, CLI suite against the release binary, and the standalone scientific-example smoke test). --- CHANGELOG.md | 5 ++- README.md | 4 +- ROADMAP.md | 9 ++++- docs/release-notes/RELEASE_NOTE_v0.8.0.md | 45 +++++++++++++++++++++++ scripts/build-portable-windows.ps1 | 2 +- src/cli/PasWeave.Version.pas | 2 +- tests/test_pasweave.pas | 2 +- 7 files changed, 62 insertions(+), 7 deletions(-) create mode 100644 docs/release-notes/RELEASE_NOTE_v0.8.0.md diff --git a/CHANGELOG.md b/CHANGELOG.md index df8725a..6128a36 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.ht ## [Unreleased] +## [0.8.0] - 2026-09-19 + ### Added - Versioned `pasweave.json` project configuration (`--config`) covering @@ -567,7 +569,8 @@ pipeline and a portable Windows release. - Verified the portable executable in isolation, including all 67 extracted third-party assets byte-for-byte. -[Unreleased]: https://github.com/ikelaiah/pasweave/compare/v0.7.0...HEAD +[Unreleased]: https://github.com/ikelaiah/pasweave/compare/v0.8.0...HEAD +[0.8.0]: https://github.com/ikelaiah/pasweave/compare/v0.7.0...v0.8.0 [0.7.0]: https://github.com/ikelaiah/pasweave/compare/v0.6.0...v0.7.0 [0.6.0]: https://github.com/ikelaiah/pasweave/compare/v0.5.6...v0.6.0 [0.5.6]: https://github.com/ikelaiah/pasweave/compare/v0.5.5...v0.5.6 diff --git a/README.md b/README.md index 1a604d0..3b41e7f 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![Free Pascal](https://img.shields.io/badge/Free%20Pascal-3.2.2%2B-14b8a6)](docs/parser-integration.md) [![Lazarus](https://img.shields.io/badge/Lazarus-.lpi%20%7C%20.lpk-7c3aed)](docs/lazarus-projects.md) [![Windows](https://img.shields.io/badge/platform-Windows%20x86--64-2563eb)](docs/releasing.md) -[![Version](https://img.shields.io/badge/version-0.7.0-635bff)](CHANGELOG.md) +[![Version](https://img.shields.io/badge/version-0.8.0-635bff)](CHANGELOG.md) [![Runtime dependencies: none](https://img.shields.io/badge/runtime%20dependencies-none-10b981)](https://github.com/ikelaiah/pasweave/releases) [![Tests](https://img.shields.io/github/actions/workflow/status/ikelaiah/pasweave/pages.yml?branch=main&label=tests)](https://github.com/ikelaiah/pasweave/actions/workflows/pages.yml) [![Documentation](https://img.shields.io/badge/docs-live-0ea5e9)](https://ikelaiah.github.io/pasweave/) @@ -25,7 +25,7 @@ network connection, or registry changes. [View the live showcase](https://ikelaiah.github.io/pasweave/) · [Download for Windows](https://github.com/ikelaiah/pasweave/releases) · -[Read the v0.7.0 release notes](docs/release-notes/RELEASE_NOTE_v0.7.0.md) +[Read the v0.8.0 release notes](docs/release-notes/RELEASE_NOTE_v0.8.0.md) > **Project status:** PasWeave is pre-release software. It targets Free Pascal > and `{$mode objfpc}` first; see [scope and limitations](#scope-and-limitations) diff --git a/ROADMAP.md b/ROADMAP.md index e5405bd..64267b5 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,6 +1,6 @@ # PasWeave roadmap -PasWeave has shipped `v0.7.0` and is preparing `v0.8.0`. The parser-to-site +PasWeave has shipped `v0.8.0` and is preparing `v0.9.0`. The parser-to-site pipeline works; the path to `v1.0.0` is about making that pipeline understand real project builds, improving author feedback and navigation, scaling it safely, and then freezing the public contracts. @@ -411,6 +411,13 @@ Exit criteria: **Outcome:** a project can commit one reviewable PasWeave configuration and reproduce a build without restating stable options on every command line. +Status: completed on 2026-09-19. The versioned `pasweave.json` contract, +precedence rules, path validation, visibility policy, and reproducibility +fields are recorded in the +[project configuration guide](docs/project-configuration.md), +[CHANGELOG.md](CHANGELOG.md), and the +[v0.8.0 release note](docs/release-notes/RELEASE_NOTE_v0.8.0.md). + Exit criteria: - Add one versioned project configuration format covering stable CLI options. diff --git a/docs/release-notes/RELEASE_NOTE_v0.8.0.md b/docs/release-notes/RELEASE_NOTE_v0.8.0.md new file mode 100644 index 0000000..f9b5c4f --- /dev/null +++ b/docs/release-notes/RELEASE_NOTE_v0.8.0.md @@ -0,0 +1,45 @@ +# PasWeave v0.8.0 + +PasWeave v0.8.0 adds reproducible project configuration. Commit one +`pasweave.json`, build with `--config=pasweave.json`, and the effective +configuration is recorded with the output so the build can be reproduced from +the same commit and file. + +Highlights: + +- **versioned configuration format**: `pasweave.json`, `"version": 1`, strictly + declarative. It covers source and output selection, comment styles, + visibility, project title and branding, repository/source-link settings, + discovery globs, compiler paths/defines/targets/build mode/package paths, and + coverage thresholds; +- **documented precedence**: defaults, then the configuration file, then + explicit command-line values. Any CLI instance of a repeatable option + replaces the configured list; `--no-recursive` and + `--visibility=public|all` override configured booleans and policies; +- **safe paths**: every path in the file resolves from the configuration + directory; absolute paths and parent traversal that escapes that directory + are rejected, so a committed configuration stays portable and cannot touch + files outside the project; +- **strict validation**: unknown keys, wrong types, unsupported versions, + invalid colors/fonts/targets/defines/coverage values, and invalid globs are + rejected with key-named input errors and exit code 2; +- **visibility policy**: `public` (default) documents the public API exactly as + before; `all` also documents private and strict-private declarations, with + coverage and the symbol index following the same population; +- **reproducibility**: `api-model.json` records `configurationSource` and the + effective normalized `configuration` text, and the configuration file is part + of the incremental build fingerprint, so editing it invalidates cached + output; +- **out of scope by design**: no scripts, plugins, remote resources, or + environment expansion in the configuration. + +Validation includes the complete FPC 3.2.2 suite: 24 configuration unit cases +(full, minimal, and 22 rejection cases), CLI suite coverage for config-only +builds, precedence, config-relative output, model exposure, and +`visibility=all` rendering, plus byte-identical generated output when no +configuration is used. The portable Windows build runs the same gates. + +See the [project configuration guide](../project-configuration.md), +[generated output](../generated-output.md), and +[CHANGELOG.md](../../CHANGELOG.md) for the schema, precedence rules, and +recorded fields. diff --git a/scripts/build-portable-windows.ps1 b/scripts/build-portable-windows.ps1 index c4a7d9e..cf9f12e 100644 --- a/scripts/build-portable-windows.ps1 +++ b/scripts/build-portable-windows.ps1 @@ -3,7 +3,7 @@ param( [string]$Fpc = 'fpc', [string]$FpcRes = 'fpcres', [string]$Windres = 'windres', - [string]$ExpectedVersion = '0.7.0' + [string]$ExpectedVersion = '0.8.0' ) $ErrorActionPreference = 'Stop' diff --git a/src/cli/PasWeave.Version.pas b/src/cli/PasWeave.Version.pas index 18b9025..d51cb0f 100644 --- a/src/cli/PasWeave.Version.pas +++ b/src/cli/PasWeave.Version.pas @@ -5,7 +5,7 @@ interface const - PasWeaveVersion = '0.7.0'; + PasWeaveVersion = '0.8.0'; implementation diff --git a/tests/test_pasweave.pas b/tests/test_pasweave.pas index a01eff2..4eb2efe 100644 --- a/tests/test_pasweave.pas +++ b/tests/test_pasweave.pas @@ -892,7 +892,7 @@ procedure RunTests; StyleProject: TDocProject; TypeRelationship: TDocTypeRelationship; begin - Check(PasWeaveVersion = '0.7.0', + Check(PasWeaveVersion = '0.8.0', 'the tested application version should be explicit'); Check(TryParseDocumentationCommentStyles('slash, brace,paren', CommentStyles), 'combined documentation comment styles should parse');