@produtype/core 0.76.0 → 0.77.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -354,6 +354,17 @@ async function detectMobile(ctx) {
354
354
  {
355
355
  key: 'mobile.privacyDeclaration',
356
356
  present: privacyFiles.length > 0,
357
+ /**
358
+ * On Android the declaration is not in the repository, and never was.
359
+ *
360
+ * Apple has required `PrivacyInfo.xcprivacy` in the bundle since 2024, so an iOS
361
+ * project either has the file or has not made the declaration. Play's data-safety
362
+ * form is filled in the console: there is no committed artifact to find, and no
363
+ * convention that puts one in the tree. thunderbird-android was told it was
364
+ * missing a file it has no way to have — a question this analyzer cannot ask
365
+ * rather than an answer of no.
366
+ */
367
+ unanswered: privacyFiles.length === 0 && !platforms.includes('ios'),
357
368
  evidence: (0, absenceEvidence_1.evidenceOrSearch)(privacyFiles.map((file) => ({ type: 'file', value: file, file })), 'the privacy declaration the stores require', ['PrivacyInfo.xcprivacy', 'a data-safety declaration', 'privacy_policy', 'PRIVACY.md']),
358
369
  },
359
370
  ];
@@ -224,6 +224,16 @@ function deriveStatus(analysis, capability) {
224
224
  return 'present';
225
225
  if (matches.some((m) => m.present))
226
226
  return 'partial';
227
+ /**
228
+ * Nothing found, and at least one detector says it could not look.
229
+ *
230
+ * The specific rules in `rules.ts` grew this in 0.74.0 one claim at a time; this
231
+ * is the same rule for every capability that reaches the generic path. A finding
232
+ * is only ever weakened by it: `present` and `partial` are decided above, so
233
+ * blindness can turn `missing` into `unknown` and nothing else.
234
+ */
235
+ if (matches.some((m) => m.unanswered))
236
+ return 'unknown';
227
237
  return 'missing';
228
238
  }
229
239
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@produtype/core",
3
- "version": "0.76.0",
3
+ "version": "0.77.0",
4
4
  "description": "Deterministic CLI and library that analyzes a web application repository and reports how far it is from production-ready for the kind of product it is meant to be.",
5
5
  "license": "MIT",
6
6
  "bin": {