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');