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
43 changes: 42 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,33 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.14.0] — 2026-08-16

Everything that governs an entity, under the entity.

0.13.0 gave each entity the columns it persists and stopped one door short. What is written on a
property travelled with the property — a folded `Number` row correctly said required — and what is
written on the class did not. So an entity's section could say a column was required and, three
headings later, document no rule requiring it: the two halves of the same page disagreeing, with
the property half telling the truth.

The rules were never missing from the application, only from the place a reader looks. A
`RuleCriteria` on an audit base is enforced every time anything in the application is saved. An
`[Appearance]` greys a field on every screen below it. An association gives every descendant a
collection that really is populated. All three were documented under the base alone, which on a
real application means documented nowhere anybody reads.

The other half of [#14] was filed as genuinely debatable, and it turned out to be a question about
scale rather than about relationships: an index, a count, a diagram and a search are answering
*what does this application declare*, while an entity's section is answering *what governs this
entity*. Following the fold everywhere would have made every total a measurement of the class
hierarchy — one rule on a base shared by two hundred entities reported two hundred times. So each
folded declaration carries the class that wrote it, and each rendering chooses.

A minor rather than a patch: `ExtractedValidationRule` gains `Id` and `Contexts`, all three
declaration types gain `InheritedFrom` and `Clone()`. Additive, and invisible to the CLI and the
MCP server.

### Fixed

- **A rule a class inherits is now listed under the class that inherits it** ([#14]). Folding
Expand Down Expand Up @@ -35,6 +62,19 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
search result a measurement of the class hierarchy instead. This is the half of [#14] filed as
debatable, and the answer is that the two readings are answering different questions.

### Internal

- **The workflows run current actions.** `actions/checkout` v4 → v7, `actions/setup-dotnet` v4 →
v6, `github/codeql-action` v3 → v4. Every run had been annotating that the first two target
Node 20 and were being *forced* onto Node 24; the third carries a deprecation dated December
2026. The jobs that would have broken first are `nuget.yml` and `mcp-registry.yml`, which
nothing exercises until a release is being published.

- **`docs/RELEASING.md` records how a publish is verified.** Install with `--tool-path`, so
verifying cannot leave you on a version you did not choose to run, and read the nuget.org index
twice: it is cached per CDN edge, and during the 0.13.0 verification two requests seconds apart
returned `0.12.1` and `0.13.0` for the same package.

[#14]: https://github.com/peopleworks/XAFLogicExplainer/issues/14

## [0.13.0] — 2026-08-14
Expand Down Expand Up @@ -637,7 +677,8 @@ applications; this is the point where it becomes a community project.
- `XafLogicExplainer.Core` references no DevExpress assemblies and needs no DevExpress license.
Only the Blazor widget does.

[Unreleased]: https://github.com/peopleworks/XAFLogicExplainer/compare/v0.13.0...HEAD
[Unreleased]: https://github.com/peopleworks/XAFLogicExplainer/compare/v0.14.0...HEAD
[0.14.0]: https://github.com/peopleworks/XAFLogicExplainer/releases/tag/v0.14.0
[0.13.0]: https://github.com/peopleworks/XAFLogicExplainer/releases/tag/v0.13.0
[0.12.1]: https://github.com/peopleworks/XAFLogicExplainer/releases/tag/v0.12.1
[0.12.0]: https://github.com/peopleworks/XAFLogicExplainer/releases/tag/v0.12.0
Expand Down
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
Still 0.x deliberately: the extraction engine is production-proven, but this release
changed its behaviour in six places and has been verified against one real application.
1.0.0 is earned once the extractor has read codebases we did not write. -->
<Version>0.13.0</Version>
<Version>0.14.0</Version>

<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,7 @@ project is a no-op. There is an MSBuild `.targets` file if you want it to run on

## Status

**v0.13.0.** The extraction engine is the mature part: it runs in production against real XAF
**v0.14.0.** The extraction engine is the mature part: it runs in production against real XAF
applications. The agent-facing surface is what is landing now, in the open.

| | |
Expand Down
2 changes: 1 addition & 1 deletion plugins/xaf-logic-explainer/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "xaf-logic-explainer",
"description": "Query a specific DevExpress XAF application: its entities, controllers, actions, business rules and Model Editor customizations, extracted from source with Roslyn.",
"version": "0.13.0",
"version": "0.14.0",
"license": "MIT",
"author": {
"name": "Pedro Hernández (PeopleWorks)",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ compatibility: >-
text and never compiles the target project.
metadata:
author: PeopleWorks
version: "0.13.0"
version: "0.14.0"
repository: https://github.com/peopleworks/XAFLogicExplainer
---

Expand Down
4 changes: 2 additions & 2 deletions src/XafLogicExplainer.Mcp/.mcp/server.json
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
{
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"name": "io.github.peopleworks/xaf-logic-explainer",
"version": "0.13.0",
"version": "0.14.0",
"title": "XAF Logic Explainer",
"description": "Query your DevExpress XAF app: entities, controllers, actions, rules, Model Editor.",
"packages": [
{
"registryType": "nuget",
"registryBaseUrl": "https://api.nuget.org/v3/index.json",
"identifier": "XafLogicExplainer.Mcp",
"version": "0.13.0",
"version": "0.14.0",
"transport": {
"type": "stdio"
},
Expand Down
Loading