v0.1.25 — description capture
Headline: the org's <description> text is now captured and queryable. Four
metadata types silently dropped their descriptions; now every type that carries
one keeps it, and a new missingDescription filter answers "which reports /
objects / permission sets are undocumented?" — previously an honest gap.
Upgrade note: the description is captured at extraction time, so run
sfi refreshonce on 0.1.25 to backfill descriptions into an existing vault.
Added
- Description capture across every metadata type that carries one. The
org's top-level<description>is now extracted intonode.properties.description
for the four generic metadata types that previously dropped it —Report,
Dashboard,ReportType, andPermissionSetGroup(extractReport,
extractDashboard,extractReportType,extractPermissionSetGroupin
enterprise-metadata.tsnow passextraProperties: ['description']). The
seven custom extractors (CustomObject,CustomField,PermissionSet,
Profile,Flow,ValidationRule,RecordType) plusCustomTaband
CustomApplicationalready captured it. The description renders as a paragraph
in the component markdown (unchanged renderer). Verified offline against a real
~1,300-object source tree: captured counts match the source's
files-with-<description>ground truth exactly for every generic type (Report
221, Dashboard 17, PermissionSetGroup 16, plus CustomField 1315, ValidationRule
306, PermissionSet 159, RecordType 86, CustomObject 75). Only the genuine
top-level<description>is captured — nested element-level descriptions (e.g.
a Flow decision's own<description>) are intentionally excluded, and Profiles
capture their single real top-level description with no fabrication. list_componentsdocumentation-coverage filter. NewmissingDescription
/hasDescriptionboolean flags answer "which reports / objects / permission
sets / validation rules have no description?" — previously an honest gap. Backed
by adescriptionPresence: 'present' | 'absent'narrow in the graph layer
(queries.ts) that folds key-absent, JSON-null, and empty-string all into one
honest "absent" bucket viacoalesce(json_extract_string(...,'$.description'),'').
The narrow is applied to both the page query and the authoritative
countNodesByTypetotal; the two flags are mutually exclusive (invalid-query
guard). Honesty caveat, disclosed in the tool description: for a type whose
source carries no<description>element at all (ListView,CustomPermission,
MutingPermissionSet,CustomMetadata),missingDescriptionmatches every
node — the answer means "no description in this metadata type", not "left blank".