{"schemaVersion":"1.1","contract":"openacai-app-config","schemaUrl":"https://openacai.ong/.well-known/openacai-app-config-schema.json","generatedAtUtc":"2026-07-07T19:48:58.5557032Z","status":"active","releaseChannel":"web-first","configRevision":"2026.07.07-capability-policy","minimumClient":{"android":"0.1.0","ios":"0.1.0","web":"2026.07"},"compatibilityPolicy":{"contractUrl":"https://openacai.ong/.well-known/openacai-client-compatibility.json","decisionEndpoint":"https://openacai.ong/api/v1/mobile/compatibility/decision","updatePolicyUrl":"https://openacai.ong/.well-known/openacai-client-update-policy.json","releaseChannelsUrl":"https://openacai.ong/.well-known/openacai-release-channels.json","requiredContractSet":"2026.07","defaultDecision":"degraded","allowedSurfaces":["web-pwa","android","ios"],"requestHintHeaders":["X-OpenACAI-Client-Surface","X-OpenACAI-Client-Version","X-OpenACAI-Contract-Set","X-OpenACAI-App-Config-Revision"],"sendPublicHintsOnly":true,"neverSendDeviceIdentifiers":true,"neverSendPii":true,"applyFeatureFlagsOnlyAfterSupportedDecision":true,"disableNativeOnlyFeaturesWhenDegraded":true,"keepPublicResourcesAvailableWhenDegraded":true,"staleCompatibilityWarningHours":24,"hardDegradeAfterHours":72},"startupOrder":["mobile-bootstrap","native-startup","mobile-package","developer-handoff","public-exports","client-compatibility","client-update-policy","release-channels","anti-abuse","security-policy","data-safety","account-data","social-readiness","identity-readiness","community-safety","notification-policy","native-permissions","app-integrity","design-system","accessibility","cache-policy","offline-bundle","measurement-policy","client-diagnostics","performance-budget","api-client-policy","ad-grants-readiness","route-manifest","service-status","continuity","resilience-policy","native-release","app-store-readiness","app-links","app-config-schema","app-config","client-readiness","edge-security-readiness","edge-operations","tunnel-readiness","access-readiness","storage-readiness","resource-manifest","resource-index","resource-quality","resource-feedback-policy","resource-delta","resource-search","service-area","help-guides","help-planner","forms-library","form-packets","games-catalog","evidence-library","intake-policy","intake-schema"],"endpoints":{"publicWebsite":"https://openacai.com","publicApi":"https://openacai.ong","mobileBootstrap":"https://openacai.ong/.well-known/openacai-mobile.json","nativeStartup":"https://openacai.ong/.well-known/openacai-native-startup.json","mobilePackage":"https://openacai.ong/.well-known/openacai-mobile-package.json","developerHandoff":"https://openacai.ong/.well-known/openacai-developer-handoff.json","clientCompatibility":"https://openacai.ong/.well-known/openacai-client-compatibility.json","clientCompatibilityDecision":"https://openacai.ong/api/v1/mobile/compatibility/decision","clientUpdatePolicy":"https://openacai.ong/.well-known/openacai-client-update-policy.json","releaseChannels":"https://openacai.ong/.well-known/openacai-release-channels.json","antiAbuse":"https://openacai.ong/.well-known/openacai-anti-abuse.json","securityPolicy":"https://openacai.ong/.well-known/openacai-security-policy.json","dataSafety":"https://openacai.ong/.well-known/openacai-data-safety.json","accountData":"https://openacai.ong/.well-known/openacai-account-data.json","socialReadiness":"https://openacai.ong/.well-known/openacai-social-readiness.json","identityReadiness":"https://openacai.ong/.well-known/openacai-identity-readiness.json","communitySafety":"https://openacai.ong/.well-known/openacai-community-safety.json","notificationPolicy":"https://openacai.ong/.well-known/openacai-notification-policy.json","nativePermissions":"https://openacai.ong/.well-known/openacai-native-permissions.json","appIntegrity":"https://openacai.ong/.well-known/openacai-app-integrity.json","designSystem":"https://openacai.ong/.well-known/openacai-design-system.json","accessibility":"https://openacai.ong/.well-known/openacai-accessibility.json","cachePolicy":"https://openacai.ong/.well-known/openacai-cache-policy.json","offlineBundle":"https://openacai.ong/.well-known/openacai-offline-bundle.json","measurementPolicy":"https://openacai.ong/.well-known/openacai-measurement-policy.json","clientDiagnostics":"https://openacai.ong/.well-known/openacai-client-diagnostics.json","performanceBudget":"https://openacai.ong/.well-known/openacai-performance-budget.json","resiliencePolicy":"https://openacai.ong/.well-known/openacai-resilience-policy.json","apiClientPolicy":"https://openacai.ong/.well-known/openacai-api-client-policy.json","adGrantsReadiness":"https://openacai.ong/.well-known/openacai-ad-grants-readiness.json","routeManifest":"https://openacai.ong/.well-known/openacai-route-manifest.json","serviceStatus":"https://openacai.ong/.well-known/openacai-service-status.json","continuity":"https://openacai.ong/.well-known/openacai-continuity.json","nativeRelease":"https://openacai.ong/.well-known/openacai-native-release.json","appStoreReadiness":"https://openacai.ong/.well-known/openacai-app-store-readiness.json","appConfig":"https://openacai.ong/.well-known/openacai-app-config.json","appConfigSchema":"https://openacai.ong/.well-known/openacai-app-config-schema.json","mobileContractVerification":"https://openacai.ong/.well-known/openacai-mobile-contract-verification.json","clientReadiness":"https://openacai.ong/.well-known/openacai-client-readiness.json","appLinks":"https://openacai.ong/.well-known/openacai-app-links.json","edgeCapabilities":"https://openacai.ong/.well-known/openacai-edge-capabilities.json","edgeSecurityReadiness":"https://openacai.ong/.well-known/openacai-edge-security-readiness.json","edgeOperations":"https://openacai.ong/.well-known/openacai-edge-operations.json","tunnelReadiness":"https://openacai.ong/.well-known/openacai-tunnel-readiness.json","accessReadiness":"https://openacai.ong/.well-known/openacai-access-readiness.json","storageReadiness":"https://openacai.ong/.well-known/openacai-storage-readiness.json","platformHealth":"https://openacai.ong/.well-known/openacai-platform-health.json","openApi":"https://openacai.ong/openapi.json","resourcesJson":"https://openacai.com/resources.json","resourcesCsv":"https://openacai.com/resources.csv","resourceManifest":"https://openacai.ong/.well-known/openacai-resource-manifest.json","resourceIndex":"https://openacai.ong/.well-known/openacai-resource-index.json","resourceQuality":"https://openacai.ong/.well-known/openacai-resource-quality.json","resourceFeedbackPolicy":"https://openacai.ong/.well-known/openacai-resource-feedback-policy.json","resourceDelta":"https://openacai.ong/.well-known/openacai-resource-delta.json","resourceSearch":"https://openacai.ong/.well-known/openacai-resource-search.json","resourceTaxonomy":"https://openacai.ong/.well-known/openacai-resource-taxonomy.json","serviceArea":"https://openacai.ong/.well-known/openacai-service-area.json","helpGuides":"https://openacai.ong/.well-known/openacai-help-guides.json","helpPlanner":"https://openacai.ong/.well-known/openacai-help-planner.json","publicExports":"https://openacai.ong/.well-known/openacai-public-exports.json","formsLibrary":"https://openacai.ong/.well-known/openacai-forms-library.json","formPackets":"https://openacai.ong/.well-known/openacai-form-packets.json","formsJson":"https://openacai.com/forms.json","formsCsv":"https://openacai.com/forms.csv","gamesCatalog":"https://openacai.ong/.well-known/openacai-games-catalog.json","evidenceLibrary":"https://openacai.ong/.well-known/openacai-evidence-library.json","intakePolicy":"https://openacai.ong/.well-known/openacai-intake-policy.json","intakeSchema":"https://openacai.ong/.well-known/openacai-intake-schema.json","gamhonProfile":"https://openacai.com/gamhon-profile/","contact":"https://openacai.com/contact/","donate":"https://openacai.com/donate/","volunteer":"https://openacai.com/volunteer/","privacy":"https://openacai.com/privacy-policy/"},"featureFlags":{"publicResourceDirectory":true,"offlineResourceSearch":true,"resourceDeltaSync":true,"resourceQualityContract":true,"resourceFeedbackPolicyContract":true,"deviceLocalSavedResources":true,"helpGuideNavigation":true,"helpPlannerContract":true,"publicExportsCatalog":true,"formsLibraryContract":true,"formPacketsContract":true,"gamesCatalogContract":true,"evidenceLibraryContract":true,"countyFilter":true,"statewideResourceHandling":true,"webContactFallback":true,"intakeSchemaContract":true,"nativeReleaseContract":true,"appStoreReadinessContract":true,"developerHandoffContract":true,"remoteCapabilityPolicy":true,"cloudflareDeliveryPolicy":true,"clientCompatibilityContract":true,"clientFeatureNegotiation":true,"compatibilityDecisionRequired":true,"clientUpdatePolicyContract":true,"releaseChannelsContract":true,"antiAbuseContract":true,"securityPolicyContract":true,"dataSafetyContract":true,"accountDataContract":true,"socialReadinessContract":true,"identityReadinessContract":true,"communitySafetyContract":true,"privateProfilePreferences":true,"gamhonProfileScreen":true,"gamhonProfileCardExport":true,"publicSocialProfiles":false,"friendGraph":false,"directMessages":false,"onlineRooms":false,"nativeSocialSignIn":false,"notificationPolicyContract":true,"nativePermissionsContract":true,"appIntegrityContract":true,"designSystemContract":true,"accessibilityContract":true,"cachePolicyContract":true,"offlineBundleContract":true,"measurementPolicyContract":true,"clientDiagnosticsPolicyContract":true,"clientDiagnosticsUpload":false,"performanceBudgetContract":true,"resiliencePolicyContract":true,"apiClientPolicyContract":true,"adGrantsReadinessContract":true,"routeManifestContract":true,"serviceStatusContract":true,"continuityContract":true,"edgeSecurityReadinessContract":true,"edgeOperationsContract":true,"tunnelReadinessContract":true,"accessReadinessContract":true,"storageReadinessContract":true,"directNativeIntake":false,"authenticatedCaseStatus":false,"secureFileUpload":false,"partnerPortalInNativeApp":false,"staffPortalInNativeApp":false,"nativePushNotifications":false,"universalLinks":false,"appStorePrompt":false},"featureEvaluation":{"evaluateInOrder":["client-compatibility-decision","mobile-package-hash-validation","app-config-schema","client-readiness","client-update-policy","release-channels","service-status","data-safety","security-policy","native-permissions","app-integrity","design-system","client-diagnostics","performance-budget","api-client-policy","resilience-policy","community-safety","identity-readiness","storage-readiness","feature-flags","capability-policy"],"defaultMode":"public-web-fallback","unknownFeatureDefault":false,"nativeOnlyFeatureDefault":false,"publicReadOnlyFeatureDefault":true,"requireSupportedCompatibilityDecision":true,"requireSchemaValidation":true,"requirePackageHashValidation":true,"killSwitchesOverrideFeatureFlags":true,"requireCloudflareAccessForPrivateFeatures":true,"keepCrisisAndEmergencyLinksAvailable":true,"neverEnableByQueryStringLocalStorageOrUserInput":true,"failureBehavior":"Keep public resources/help/forms available, open contact as public web, and hide native-only or private features."},"capabilityPolicy":{"capabilities":[{"id":"publicResourceDirectory","enabled":true,"category":"public-help","surfaces":["web-pwa","android","ios"],"offlineSafe":true,"requires":["mobile-package","resource-manifest","resource-index","resource-quality"],"failureBehavior":"Use last-known-good public resources and show data age."},{"id":"offlineResourceSearch","enabled":true,"category":"public-help","surfaces":["web-pwa","android","ios"],"offlineSafe":true,"requires":["offline-bundle","resource-search","cache-policy"],"failureBehavior":"Fall back to online resources page."},{"id":"formsLibrary","enabled":true,"category":"public-help","surfaces":["web-pwa","android","ios"],"offlineSafe":true,"requires":["forms-library","form-packets"],"failureBehavior":"Open the public Forms page."},{"id":"gamesCatalog","enabled":true,"category":"public-gamhon","surfaces":["web-pwa","android","ios"],"offlineSafe":true,"requires":["games-catalog","community-safety"],"failureBehavior":"Show single-device games only."},{"id":"gamhonProfile","enabled":true,"category":"public-gamhon","surfaces":["web-pwa","android","ios"],"offlineSafe":true,"requires":["social-readiness","community-safety"],"failureBehavior":"Keep profile preferences local and hide public social surfaces."},{"id":"webContactFallback","enabled":true,"category":"contact","surfaces":["web-pwa","android","ios"],"offlineSafe":false,"requires":["anti-abuse","intake-policy","intake-schema"],"failureBehavior":"Open public contact page externally and never cache submissions."},{"id":"clientDiagnosticsPolicy","enabled":true,"category":"diagnostics","surfaces":["web-pwa","android","ios"],"offlineSafe":true,"requires":["client-diagnostics","data-safety","measurement-policy"],"failureBehavior":"Keep diagnostics local only and hide upload controls."},{"id":"designSystemPolicy","enabled":true,"category":"design","surfaces":["web-pwa","android","ios"],"offlineSafe":true,"requires":["design-system","accessibility"],"failureBehavior":"Use local fallback tokens, respect accessibility defaults, and keep public help usable."},{"id":"performanceBudgetPolicy","enabled":true,"category":"performance","surfaces":["web-pwa","android","ios"],"offlineSafe":true,"requires":["performance-budget","mobile-package","cache-policy"],"failureBehavior":"Fetch critical documents first, defer optional contracts, and keep last-known-good public data."},{"id":"apiClientPolicy","enabled":true,"category":"api","surfaces":["web-pwa","android","ios"],"offlineSafe":true,"requires":["api-client-policy","anti-abuse","resilience-policy","performance-budget"],"failureBehavior":"Use bounded public GET retries, honor Retry-After, keep web contact fallback, and hide private endpoints."},{"id":"resiliencePolicy","enabled":true,"category":"resilience","surfaces":["web-pwa","android","ios"],"offlineSafe":true,"requires":["resilience-policy","service-status","continuity","cache-policy"],"failureBehavior":"Use bounded retries, last-known-good public documents, web contact fallback, and external-browser private portals only."},{"id":"clientDiagnosticsUpload","enabled":false,"category":"diagnostics","surfaces":["android","ios"],"offlineSafe":false,"requires":["client-diagnostics","anti-abuse","future-consent-review"],"disabledReason":"Diagnostics upload is disabled until consent, abuse controls, retention, and PII validation are complete."},{"id":"directNativeIntake","enabled":false,"category":"native-only","surfaces":["android","ios"],"offlineSafe":false,"requires":["anti-abuse","intake-policy","future-native-intake-review"],"disabledReason":"Public web contact remains the only intake path until abuse, consent, and app-review gates are complete."},{"id":"secureFileUpload","enabled":false,"category":"private-case","surfaces":["android","ios"],"offlineSafe":false,"requires":["storage-readiness","cloudflare-access","malware-scan-policy"],"disabledReason":"Case files require private authenticated workflows and must never enter public app caches."},{"id":"authenticatedCaseStatus","enabled":false,"category":"private-case","surfaces":["web-pwa","android","ios"],"offlineSafe":false,"requires":["cloudflare-access","account-data","case-rbac"],"disabledReason":"Case status remains private portal only."},{"id":"nativePushNotifications","enabled":false,"category":"notifications","surfaces":["android","ios"],"offlineSafe":false,"requires":["notification-policy","push-provider","consent-review"],"disabledReason":"Push is disabled until delivery, consent, quiet-hours, and privacy policy are configured."},{"id":"nativeDangerousPermissions","enabled":false,"category":"privacy","surfaces":["android","ios"],"offlineSafe":false,"requires":["native-permissions","data-safety","app-store-readiness"],"disabledReason":"Dangerous Android/iOS permissions are disabled until a future reviewed contract explicitly enables each permission."},{"id":"privateNativeApiAccess","enabled":false,"category":"private-case","surfaces":["android","ios"],"offlineSafe":false,"requires":["app-integrity","access-readiness","identity-readiness","storage-readiness"],"disabledReason":"Private native API access remains disabled until server-verified app attestation, Cloudflare Access/RBAC, and privacy review are complete."},{"id":"publicSocialProfiles","enabled":false,"category":"social","surfaces":["web-pwa","android","ios"],"offlineSafe":false,"requires":["identity-readiness","community-safety","moderation"],"disabledReason":"Public profiles require moderation, reporting, and youth-safety gates."},{"id":"directMessages","enabled":false,"category":"social","surfaces":["web-pwa","android","ios"],"offlineSafe":false,"requires":["community-safety","reporting","block-mute","moderation"],"disabledReason":"Messaging is disabled until safety and moderation controls are complete."},{"id":"onlineRooms","enabled":false,"category":"social","surfaces":["web-pwa","android","ios"],"offlineSafe":false,"requires":["community-safety","moderation","room-rules"],"disabledReason":"Online rooms remain gated."},{"id":"nativeSocialSignIn","enabled":false,"category":"identity","surfaces":["android","ios"],"offlineSafe":false,"requires":["identity-readiness","oauth-pkce","provider-registration"],"disabledReason":"Native OAuth is disabled until PKCE/provider gates are ready."},{"id":"universalLinks","enabled":false,"category":"native-links","surfaces":["android","ios"],"offlineSafe":false,"requires":["app-links","app-store-readiness"],"disabledReason":"Native app links wait on production app identifiers and reviewed association files."},{"id":"appStorePrompt","enabled":false,"category":"native-links","surfaces":["web-pwa"],"offlineSafe":false,"requires":["app-store-readiness","app-links"],"disabledReason":"No store prompt until app IDs, store listings, and reviewed app links exist."}],"disabledFeatureIds":["clientDiagnosticsUpload","directNativeIntake","secureFileUpload","authenticatedCaseStatus","nativePushNotifications","nativeDangerousPermissions","privateNativeApiAccess","publicSocialProfiles","directMessages","onlineRooms","nativeSocialSignIn","universalLinks","appStorePrompt"],"publicSafeFeatureIds":["publicResourceDirectory","offlineResourceSearch","formsLibrary","gamesCatalog","gamhonProfile","webContactFallback","clientDiagnosticsPolicy","designSystemPolicy","performanceBudgetPolicy","apiClientPolicy","resiliencePolicy"],"privateFeatureDefault":false,"unknownCapabilityDefault":false,"requireContractEvidenceForEnabledCapabilities":true},"rolloutPolicy":{"mode":"contract-gated","percentRolloutAllowed":false,"cohortRolloutAllowed":false,"deviceIdBucketingAllowed":false,"userEmailBucketingAllowed":false,"manualEnableRequiresContractChange":true,"nativeStorePromptRequiresAppStoreReadiness":true,"nativeAppLinksRequireActivationGates":true,"rollbackToLastKnownGood":true,"publicFeatureRollbackKeepsWebFallback":true},"cloudflareDelivery":{"host":"openacai.ong","cacheMode":"public-edge-and-device","edgeCacheAllowed":true,"sharedCacheAllowed":true,"browserCacheSeconds":120,"edgeCacheSeconds":600,"staleWhileRevalidateSeconds":3600,"cacheKeyIncludesUserHints":false,"setCookieAllowed":false,"privateRoutesBypassCache":true,"purgeRequiredOnConfigRevisionChange":true,"signedExchangeRequired":false,"polishOrImageTransformsRequired":false,"safeForCloudflareTieredCache":true},"screenDefaults":{"firstLaunchScreen":"help-guides","defaultResourceSort":"need-then-title","defaultCountyMode":"ask-on-first-filter","showEmergencyNoticeOnCrisisSafety":true,"showResourceReviewDates":true,"showOfflineDataAge":true,"openContactAsExternalWeb":true,"hideNativeOnlyFeaturesUntilEnabled":true,"requireIdentityReadinessBeforeSignInUi":true,"hidePublicProfileDirectory":true,"hideDirectMessages":true,"gamhonProfile":{"route":"gamhon-profile","nativeScreen":"GamhonProfile","webFallback":"https://openacai.com/gamhon-profile/","requiresSignIn":false,"offlineSafe":true,"publicProfileDirectoryEnabled":false,"directMessagesEnabled":false,"onlineRoomsEnabled":false}},"refreshPolicy":{"bootstrapMaxAgeSeconds":600,"appConfigMaxAgeSeconds":600,"mobilePackageRefreshHours":12,"resourceManifestRefreshHours":12,"contractVerificationRefreshMinutes":15,"platformHealthRefreshMinutes":15,"serviceStatusRefreshMinutes":5,"useLastKnownGoodOnFailure":true,"replaceDocumentsAtomically":true,"validateSchemaBeforeApplyingConfig":true,"validateSha256FromPackage":true,"requireFreshUpdatePolicyBeforeForcedUpdate":true},"storagePolicy":{"publicDocuments":"May be cached on device after package hash validation.","savedResources":"Device-local only unless a future signed-in sync feature explicitly asks the user.","searchHistory":"Do not store by default.","contactDrafts":"Device-local only and user controlled.","diagnostics":"Device-local troubleshooting summaries only. Upload is disabled until a future policy explicitly enables it.","performanceBudgets":"Device-safe public budget contract used to defer optional downloads and keep startup responsive.","resiliencePolicy":"Device-safe public contract used to choose retry, offline, fallback, and protected-route behavior.","privateCaseData":"Never store in public mobile or PWA caches."},"privateOriginPolicy":{"tunnelReadinessUrl":"https://openacai.ong/.well-known/openacai-tunnel-readiness.json","accessReadinessUrl":"https://openacai.ong/.well-known/openacai-access-readiness.json","storageReadinessUrl":"https://openacai.ong/.well-known/openacai-storage-readiness.json","edgeSecurityReadinessUrl":"https://openacai.ong/.well-known/openacai-edge-security-readiness.json","edgeOperationsUrl":"https://openacai.ong/.well-known/openacai-edge-operations.json","resiliencePolicyUrl":"https://openacai.ong/.well-known/openacai-resilience-policy.json","keepStaffAndPartnerRoutesWebOnly":true,"requireCloudflareAccessBeforePrivateScreens":true,"requireStorageReadinessBeforeFileScreens":true,"publishNoTunnelIdsTokensOrOriginAddresses":true,"neverCachePrivateFilesInNativeOrPwaCaches":true,"nativePrivatePortalScreens":"future gated release only"},"analyticsPolicy":{"policyUrl":"https://openacai.ong/.well-known/openacai-measurement-policy.json","diagnosticsPolicyUrl":"https://openacai.ong/.well-known/openacai-client-diagnostics.json","performanceBudgetUrl":"https://openacai.ong/.well-known/openacai-performance-budget.json","resiliencePolicyUrl":"https://openacai.ong/.well-known/openacai-resilience-policy.json","requireMeasurementPolicyBeforeEvents":true,"requireDiagnosticsPolicyBeforeDiagnosticsUi":true,"requirePerformanceBudgetBeforeBulkFetch":true,"requireResiliencePolicyBeforeNetworkHeavyWork":true,"diagnosticsUploadEnabled":false,"enabledByDefault":false,"allowedEvents":["screen_view","resource_copy","resource_print","resource_share","resource_export","forms_print","forms_copy","forms_save_local","forms_clear_local","forms_select","forms_official_open","game_start","game_complete","game_session_plan","game_progress_clear","game_display_setting","game_rules_copy","contact_web_click","donation_click","volunteer_click","account_profile_export","account_gamhon_card_export","evidence_source_open","website_standards_view"],"forbiddenFields":["name","email","phone","message","searchText","preciseLocation","caseNumber","caseNotes","uploadedFileName"]},"safety":{"emergencyNotice":"OpenACAI apps and websites are not emergency services. Call 911 for immediate danger and call or text 988 for emotional crisis support in the United States.","crisisGuideOnlinePreferred":true,"neverReplaceEmergencyInstructionsWithCachedOnlyData":true,"publicContactRequiresNetwork":true},"privacy":{"publicOnly":true,"containsSecrets":false,"containsPrivateCaseData":false,"containsHelpSeekerMessages":false,"safeForDeviceCache":true}}