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
5 changes: 4 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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/)
Expand All @@ -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)
Expand Down
9 changes: 8 additions & 1 deletion ROADMAP.md
Original file line number Diff line number Diff line change
@@ -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.
Expand Down Expand Up @@ -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.
Expand Down
45 changes: 45 additions & 0 deletions docs/release-notes/RELEASE_NOTE_v0.8.0.md
Original file line number Diff line number Diff line change
@@ -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.
2 changes: 1 addition & 1 deletion scripts/build-portable-windows.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down
2 changes: 1 addition & 1 deletion src/cli/PasWeave.Version.pas
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
interface

const
PasWeaveVersion = '0.7.0';
PasWeaveVersion = '0.8.0';

implementation

Expand Down
2 changes: 1 addition & 1 deletion tests/test_pasweave.pas
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down
Loading