Skip to content

v0.17.0 — the question one application cannot answer

Latest

Choose a tag to compare

@peopleworks peopleworks released this 25 Aug 00:14
· 18 commits to main since this release
4a25038

The question one application cannot answer

Everything here so far reads one XAF application and explains it. That is the right unit for inheriting a codebase, and the wrong unit for the person who wrote forty of them.

Someone who has delivered XAF to clients for ten years has a question no single-application tool can be asked: have I built this before? Somewhere back there is the class about to be modelled again — not a similar one, the same one, thought through properly, with the two properties this time will forget.

xaflogic projects add --name Legal   --project "C:\Clients\Legal\pwLegalOffice.Module"
xaflogic projects add --name Budget  --project "C:\Clients\Budget\PWPresupuesto.Module"
xaflogic wiki --open

One self-contained HTML file over all of them. No server, no build step, no request to the network.

The corpus map

What it computes

Every shared class is placed between the applications that model it — at the average direction of those applications, at a distance set by how much they agree. A class every application has belongs to no one direction, so it falls to the centre. The picture reads before the caption does: the middle is your common ground, the rim is the work that belongs to one client.

Classes modelled more than once Property by property, a column per application, richest first
The layer you wrote yourself Base classes carried between applications — your own framework
The same name, two shapes Total a decimal here and a double there
Names you keep The vocabulary nobody wrote down
Which two are most alike A grid you click to hold the page to just those two projects
The releases you are on Your DevExpress spread, with the one your catalog describes marked

There is nowhere in that page to type a sentence about the collection. That is deliberate: a hand-written summary of nine applications is wrong the day the tenth is added, and nobody notices.

What running it over six real applications found

405 entities, 111 controllers. Two findings worth the release on their own.

The same property name meaning two different scalar shapes. Total a decimal in one application and a double in another — and the same for UnitPrice, Cantidad, Descuento and Latitude. Nothing is broken. Everything compiles. It is how a total ends up two cents out.

Zero shared base classes across all six. Every application rebuilt from XPO primitives. That zero is not an empty result, it is the finding, and the page says so rather than showing a heading over nothing.

Two of the quality decisions came from running against those applications rather than against fixtures, because fixtures agree with whatever the code already does. Double and double are one type, and reporting them as a disagreement is a false accusation — a tool that makes one stops being believed about the true ones. And a name holding a different collection in each entity is vocabulary rather than a conflict; leaving those in buried decimal against double under seven rows of XPCollection<T>.

A third came from opening the page instead of reading the diff: the comparison table silently cropped its last column, which is the failure that matters, because a reader would have believed the columns they could see.

What it will not claim

  • Classes are matched by name. Two Cliente classes in two solutions may model different things — the comparison beside them is what tells you whether they share an idea.
  • A base class is listed as yours only when its own source was read in one of the projects. No list of DevExpress type names is involved, so nothing goes stale when DevExpress renames something — and a base class in a library you did not add to the wiki is absent, not framework.
  • Report counts stay lower bounds, per application, exactly as in 0.16.0.

Also in this release

xaflogic projects add no longer requires --resource-name. It names a PeopleWorks Copilot resource — one publishing target among several, and irrelevant to wiki, explain, agents and mcp, all of which read the configured list and write locally.

Four generators carried a version number as a default: the explainer stamped 0.10.1 six releases after 0.10.1 shipped, and the writer of AGENTS.md stamped 0.9.0 eight releases on. Nothing failed, because a default every caller overrides is a default nobody rereads. They now say of unknown version, and a test refuses any generator default shaped like a version.

514 tests, over synthetic fixtures — no DevExpress licence needed to run them.

Full detail in the changelog.