Skip to content

Add promo/, and the first piece: the foundation nobody shared - #58

Merged
peopleworks merged 1 commit into
mainfrom
promo/foundation-piece
Aug 29, 2026
Merged

Add promo/, and the first piece: the foundation nobody shared#58
peopleworks merged 1 commit into
mainfrom
promo/foundation-piece

Conversation

@peopleworks

Copy link
Copy Markdown
Owner

A promo/ folder, and the first piece in it: six real XAF applications by one author share 16 class names and 60 property names, and zero base classes.

The same vocabulary every time. The structure rebuilt from XPO primitives every time.

The foundation nobody shared

Built from measurements, not from claims

Every number was read by running xaflogic wiki over the six module directories, on 2026-08-28:

Application Entities Controllers Actions DevExpress Framework
pwLegalOffice 231 78 66 23.2 net7.0
PeopleWorksCopilotBackOffice 56 6 9 25.2 net9.0
pwControlVisita 54 6 6 25.2 net481
PWPresupuesto 35 14 11 26.1 net48
ComisionSOS 19 7 7 25.1 net9.0
XafAiExtensionsDataAnalysis 10 1 0 25.2 net9.0

The re-measure is the reason the generator exists. The repository's own notes recorded 405 / 111 / 98; the real figures are 405 / 112 / 99. A controller and an action drifted within four days, unnoticed, because they were recalled rather than read. build-foundation.py keeps them in one table and recomputes every coordinate from it, so refreshing the piece is editing six rows.

The drawing

The base class is a foundation, so the piece is an engineer's elevation sheet that can measure its absence. Elevation heights are proportional at a computed 2.2511 px per entity — stated in the title block, beside the six paths the numbers came from, so a reader can check the claim rather than trust it. Windows, parapets and earth hatching are drafting detail; none of them is data wearing a costume.

Made with the Epic Infographics skill (MIT). Its preflight loads the page headless, measures real glyph geometry and refuses to render on a collision — it ran clean before every render here.

Two review loops were needed, and both are worth recording. The first draft failed the skill's own squint test: cover the text and it was hatched bars on graph paper, a layout that would hold any dataset unchanged. The second still had the footings covering the earth, so the foundations did not read as foundations. Neither would have been caught by looking at the code.

Two constraints this piece does not meet

Recorded in promo/README.md rather than discovered after posting.

  1. Safe band. docs/Blog/video/build-shorts.py reserves SAFE_TOP, SAFE_BOTTOM = 300, 400 because TikTok, Reels and Shorts draw their own interface over the top and bottom of a vertical frame. This piece puts its title near the top edge and its title block near the bottom, so posting the MP4 as a platform short would hide both. It is a poster and a still: safe as a feed image, an OG card, a slide or a print handout.
  2. Palette. It is drawn in the skill's blueprint language, not the house palette in scene_kit.py (#07090c ground, #ff8a3d accent). That file's own comment is the argument: a short that does not match the film it promotes looks like somebody else made it.

Meeting both would mean recomposing inside a 1220px band and re-skinning — a different piece, not a setting. Worth doing if these are to sit beside the eight shorts in docs/Blog/video/; not worth doing if promo/ stays posters. That is the call to make on this PR.

Contents

  • promo/README.md — what is here, how to regenerate it, and the two constraints above
  • promo/build-foundation.py — the generator; the numbers live in one table at the top
  • promo/foundation/ — PNG 2160×3840, MP4 8.4s, GIF, and the self-contained HTML source

4.4 MB of renders. They are the shareable artefacts, so they are committed rather than regenerated on demand — but every one of them comes back from the generator if that trade stops being worth it.

No source changes. 556 tests unaffected.

🤖 Generated with Claude Code

https://claude.ai/code/session_01W45tzJFX3NoSrk7svtQeKT

Promotional material built from measured facts rather than from claims. Six
real XAF applications by one author share 16 class names and 60 property names,
and zero base classes: the same vocabulary every time, the structure rebuilt
from XPO primitives every time.

Drawn as an engineer's elevation sheet, because the base class is a foundation
and the sheet can measure its absence. Elevation heights are proportional to
entity count at a computed 2.2511 px per entity, stated in the title block
beside the six module paths the numbers were read from. Windows, parapets and
earth hatching are drafting detail, never data wearing a costume.

The generator is the deliverable that matters. build-foundation.py holds the
numbers in one table and recomputes every coordinate from them, because a piece
nobody can regenerate quietly becomes wrong -- these totals were a controller
and an action out of date in this repository's own notes within four days of
being recorded, which is how the re-measure was noticed at all.

Made with the Epic Infographics skill (MIT, OrRon/EpicInfographics). Its
preflight measures real glyph geometry and refuses to render on a text
collision; it ran clean before every render here. Two review loops were needed
and both are worth recording: the first draft failed the skill's own squint
test -- cover the text and it was hatched bars on graph paper, a layout that
would hold any dataset -- and the second still had the footings hiding the
earth, so the foundations did not read as foundations.

promo/README.md records two constraints this piece does NOT meet, because
finding them after posting would be worse. build-shorts.py reserves 300px top
and 400px bottom for the interface the platforms draw over a vertical video,
and this piece puts its title and its title block outside that band -- so it is
a poster and a still, not a platform short. And it is drawn in the skill's
blueprint palette rather than the house palette in scene_kit.py, whose own
comment is the argument against mixing them. Meeting both would be a different
piece rather than a setting, and that is a decision, not an oversight.

No source changes. 556 tests unaffected.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W45tzJFX3NoSrk7svtQeKT
@peopleworks
peopleworks merged commit e092bfa into main Aug 29, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant