Repository navigation
Description
Problem
frodo app template list prints one line for every version of every template (125 lines for 51 templates), and list -l shows nine columns of which three (Name, Group, Display name) are the same fact. describe prints the list -l row plus the description and support URL, so it adds almost nothing: the catalog entries hold about 1.5 MB of detail (object types, connector configuration, application form, SSO setup) that only describe --json reaches. The id the commands print (3_4-azure-ad) is the key the catalog uses internally. It is not in any application record, and it changes with every new version of a template.
What the catalog holds (checked against the live catalog)
- 125 entries, 51 distinct templates (
idfield, for exampleazure.ad), 21 of them with more than one version (up to 10). Group,idand display name are 1:1; no two templates share a display name; the display name never changes between versions. - An application record keeps the pair
templateName(azure.ad) andtemplateVersion(3.4). The key3_4-azure-adis only the object key in the catalog. templateTypeisEnterpriseon 112 of 125 entries and is not consistent in case (SAML,wsfed); Microsoft 365 is a WS-Fed SSO template typedEnterprise. What a template provides is better read fromcapabilities(provisioning CRUD, SSO protocols), the connector block andtarget.dateUpdatedcomes in four formats and does not follow the version order (AS400 1.1 is older than 1.0; SCIM 2.3 is older than 2.2). Newest is decided by the version number; dates are shown as ISO and never used to order.bundleVersionis the connector version range the template needs (ServiceNow 3.3[1.5.20.14, 1.5.20.31), 4.0[1.5.20.30, 1.6.0.0)).categoriesalways holds one value; 26 of 125 areUncategorized. Show what the catalog says.- 18 entries have no connector (consumer templates and Microsoft 365 WS-Fed);
bookmarkhas nocapabilities.
Decisions (maintainer, 2026-11-13)
- The change is CLI-only: the summary is presentation. It moves to the library only if another command (a future
frodo app validate) needs it. listshows the newest version of each template (51 rows).list --all-versionsshows every version.- The handle is the real id (
azure.ad, theidfield of the catalog and thetemplateNameof an application) together with the version.--all-versionskeeps printing whatlistprinted before this change (one line per version, with the version id such as3_4-azure-ad), anddescribe -itakes both forms: the bare id (newest version, or-v) and the version id. -i/--template-id <id>takes the id;-v/--template-version <version>selects another version than the newest;-n/--template-name <display name>takes the display name (case-insensitive). Ids accept dots or hyphens, any case.- No filters in this round.
Proposal
frodo app template list: the ids, one per line, newest version of each template.
frodo app template list -l (98 columns wide on the live catalog, nothing truncated):
Id │Name │Category │Prov│Ver │Updated
active.directory │Active Directory │IT infrastructure│P │2.5* │2024-12-11
aws.bedrock │AWS Bedrock │AI Services │AP │1.0 │2026-05-15
azure.ad │Microsoft Entra │Uncategorized │P │3.4* │2026-08-19
saml │SAML │saml │S │1.3* │2026-02-05
P provisioning A AI target S SAML O OIDC F WS-Fed T WS-Trust B bookmark * older versions exist
Prov is one letter per capability; * behind the version means older versions exist (describe lists them). The connector is not a column of the list; describe shows it.
frodo app template list --all-versions (with or without -l): exactly what list and list -l printed before this change: one line per version with the version id (3_4-azure-ad), and with -l the nine-column table.
frodo app template describe -i azure.ad [-v 3.1] or describe -i 3_1-azure-ad (the bare id means the newest version; the version id means that version; no tenant needed):
- Header: display name, id, group, category, what it provides, version (newest or not), ISO date, description, support URL.
- Versions: every version with date, connector range, object type and property counts, and a marker for the one shown.
- Connector (if any): display name, class, bundle and range, paging type, the basic and advanced configuration fields (required ones marked), prerequisites titles.
- Capabilities: create/read/update/delete, SSO protocols, incremental reconciliation property, target, OAuth flow.
- Object types: name, native type, managed resource, property count, required count.
- Application form: sections of
schemawith field counts. -ladds the properties of each object type and the labels of the form fields.--jsonstays the whole entry.
Derived Prov letters: A when target is set, P for a connector with a provisioning capability, S/O/F/T for the SSO protocols in capabilities.sso (SAML, OIDC, WS-Fed, WS-Trust), B for the bookmark template.
Notes for the implementation
- Read every field defensively: templates the tenant defines are not validated by the library.
- Unknown or unparsable dates are printed as they are.
- Without a connector the Connector sections are left out; without
capabilitiesthe Capabilities section is left out. - Tests are hermetic: a small fixture catalog with a multi-version template, a template with no connector, an SSO template, a tenant override and a template with an odd date.
- README and the help text of the three commands; the recordings of these commands (not done yet) wait for this change.
Activity