
Read the privacy facts from the application
The application already declares how its records are handled. Wildo can read those declarations back instead of asking a document drafter to reconstruct them from a product description.
The result separates framework-owned resources from application-owned resources. It also keeps personal-data handling, session identity and available rights mechanisms distinct, so one answer cannot quietly stand in for another.
Example — Explain what happens to a contact record
A customer contact may carry personal information without having a login. The introspection result can describe its erasure treatment and export declaration while correctly reporting that there is no associated login session to end.
For engineers
Read each resource through the same projection
readCompliancePrimaryResourceFacts receives the loaded resource configuration. Its result comes directly from named declaration fields and the personal-data category resolver, rather than a language-model inference.
export function readCompliancePrimaryResourceFacts(
resourceType: string,
origin: CompliancePrimaryFactOrigin,
configuration: ComplianceRelevantConfiguration,
): CompliancePrimaryResourceFacts {
const systemAccessPolicy = configuration.systemAccessPolicy;
const categoryProfile = resolveResourcePersonalDataCategories(configuration.mainSchema);
return {
resourceType,
origin,
...(configuration.retentionPolicy?.mode === undefined ? {} : { erasureRetentionMode: configuration.retentionPolicy.mode }),
...(configuration.dataSubjectPolicy?.kind === undefined ? {} : { dataSubjectKind: configuration.dataSubjectPolicy.kind }),
declaresSubjectExport: systemAccessPolicy?.exportSubject !== undefined,
declaresRetainedSeeThrough: systemAccessPolicy?.seeRetained !== undefined,
personalDataCategories: categoryProfile.categories,
uncategorizedPersonalFields: categoryProfile.uncategorizedPersonalFields,
};
}
Give each output its proper meaning
erasureRetentionMode answers what happens to the row. dataSubjectKind identifies the session-related subject axis. declaresSubjectExport and declaresRetainedSeeThrough report whether the corresponding declaration is present. Both are also true for an explicit FORBIDDEN declaration: they do not mean the operation is allowed. Read the resource’s actual policy before describing availability; neither flag shows that a request has been exercised. Field categories describe the data declared in the schema, including fields still needing classification.
projectCompliancePrimaryFacts aggregates these values with separate engine/application origins. Stable category ordering avoids changing document prose merely because resource iteration order changes. An undeclared resource is distinct from an explicit declaration of no personal data.
Connect the projection to authoring
The companion requests the backend behavior named compliance-primary-facts. A playbook selecting COMPLIANCE_PRIMARY_FACTS receives that result in its brief. In this required context path, a missing backend or unsuccessful result stops fact drafting instead of replacing source facts with guessed prose. The facts playbook consumes mechanism declarations; the later document drafter consumes the resulting declared facts. Reading the loaded application configuration establishes what it declares, not operating effectiveness.