Changelog Generator is an OutSystems Developer Cloud (ODC) web app that helps development teams track and communicate changes between asset revisions. By connecting to your tenant's Asset Repository API, it fetches available assets and their revision history, compares any two revisions, and generates a human-readable changelog automatically.
### Fixed: three defects around built-in Role/Entity action refs, plus a bare "content changed" and a redundant CSS line-count bullet
Four independent `omlcore` fixes, all from a single investigation/implementation pass.
1. **Role built-in action calls rendered as `?()`.** `Resolve.EntityActionVerbs` covered the
five built-in Entity CRUD verbs but none of the four built-in Role verbs
(`RoleActions.CheckRole`, `CheckRoleClientSide`, `GrantRole`, `RevokeRole`), so a Call node
referencing one of those synthetic actions (e.g. "Check Role (Client-Side)") fell through
`Ref()`'s lookup to the bare `"?"` placeholder and rendered as `?()`. Fixed by adding all
four Role verbs to the existing dictionary — same mechanism as the Entity verbs, no
structural change. (`omlcore/Resolve.cs`)
2. **Entity/Role owner misattribution for elements nested in a built-in action.** An element
nested inside an entity's built-in Create/CreateOrUpdate/Update/Delete action (e.g. a
`GenericInputParameter`'s `Source`/`SourceList`) misattributed its owner to the entity
itself rather than to the action, and `EntityActions.CreateOrUpdateAllEntity` had no verb
entry at all so that specific action's elements resolved even less correctly. Reported on
`Inspection_CW`'s `UserPasswordReset` entity. Fixed by adding the missing
`CreateOrUpdateAllEntity` -> "Create or Update All" verb; making `KeyedParent()` recognize
any `EntityActionVerbs` key (both `EntityActions.*` and `RoleActions.*`) and stop there
instead of walking past it to the next Key-bearing ancestor; and giving `Owner()` an
`EntityActionVerbs`-aware branch that walks up from the synthetic action node to the
nearest named ancestor, returning `"{verb} {name}"` (e.g. "Create or Update All
UserPasswordReset action") instead of the bare entity name. Also added `TypeLabels` entries
mapping each `EntityActions.*` local name to `"action"`. (`omlcore/Resolve.cs`,
`omlcore/Renderer.cs`)
3. **Bare "content changed" when only one side of an expression resolved.** `Differ.Emit`'s
generic `contentOld`/`contentNew` capture required BOTH sides to resolve to an expression,
so a row where only one side had a value (e.g. a Source/SourceList going from unset to set,
or vice versa) fell through to the bare `"content changed"` fallback with no old/new shown
— and `Renderer.PlainBullet` rendered an empty resolved side as a bare backticked empty
string rather than a word. Fixed by loosening the `Emit` guard to fire when at least one
side resolves and the two differ, substituting `""` for the missing side, and by having
`PlainBullet` map an empty old/new value to `"unassigned"` — the same vocabulary
`ArgumentBullets`/`AssignmentBullets` already use for the same "no value on this side" case.
The separate, already-documented bare-fallback case (both sides null, e.g. the
Source/SourceList `MergedAttrs` collision) is untouched. (`omlcore/Differ.cs`,
4. **Redundant "N lines changed" CSS bullet.** When every selector-group in a CSS diff
collapsed to a whole-rule Created/Deleted fact, `changedParts` still appended a
`"{name}: {lines} lines changed"` bullet restating the same edit as a raw line count,
adding noise without new information. Fixed by splitting `CssBullets` into
`CssBulletsCore`, which also returns an `AllWholeRule` flag (false whenever any
selector-group needed a per-line removed/added/previously bullet instead of collapsing to a
whole-rule fact), and suppressing the "N lines changed" bullet exactly when
`allWholeRule && cssBullets.Count > 0` — kept whenever there's a genuine partial-rule edit
or no CSS bullets at all. (`omlcore/Renderer.cs`)
https://opensource.org/licenses/BSD-3-Clause