native-update 1.4.9 → 3.1.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.
Files changed (265) hide show
  1. package/Readme.md +35 -9
  2. package/android/manifest-additions.xml +28 -0
  3. package/android/src/main/AndroidManifest.xml +3 -7
  4. package/android/src/main/java/com/aoneahsan/nativeupdate/BackgroundNotificationManager.kt +21 -13
  5. package/android/src/main/java/com/aoneahsan/nativeupdate/BackgroundUpdatePlugin.kt +15 -0
  6. package/android/src/main/java/com/aoneahsan/nativeupdate/BackgroundUpdateWorker.kt +23 -7
  7. package/android/src/main/java/com/aoneahsan/nativeupdate/LiveUpdatePlugin.kt +346 -31
  8. package/android/src/main/java/com/aoneahsan/nativeupdate/NativeUpdatePlugin.kt +32 -34
  9. package/android/src/main/java/com/aoneahsan/nativeupdate/NotificationActionReceiver.kt +10 -1
  10. package/android/src/main/java/com/aoneahsan/nativeupdate/SecurityManager.kt +18 -18
  11. package/cli/AGENTS.md +43 -0
  12. package/cli/CLAUDE.md +65 -0
  13. package/cli/commands/backend-create.js +56 -15
  14. package/cli/commands/bundle-create.js +39 -7
  15. package/cli/commands/monitor.js +72 -51
  16. package/cli/index.js +10 -24
  17. package/cli/package.json +11 -3
  18. package/dist/esm/app-review/app-review-manager.js +0 -1
  19. package/dist/esm/app-review/index.js +0 -1
  20. package/dist/esm/app-review/platform-review-handler.js +0 -1
  21. package/dist/esm/app-review/review-conditions-checker.js +0 -1
  22. package/dist/esm/app-review/review-rate-limiter.js +0 -1
  23. package/dist/esm/app-review/types.js +0 -1
  24. package/dist/esm/app-update/app-update-checker.js +0 -1
  25. package/dist/esm/app-update/app-update-installer.d.ts +1 -0
  26. package/dist/esm/app-update/app-update-installer.js +19 -8
  27. package/dist/esm/app-update/app-update-manager.js +0 -1
  28. package/dist/esm/app-update/app-update-notifier.js +0 -1
  29. package/dist/esm/app-update/index.js +0 -1
  30. package/dist/esm/app-update/platform-app-update.js +12 -3
  31. package/dist/esm/app-update/types.js +0 -1
  32. package/dist/esm/background-update/background-scheduler.js +0 -1
  33. package/dist/esm/background-update/index.js +0 -1
  34. package/dist/esm/background-update/notification-manager.js +0 -1
  35. package/dist/esm/config/support.js +0 -1
  36. package/dist/esm/core/analytics.d.ts +13 -0
  37. package/dist/esm/core/analytics.js +15 -1
  38. package/dist/esm/core/cache-manager.js +0 -1
  39. package/dist/esm/core/config.d.ts +6 -30
  40. package/dist/esm/core/config.js +1 -8
  41. package/dist/esm/core/errors.d.ts +1 -0
  42. package/dist/esm/core/errors.js +1 -1
  43. package/dist/esm/core/event-emitter.d.ts +0 -3
  44. package/dist/esm/core/event-emitter.js +8 -3
  45. package/dist/esm/core/logger.js +0 -1
  46. package/dist/esm/core/performance.js +0 -1
  47. package/dist/esm/core/plugin-manager.js +3 -1
  48. package/dist/esm/core/security.d.ts +22 -3
  49. package/dist/esm/core/security.js +46 -7
  50. package/dist/esm/definitions.d.ts +13 -40
  51. package/dist/esm/definitions.js +0 -1
  52. package/dist/esm/index.d.ts +3 -4
  53. package/dist/esm/index.js +3 -3
  54. package/dist/esm/live-update/bundle-manager.d.ts +8 -0
  55. package/dist/esm/live-update/bundle-manager.js +20 -1
  56. package/dist/esm/live-update/certificate-pinning.js +0 -1
  57. package/dist/esm/live-update/delta-processor.d.ts +1 -1
  58. package/dist/esm/live-update/delta-processor.js +3 -1
  59. package/dist/esm/live-update/download-manager.d.ts +36 -5
  60. package/dist/esm/live-update/download-manager.js +70 -24
  61. package/dist/esm/live-update/rollout-checker.d.ts +1 -1
  62. package/dist/esm/live-update/rollout-checker.js +5 -6
  63. package/dist/esm/live-update/update-manager.d.ts +12 -1
  64. package/dist/esm/live-update/update-manager.js +38 -11
  65. package/dist/esm/live-update/version-manager.d.ts +9 -12
  66. package/dist/esm/live-update/version-manager.js +40 -68
  67. package/dist/esm/plugin.js +82 -89
  68. package/dist/esm/security/crypto.js +11 -7
  69. package/dist/esm/security/validator.js +0 -1
  70. package/dist/esm/types/rollout.d.ts +85 -0
  71. package/dist/esm/types/rollout.js +25 -0
  72. package/dist/esm/web.d.ts +26 -1
  73. package/dist/esm/web.js +214 -75
  74. package/dist/plugin.cjs.js +1 -2
  75. package/dist/plugin.esm.js +1 -2
  76. package/dist/plugin.js +2 -3
  77. package/docs/AGENTS.md +38 -0
  78. package/docs/CHANGELOG.md +275 -0
  79. package/docs/CLAUDE.md +101 -0
  80. package/docs/MANUAL-TASKS.md +17 -0
  81. package/docs/MARKETING_WEBSITE_TRACKER.md +18 -2
  82. package/docs/MIGRATION.md +170 -0
  83. package/docs/PACKAGES.md +167 -0
  84. package/docs/PERFORMANCE.md +110 -0
  85. package/docs/PROJECT_COMPLETION_TRACKER.md +4 -35
  86. package/docs/README.md +12 -2
  87. package/docs/REMAINING_FEATURES.md +123 -76
  88. package/docs/ROADMAP.md +200 -120
  89. package/docs/SECURITY-IF-REPO-PUBLIC.md +232 -0
  90. package/docs/TESTING_REQUIREMENTS.md +1 -112
  91. package/docs/ai-knowledge-base/00-project-profile.md +38 -0
  92. package/docs/ai-knowledge-base/01-features.md +46 -0
  93. package/docs/ai-knowledge-base/02-routes.md +72 -0
  94. package/docs/ai-knowledge-base/03-tech-stack.md +57 -0
  95. package/docs/ai-knowledge-base/README.md +23 -0
  96. package/docs/analytics-tracking.md +37 -0
  97. package/docs/capacitor-official-plugins.md +46 -0
  98. package/docs/capawesome-plugins.md +29 -0
  99. package/docs/deployment/HOSTINGER_DEPLOY.md +370 -0
  100. package/docs/deployment/PRODUCTION-DEPLOY-CHECKLIST.md +184 -0
  101. package/docs/docs-site/plan.md +201 -0
  102. package/docs/docs-site/scope.md +127 -0
  103. package/docs/docs-site/tracker.json +235 -0
  104. package/docs/error-handling-tracking.md +37 -0
  105. package/docs/features/laravel-nova-backend/ASSESSMENT-SUMMARY.md +96 -0
  106. package/docs/features/laravel-nova-backend/IMPLEMENTATION-PLAN.md +504 -0
  107. package/docs/features/laravel-nova-backend/progress-tracker.json +184 -0
  108. package/docs/guides/testing-guide.md +15 -41
  109. package/docs/package-audit.md +41 -0
  110. package/docs/play-store/ASO-METADATA.md +5 -0
  111. package/docs/play-store/DATA-SAFETY.md +5 -0
  112. package/docs/play-store/DECLARATIONS.md +5 -0
  113. package/docs/play-store/README.md +27 -0
  114. package/docs/play-store/RELEASE-NOTES.md +99 -0
  115. package/docs/play-store/RELEASE-STEPS.md +6 -0
  116. package/docs/play-store/STORE-LISTING.md +7 -0
  117. package/docs/play-store/SUBMISSION-CHECKLIST.md +5 -0
  118. package/docs/production-readiness.md +1 -1
  119. package/docs/project-audit/2026-05-16/00-FINALIZATION-PLAN.md +123 -0
  120. package/docs/project-audit/2026-05-16/01-BATCH-PLAN.md +227 -0
  121. package/docs/project-audit/2026-05-16/02-AUDIT-FINDINGS.md +144 -0
  122. package/docs/project-audit/2026-05-16/sessions/batch-01.md +42 -0
  123. package/docs/project-audit/2026-05-16/sessions/batch-02.md +74 -0
  124. package/docs/project-audit/2026-05-16/sessions/batch-03.md +71 -0
  125. package/docs/project-audit/2026-05-16/sessions/batch-04.md +88 -0
  126. package/docs/project-audit/2026-05-16/sessions/batch-05.md +63 -0
  127. package/docs/project-audit/2026-05-16/sessions/batch-06.md +103 -0
  128. package/docs/project-audit/2026-05-16/sessions/batch-07.md +61 -0
  129. package/docs/project-audit/2026-05-16/sessions/batch-08.md +101 -0
  130. package/docs/project-audit/2026-05-16/sessions/batch-09.md +105 -0
  131. package/docs/project-audit/2026-05-16/sessions/batch-10.md +102 -0
  132. package/docs/project-audit/AUDIT-HISTORY.md +74 -0
  133. package/docs/project-audit/BATCH-PLAN.md +168 -0
  134. package/docs/project-audit/MARKETING-WEBSITE-FINDINGS-2026-05-11.md +73 -0
  135. package/docs/project-audit/PRODUCTION-READINESS-AUDIT-2026-05-08.md +275 -0
  136. package/docs/project-finalization/00-tracker.json +60 -0
  137. package/docs/project-knowledge-base/01-system-overview.md +227 -0
  138. package/docs/project-knowledge-base/02-routes-pages-forms-users.md +352 -0
  139. package/docs/project-knowledge-base/03-tech-stack-modules-services.md +379 -0
  140. package/docs/project-knowledge-base/04-data-models-integrations.md +244 -0
  141. package/docs/project-knowledge-base/05-docs-corpus-inventory.md +256 -0
  142. package/docs/project-knowledge-base/06-operations-testing-legal-content.md +208 -0
  143. package/docs/project-knowledge-base/README.md +103 -0
  144. package/docs/project-profiles/native-update-capacitor-update-platform-project-profile-last-updated-2026-05-19.md +81 -0
  145. package/docs/rules-tracker.md +102 -0
  146. package/docs/security/PRE-LAUNCH-PENTEST-CHECKLIST.md +116 -0
  147. package/docs/seo-aeo-rules.json +3043 -0
  148. package/docs/social-media-marketing/README.md +81 -0
  149. package/docs/social-media-marketing/posts-batch-01.md +613 -0
  150. package/docs/social-media-marketing/posts-batch-02.md +528 -0
  151. package/docs/social-media-marketing/whatsapp-messages-batch-01.md +458 -0
  152. package/docs/social-media-marketing/whatsapp-status-batch-01.md +355 -0
  153. package/docs/tracking/finalization-2026-05-16-tracker.json +346 -0
  154. package/docs/tracking/full-audit-tracker.json +121 -0
  155. package/docs/tracking/production-readiness-audit-tracker.json +429 -0
  156. package/docs/tracking/seo-checklist-tracker.json +333 -0
  157. package/ios/Plugin/BackgroundUpdate/BackgroundUpdatePlugin.swift +66 -9
  158. package/ios/Plugin/LiveUpdate/LiveUpdatePlugin.swift +306 -52
  159. package/ios/Plugin/NativeUpdatePlugin.swift +22 -9
  160. package/ios/Plugin/Security/SecurityManager.swift +13 -14
  161. package/package.json +37 -38
  162. package/cli/node_modules/.yarn-integrity +0 -16
  163. package/cli/node_modules/commander/LICENSE +0 -22
  164. package/cli/node_modules/commander/Readme.md +0 -1148
  165. package/cli/node_modules/commander/esm.mjs +0 -16
  166. package/cli/node_modules/commander/index.js +0 -26
  167. package/cli/node_modules/commander/lib/argument.js +0 -145
  168. package/cli/node_modules/commander/lib/command.js +0 -2179
  169. package/cli/node_modules/commander/lib/error.js +0 -43
  170. package/cli/node_modules/commander/lib/help.js +0 -462
  171. package/cli/node_modules/commander/lib/option.js +0 -329
  172. package/cli/node_modules/commander/lib/suggestSimilar.js +0 -100
  173. package/cli/node_modules/commander/package-support.json +0 -16
  174. package/cli/node_modules/commander/package.json +0 -80
  175. package/cli/node_modules/commander/typings/esm.d.mts +0 -3
  176. package/cli/node_modules/commander/typings/index.d.ts +0 -884
  177. package/cli/yarn.lock +0 -8
  178. package/dist/esm/__tests__/bundle-manager.test.d.ts +0 -1
  179. package/dist/esm/__tests__/bundle-manager.test.js +0 -151
  180. package/dist/esm/__tests__/bundle-manager.test.js.map +0 -1
  181. package/dist/esm/__tests__/config.test.d.ts +0 -1
  182. package/dist/esm/__tests__/config.test.js +0 -70
  183. package/dist/esm/__tests__/config.test.js.map +0 -1
  184. package/dist/esm/__tests__/delta-processor.test.d.ts +0 -1
  185. package/dist/esm/__tests__/delta-processor.test.js +0 -77
  186. package/dist/esm/__tests__/delta-processor.test.js.map +0 -1
  187. package/dist/esm/__tests__/firestore-schema.test.d.ts +0 -1
  188. package/dist/esm/__tests__/firestore-schema.test.js +0 -74
  189. package/dist/esm/__tests__/firestore-schema.test.js.map +0 -1
  190. package/dist/esm/__tests__/integration.test.d.ts +0 -1
  191. package/dist/esm/__tests__/integration.test.js +0 -78
  192. package/dist/esm/__tests__/integration.test.js.map +0 -1
  193. package/dist/esm/__tests__/manifest-reader.test.d.ts +0 -1
  194. package/dist/esm/__tests__/manifest-reader.test.js +0 -271
  195. package/dist/esm/__tests__/manifest-reader.test.js.map +0 -1
  196. package/dist/esm/__tests__/rollout-checker.test.d.ts +0 -1
  197. package/dist/esm/__tests__/rollout-checker.test.js +0 -210
  198. package/dist/esm/__tests__/rollout-checker.test.js.map +0 -1
  199. package/dist/esm/__tests__/security.test.d.ts +0 -1
  200. package/dist/esm/__tests__/security.test.js +0 -54
  201. package/dist/esm/__tests__/security.test.js.map +0 -1
  202. package/dist/esm/__tests__/version-manager.test.d.ts +0 -1
  203. package/dist/esm/__tests__/version-manager.test.js +0 -45
  204. package/dist/esm/__tests__/version-manager.test.js.map +0 -1
  205. package/dist/esm/app-review/app-review-manager.js.map +0 -1
  206. package/dist/esm/app-review/index.js.map +0 -1
  207. package/dist/esm/app-review/platform-review-handler.js.map +0 -1
  208. package/dist/esm/app-review/review-conditions-checker.js.map +0 -1
  209. package/dist/esm/app-review/review-rate-limiter.js.map +0 -1
  210. package/dist/esm/app-review/types.js.map +0 -1
  211. package/dist/esm/app-update/app-update-checker.js.map +0 -1
  212. package/dist/esm/app-update/app-update-installer.js.map +0 -1
  213. package/dist/esm/app-update/app-update-manager.js.map +0 -1
  214. package/dist/esm/app-update/app-update-notifier.js.map +0 -1
  215. package/dist/esm/app-update/index.js.map +0 -1
  216. package/dist/esm/app-update/platform-app-update.js.map +0 -1
  217. package/dist/esm/app-update/types.js.map +0 -1
  218. package/dist/esm/background-update/background-scheduler.js.map +0 -1
  219. package/dist/esm/background-update/index.js.map +0 -1
  220. package/dist/esm/background-update/notification-manager.js.map +0 -1
  221. package/dist/esm/config/support.js.map +0 -1
  222. package/dist/esm/core/analytics.js.map +0 -1
  223. package/dist/esm/core/cache-manager.js.map +0 -1
  224. package/dist/esm/core/config.js.map +0 -1
  225. package/dist/esm/core/errors.js.map +0 -1
  226. package/dist/esm/core/event-emitter.js.map +0 -1
  227. package/dist/esm/core/logger.js.map +0 -1
  228. package/dist/esm/core/performance.js.map +0 -1
  229. package/dist/esm/core/plugin-manager.js.map +0 -1
  230. package/dist/esm/core/security.js.map +0 -1
  231. package/dist/esm/definitions.js.map +0 -1
  232. package/dist/esm/firestore/firestore-client.d.ts +0 -109
  233. package/dist/esm/firestore/firestore-client.js +0 -264
  234. package/dist/esm/firestore/firestore-client.js.map +0 -1
  235. package/dist/esm/firestore/index.d.ts +0 -11
  236. package/dist/esm/firestore/index.js +0 -11
  237. package/dist/esm/firestore/index.js.map +0 -1
  238. package/dist/esm/firestore/manifest-reader.d.ts +0 -87
  239. package/dist/esm/firestore/manifest-reader.js +0 -294
  240. package/dist/esm/firestore/manifest-reader.js.map +0 -1
  241. package/dist/esm/firestore/schema.d.ts +0 -507
  242. package/dist/esm/firestore/schema.js +0 -73
  243. package/dist/esm/firestore/schema.js.map +0 -1
  244. package/dist/esm/index.js.map +0 -1
  245. package/dist/esm/live-update/bundle-manager.js.map +0 -1
  246. package/dist/esm/live-update/certificate-pinning.js.map +0 -1
  247. package/dist/esm/live-update/delta-processor.js.map +0 -1
  248. package/dist/esm/live-update/download-manager.js.map +0 -1
  249. package/dist/esm/live-update/rollout-checker.js.map +0 -1
  250. package/dist/esm/live-update/update-manager.js.map +0 -1
  251. package/dist/esm/live-update/version-manager.js.map +0 -1
  252. package/dist/esm/plugin.js.map +0 -1
  253. package/dist/esm/security/crypto.js.map +0 -1
  254. package/dist/esm/security/validator.js.map +0 -1
  255. package/dist/esm/web.js.map +0 -1
  256. package/dist/plugin.cjs.js.map +0 -1
  257. package/dist/plugin.esm.js.map +0 -1
  258. package/dist/plugin.js.map +0 -1
  259. package/docs/FIREBASE_INTEGRATION_TRACKER.md +0 -321
  260. package/docs/FIREBASE_QUERIES_AND_INDEXES_AUDIT.md +0 -221
  261. package/docs/examples/firebase-backend-example.md +0 -27
  262. package/docs/guides/no-cost-backend-implementation-plan.md +0 -77
  263. package/docs/guides/no-cost-firestore-google-drive-backend.md +0 -60
  264. package/docs/play-console-rejection-rules.json +0 -428
  265. /package/docs/{MARKETING_WEBSITE_PLAN.md → archive/MARKETING_WEBSITE_PLAN.md} +0 -0
@@ -0,0 +1,74 @@
1
+ # Native Update — Audit & Session History
2
+
3
+ Full chronological record of audits, production-readiness batches, the Docusaurus docs-site batches, and post-closure cleanups. The root `CLAUDE.md` carries only the compact summary + cooldown status; this file holds the verbose per-session detail that was moved out of `CLAUDE.md` on 2026-06-01 to keep that file under the 28 KB harness limit.
4
+
5
+ ## Quick status (as of last close)
6
+
7
+ | Flow | Status | Cooldown lifts |
8
+ |------|--------|----------------|
9
+ | Production-readiness audit (10 batches) | COMPLETE — shipped 2026-05-08 → 2026-05-11 | 2026-05-18 |
10
+ | Public Docusaurus docs site (10 batches) | COMPLETE — shipped 2026-05-11 | 2026-05-18 |
11
+ | 2026-05-16 Finalization audit (10 batches, Play Store) | COMPLETE | 2026-05-23 |
12
+ | 2026-05-18 Phase A post-closure Firebase/Firestore purge | COMPLETE | n/a (cleanup, not an audit batch) |
13
+
14
+ Authoritative trackers:
15
+ - `docs/tracking/production-readiness-audit-tracker.json` (replaces retired `docs/tracking/full-audit-tracker.json`)
16
+ - `docs/tracking/finalization-2026-05-16-tracker.json`
17
+ - `docs/docs-site/tracker.json` (Docusaurus site)
18
+ - Audit findings: `docs/project-audit/PRODUCTION-READINESS-AUDIT-2026-05-08.md`
19
+ - Batch plan: `docs/project-audit/BATCH-PLAN.md`
20
+ - 2026-05-16 plan + sessions: `docs/project-audit/2026-05-16/`
21
+
22
+ ## Audit Record (full history)
23
+
24
+ | Date | Type | Status |
25
+ |------|------|--------|
26
+ | 2026-05-29 | **Weekly portfolio refresh + dependency pass.** Ran `npx npm-check-updates -u` per workspace. Root plugin: `@typescript-eslint/*` 8.59.4→8.60.0 applied; `commander` 14→15 deliberately held at `^14.0.3` because commander v15 raises its Node floor to `>=22.12.0` while this published package advertises `engines.node >=18` — bumping would silently drop Node 18/20 consumers. Backend (`backend/package.json`): `concurrently` 9.2.1→10.0.0 (dev-only Vite runner). Verification: root `yarn tsc` exit 0, `yarn build` (Rollup → 3 dist bundles) exit 0, `yarn lint` exit 0; root + backend `yarn install` reconciled. Fixed stale CLAUDE.md/AGENTS.md facts: yarn `4.10.3`→`4.14.1`, example-apps `3`→`2` (firebase-backend removed in v3.0.0), AGENTS overview `v3.0.0`→`v3.0.1`. New portfolio file written to `ahsan-notebook/.../packages/NATIVE-UPDATE_portfolio-info_2026-05-29.md`. | **COMPLETE (deps current, build/lint/tsc green)** |
27
+ | 2026-05-18 | **Phase A post-closure cleanup — Firebase/Firestore residue purge.** Single-commit follow-up to commits `3a8dda6` / `336f647` / `77b150c`, completing the v3.0.0 architecture decision (Laravel + MySQL is the only backend). Scope: (1) `website/src/pages/ExamplesPage.tsx` — `CODE_FIRESTORE_BACKEND` constant replaced with `CODE_SELF_HOSTED_BACKEND` (Express manifest-endpoint snippet); "Firestore Backend Pattern" entry renamed to "Self-Hosted Backend Pattern" pointing at Express/Laravel/Django/Rails; `usePageSEO` description rewritten. (2) `website/postbuild-seo.ts` — `/examples` description + keywords stripped of "Firestore + Google Drive" / "firestore google drive backend"; replaced with self-hosted manifest backend + laravel backend. (3) Deleted 4 archived no-cost-Firestore guide files: canonical `docs/guides/no-cost-firestore-google-drive-backend.md` + `no-cost-backend-implementation-plan.md` + their `website/public/package-docs/docs/guides/` mirrors. (4) Full rewrite of `docs/project-knowledge-base/{README,01-system-overview,02-routes-pages-forms-users,03-tech-stack-modules-services,04-data-models-integrations,05-docs-corpus-inventory,06-operations-testing-legal-content}.md` — all 7 files refreshed from 2026-03-16 stale-snapshot to 2026-05-18 truth (Sanctum + Laravel + Spatie RBAC + MySQL schema + Nova admin); all `users/{uid}` Firestore doc language replaced with `users` MySQL row keyed by `google_id`; ProtectedRoute/AdminRoute docs updated for Sanctum bearer + `can:` middleware enforcement. (5) `docs/rules-tracker.md` — R-033-FIRESTORE-RULES-INDEXES converted to permanent N/A with justification; R-023/R-024/R-030 dates bumped and stale "Firebase Analytics" / "Firebase Google popup auth" descriptions corrected; sub-project map updated to remove `example-apps/firebase-backend/`; tracker run-history row added for today. Verification: `yarn lint` exit 0 (root + website), `yarn build` exit 0 (root plugin Rollup + website Vite + postbuild-seo 16 per-route HTML + 9 discovery files). Final-pass grep confirms only explicit negative/historical Firebase mentions remain ("no Firestore branch", "do not propose Firebase Storage", `.firebase/hosting.*` gitignore note for Firebase Hosting cache). 2026-05-16 finalization-audit cooldown (until 2026-05-23) unaffected — this is post-closure stale-content cleanup, not a new audit batch. | **COMPLETE (Phase A purge — 0 Firebase/Firestore live references remaining)** |
28
+ | 2026-05-16 | **Finalization audit for Play Store publishing — ALL 10 BATCHES COMPLETE.** User-authorised cooldown bypass of the 2026-05-11 production-readiness audit (override condition #1) to make the website Capacitor-wrapped Play Store publishable + Laravel backend deploy-ready + plugin polished. Scope: every batch from `docs/project-audit/2026-05-16/01-BATCH-PLAN.md`. Batch 1 (backend Sanctum/LOG_LEVEL/Firebase docblock cleanup; 110/110 tests). Batch 2 (11 ESLint rules-of-hooks errors fixed across 8 files + plugin `getLocalStorage()` safe-accessor → 62/62 tests, was 53/62). Batch 3 (auth-token.ts rewritten with @capacitor/preferences + in-memory cache + event-driven 401 auto-redirect). Batch 4 (26 new backend tests across OAuth + Sanctum + Spatie + UpdateBuildRequest FormRequest → 136/136 backend tests). Batch 5 (4 admin pages migrated to TanStack Query with hierarchical keys + URL-state pagination + keepPreviousData). Batch 6 (VITE_FIREBASE_* dropped + Firebase comment sweep + HomePage step-02 fixed). Batch 7 (Play Store full-description.md + data-safety.md rewritten + 4 legal pages updated for Sanctum stack + unverifiable SOC/ISO/SLA claims removed from SecurityPage). Batch 8 (signingConfigs.release + ProGuard/R8 + network_security_config.xml + 10-section BUILD_FOR_PLAY_STORE.md runbook). Batch 9 (15 branded launcher PNGs + 11 splash PNGs + 3 Play Store graphics rendered from SVG via rsvg-convert + screenshots/CAPTURE-GUIDE.md). Batch 10 (PAGE_LAST_UPDATED + JSON-LD softwareVersion 2.0.0→3.0.1 + sitemap regen). Final verification: yarn build (root plugin + website) exit 0, yarn lint exit 0, root yarn test:run 62/62, backend php artisan test 136/136 (+26 over baseline), npx cap sync android clean, gradle config parses. Plan: `docs/project-audit/2026-05-16/00-FINALIZATION-PLAN.md`. Tracker: `docs/tracking/finalization-2026-05-16-tracker.json`. Per-batch session reports under `docs/project-audit/2026-05-16/sessions/batch-01.md` through `batch-10.md`. **Flow CLOSED.** Next allowed re-run: 2026-05-23 (7-day cooldown). Override conditions: broken build/tests, production incident, new high-severity CVE, major API change, explicit user bypass. | **COMPLETE (10/10 — 7-day cooldown until 2026-05-23)** |
29
+ | 2026-05-11 | Production-readiness audit Batch 10 — Final closure + v3.0.1 cut (flow COMPLETE). package.json 3.0.0 → 3.0.1 (patch bump — audit added docs+tooling without changing plugin's public API; SemVer-correct). docs/CHANGELOG.md: new [3.0.1] entry above the existing 3.0.0 entry, with Added (docs site / pentest checklist / perf bench / example-bundle CI / example-app capability cards), Fixed (stale firebase-backend card on ExamplesPage), Documentation (marketing-website findings / MARKETING_WEBSITE_TRACKER supersession / React 18-vs-19 reasoning), Closed (production-readiness audit with 7-day cooldown) sections. Audit tracker last_run.status flipped 'in_progress' → 'complete'; completed_at=2026-05-11; next_allowed_run_after=2026-05-18 (7-day cooldown). All 10 batch entries (1-9 + 5b + 10) carry status='completed'. Verification: yarn lint exit 0; yarn build exit 0 (root plugin); website tsc + build verified at Batch 9 commit. 9 pre-existing test failures in src/__tests__/integration.test.ts persist (vitest node env lacks localStorage; not blocking per fix-only override conditions). Portfolio-info weekly refresh deferred to its own cadence; website in-page changelog deferred to next website touch under the SEO 3-day-plus-commit-delta gate. **Audit flow CLOSED.** Next allowed re-run: 2026-05-18. Override conditions: broken build/tests, production incident, new high-severity CVE, major API change. | **COMPLETE (Audit 10/10 — 7-day cooldown until 2026-05-18)** |
30
+ | 2026-05-11 | Production-readiness audit Batch 9 — Marketing-website tracker close-out (R5). website/src/pages/ExamplesPage.tsx: removed third backendExamples entry advertising the deleted example-apps/firebase-backend (GitHub link 404'd, description contradicted website's own v3 architecture rule); two canonical examples (React + Capacitor, Node + Express) kept; Layers icon import retained (used elsewhere). docs/MARKETING_WEBSITE_TRACKER.md: marked SUPERSEDED with redirect block pointing to current findings doc + per-route SEO coverage tracker + website CLAUDE.md SEO history (file kept for history archaeology, not deleted). docs/project-audit/MARKETING-WEBSITE-FINDINGS-2026-05-11.md: new per-page findings doc — 1 inline fix (ExamplesPage card), 3 deferred follow-ups (stale MDX docs mirror at website/public/package-docs/docs/examples/firebase-backend-example.md, HomePage missing Screenshots/Demo section, DocsPage.tsx 1,406-line size violation), 7 surfaces explicitly cleared (Header/Footer internal links resolve to all registered routes, dashboard empty states across 6 pages, AboutPage CodePush references are correct, JSON-LD version current, console.* migrated to logger). Website tsc --noEmit exit 0; yarn build exit 0 (16 per-route SEO HTML files; 9 discovery files). | In progress (Audit Batch 9/10) |
31
+ | 2026-05-11 | Production-readiness audit Batch 8 — Roadmap features for v3.x (R3 second half + R1 + R2 + R4/I16 + I17). .github/workflows/example-bundle.yml (release+manual+weekly-cron — build example app, sign, attach signed zip + .sig + metadata to GitHub Release; ephemeral-key fallback with warning when NATIVE_UPDATE_EXAMPLE_PRIVATE_KEY secret missing; concurrency-grouped per tag). docs/PERFORMANCE.md (what-dominates-real-world-OTA framing, microbenchmark targets, regression workflow, hot-paths map, what-NOT-covered block). tools/bench/ Vitest microbenchmark scaffold — verify-checksum.bench.ts (SHA-256 over 1/5/20 MB), verify-signature.bench.ts (RSA-2048 + RSA-4096 SHA-256 verify over 5 MB), tools/bench/README.md (3-section methodology). docs/security/PRE-LAUNCH-PENTEST-CHECKLIST.md (~10-section DIY pentest checklist — dep hygiene, authN/authZ, CORS/CSRF, bundle integrity, file safety, data handling, operational safety, mobile platform, 9 specific attack paths). example-apps/react-capacitor/src/App.tsx — 3 new capability cards (App Update getAppUpdateInfo+openAppStore, App Review canRequestReview+requestReview, Background Update toggle with allowMeteredConnection+nextCheckTime status) wired with 5 useState + 3 useCallback + data-testid hooks; App.css extended with .capability-card visual language. example-apps/react-capacitor/README.md — new "React 18 vs React 19" section explaining stable-downstream-target reasoning. eslint.config.js — added tools/bench/** to ignores (bench files are vitest-bench, not production source). yarn lint clean; yarn build clean; example-app tsc + vite build clean (after 3 type-fixes during integration: BackgroundUpdateType.LIVE_UPDATE enum reference, nextCheckTime field, allowMeteredConnection field). Discovered pre-existing finding: 9 src/__tests__/integration.test.ts failures predate this batch (NativeUpdateWeb.loadStoredData reads localStorage in constructor; vitest node env lacks it). Verified via git-stash baseline — NOT a regression. Logged for a future test-infrastructure batch (likely Batch 10 cleanup). | In progress (Audit Batch 8/10) |
32
+ | 2026-05-11 | Docs site Batch 10 — SEO + Firebase deploy + GitHub publish (final batch, flow CLOSED). static/robots.txt with 30+ AI-bot allow list (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, Applebot-Extended, OAI-SearchBot, anthropic-ai, Claude-Web, Perplexity-User, YouBot, CCBot, Diffbot, cohere-ai, Meta-ExternalAgent, FacebookBot, Amazonbot, MistralAI-User, +traditional search bots) + 8-bot block list; static/llms.txt (9.6KB llmstxt.org index of all 58 pages by Diátaxis quadrant); static/llms-full.txt (15.4KB long-form LLM summary); static/humans.txt; static/.well-known/security.txt (RFC 9116 with 2027 Expires + inline responsible-disclosure policy); static/sitemap-index.json (machine-readable section index complementing sitemap.xml). docusaurus.config.ts: headTags with 3 JSON-LD blocks (WebSite + SoftwareApplication softwareVersion 3.0.0 + Organization), canonical link, theme-color, application-name; themeConfig.metadata extended with description fallback, expanded keywords, max-image-preview:large robots meta, twitter:site, og:locale, og:image:width/height. firebase.json (public=build, cleanUrls, immutable asset Cache-Control, HSTS+CSP-lite security headers); .firebaserc; package.json firebase:emulate/deploy/preview yarn scripts. DEPLOY.md 6-section runbook (gh repo create + Firebase project create + custom domain DNS + recurring deploy + GSC/Bing submission + troubleshooting). yarn typecheck + yarn build green; all 7 discovery files in build/; 3 JSON-LD blocks verified in built index.html. **Docs site flow CLOSED.** tracker.json last_run.status='complete', completed_at=2026-05-11, next_allowed_run_after=2026-05-18 (7-day cooldown). Firebase deploy + GitHub repo creation are documented user-actions in DEPLOY.md (require user-account auth — cannot be agent-automated). | **COMPLETE (Docs site 10/10 — 7-day cooldown until 2026-05-18)** |
33
+ | 2026-05-11 | Docs site Batch 9 — Concepts & explanations (6 pages, ~12,000 words). how-ota-updates-work.md (five-moving-parts framing + 11-step lifecycle + why-this-design covering integrity/atomicity/reversibility); bundle-integrity-and-signing.md (envelope-and-bag metaphor, SHA-256 vs RSA-SHA256 layer split, five-entity trust chain, what signing does NOT protect, RSA algorithm-choice rationale); update-strategies-compared.md (4-strategy comparison + one-line decision tree, per-strategy deep dives, background-orthogonal-to-strategies, what's-not-in-the-model); architecture.md (5-component overview + 3 mermaid diagrams (build-time flowchart, deploy-time sequence, runtime sequence) + trust-boundaries diagram with 4-zone breakdown + SDK-vs-backend versioning intersection rule); security-model.md (3-class threat model, 3-layer defense, explicit in-scope vs out-of-scope, 6 operational assumptions, regulated-industries note); error-handling-philosophy.md (fail-closed-on-correctness vs fail-open-on-availability framing, typed-error-codes everywhere, host-app-must-keep-running rule with safeBootstrapOta pattern, calibration rationale for 60s notifyAppReady window + 30min signed-URL TTL). sidebars.ts wired; commented Batch-9 placeholder removed. yarn build green; all 6 .html files generated under build/concepts/; mermaid theme already enabled. Docs site total now 58 pages (all content sections complete — only final SEO+deploy batch remains). | In progress (Docs site Batch 9/10) |
34
+ | 2026-05-11 | Docs site Batch 8 — Tutorials & How-to guides (8 pages, ~12,800 words). Tutorials: first-ota-update.md (10-step happy-path from install → keypair → bundle → sign → SaaS upload → device verify → ship a visible-change update) and backend-first-walkthrough.md (13-step self-hosted Laravel + Nova: clone/install/migrate/serve/Nova-login/seed-admin-via-tinker/first-App/first-ApiKey/first-SigningKey/wire-app-to-LAN/bundle-sign-upload/device verify). How-to: manage-channels (channel model + setChannel runtime switch + promote patterns); rotate-signing-keys (scheduled multi-key transition with publicKey-as-array + 95%-app-store-adoption gate; emergency-revoke path with expedited-review note; 3 anti-patterns); roll-back-bundle (3-layer: auto crash-rollback via notifyAppReady 60s window, cohort-wide via Rollout%/Is_Active/downgrade-as-latest, explicit per-device rollback API); migrate-from-codepush (App Center retirement, concept-mapping table, 6-step side-by-side migration, sync-option mapping); ci-cd-github-actions (full production workflow with concurrency + umask + verify-as-release-gate + cleanup-always + manual-approval via GitHub Environments); test-bundles-locally (3 loops in increasing fidelity: bundle-verify smoke / dev server / full LAN test). sidebars.ts wired with both new categories; commented Batch-8 placeholders removed. yarn build green; all 8 .html files generated under build/tutorials + build/how-to. Docs site total now 52 pages (only Concepts + final SEO/deploy batches remain). | In progress (Docs site Batch 8/10) |
35
+ | 2026-05-11 | Docs site Batch 7 — Platform guides (3 pages, ~6,000 words). android.md (6 required permissions with sensitive vs non-sensitive breakdown + tools:node='remove' opt-out, manifest-additions <service> + <receiver>, WorkManager constraints NetworkType.UNMETERED/setRequiresBatteryNotLow/setRequiresCharging with Doze + App Standby caveats, Play Core + Play Review with internal-testing-track gotcha, network security config for localhost cleartext, ProGuard rules + likely failure modes, Play Console rejection rules for merged-manifest sensitive permissions + foreground-service notification requirement, smoke tests with adb logcat filters); ios.md (deployment target iOS 14, SPM vs CocoaPods, BGTaskSchedulerPermittedIdentifiers, UIBackgroundModes, NSAppTransportSecurity with localhost exception, PrivacyInfo.xcprivacy template covering UserDefaults CA92.1 + FileTimestamp C617.1, SKStoreReviewController throttling (Apple 3/365 + plugin's knobs), App Store Review Guideline 2.5.2 compliance with WKWebView carve-out and rejection-reason examples, Keychain accessibility level, TestFlight + Xcode debugging including BGTaskScheduler LLDB simulate command); web.md (what-works method-by-method, service-worker update path with full message-passing code, three legitimate use cases, three when-NOT-to-use callouts, browser-support matrix). sidebars.ts wired; commented Batch-7 placeholder removed. yarn build green; all 3 .html files generated under build/platforms/. Docs site total now 44 pages (SDK + CLI + Backend + Platforms sections complete). | In progress (Docs site Batch 7/10) |
36
+ | 2026-05-11 | Docs site Batch 6 — Backend setup guides (5 pages, ~9,200 words). overview.md (when-to-self-host vs SaaS, 3-option matrix, what-stays-the-same invariants); laravel-nova-self-host.md (full env walk-through, ~14-table schema notes, queue-worker systemd unit, 4 storage backends, Firebase token verification + clock-skew gotcha, smoke-test commands); node-express-minimal.md (~160-line ref dissected, contract-mapping with code snippets, what's-missing-for-production callouts); api-contract.md (full wire spec for 6 endpoints with auth/headers/response shapes, error envelope convention, 11 canonical field names callout); nova-admin-overview.md (Content vs Security groups, 5-resource tour with fields/actions/use-cases, 10 Nova Actions table, admin-bypass `before`-hook policy pattern). sidebars.ts wired; commented Batch-6 placeholder removed. yarn build green; all 5 .html files generated under build/backend/. Docs site total now 41 pages (SDK + CLI + Backend sections complete). | In progress (Docs site Batch 6/10) |
37
+ | 2026-05-11 | Docs site Batch 5 — CLI Reference (9 pages, ~6,500 words). overview.md (install, when-to-use matrix, quick-start workflow, exit codes, default-artifact-locations, what-CLI-does-NOT-do, FAQ); init.md (4-prompt interactive flow, generated config shape, common errors); keys-generate.md (RSA 2048/4096 + EC P-256/P-384 matrix, chmod 600 private key, rotation guidance); bundle-create.md (flags, refused-bundle list for safety, success output sample, reproducibility note); bundle-sign.md (RSA-SHA256, .sig sidecar JSON shape, CI workflow, PEM-error catalogue); bundle-verify.md (sidecar lookup convention, CI release-gate pattern, step-by-step verification flow); server-start.md (4 endpoints documented, localhost-vs-LAN caveat for devices); monitor.md (dashboard preview, /api/stats response shape, 5s polling + 5-failure bail, SIGINT/SIGTERM handling); backend-create.md (express/firebase/vercel, SCAFFOLD_BANNER explained, TODO[SCAFFOLD-IMPLEMENT-BEFORE-DEPLOY] grep workflow, when-NOT-to-use guidance pointing to example-apps/node-express + backend/). sidebars.ts wired; commented Batch-5 placeholder removed. yarn build green; all 9 .html files generated under build/reference/cli/. Docs site total now 36 pages. | In progress (Docs site Batch 5/10) |
38
+ | 2026-05-08 | Batch 7 — env-sync + repo-public runbook + URL-state sweep + CI yarn fix + release workflow. backend/.env.example per-var GOOGLE/PAYPAL comments; website/.env.example + 3 `VITE_NATIVE_UPDATE_*` rows; new `docs/SECURITY-IF-REPO-PUBLIC.md` (preventive runbook ~250 lines); 4 dashboard pages migrated to URL state via `lib/hooks/useUrlState.ts` (extended with useUrlEnumState + useClearUrlParams); duplicate hook removed via consolidation. `.github/workflows/ci.yml` rewritten npm→yarn (corepack, node 20, yarn 4); `.github/workflows/release.yml` created (tag-driven npm publish with provenance + GitHub Release). | In progress (Batch 7/10) |
39
+ | 2026-05-08 | Batch 6 — website UI/UX polish (I4 + I5 + I6). Dialog.tsx migrated to @radix-ui/react-dialog (public API preserved across all 6 call sites; gains role/aria-modal/focus-trap/ESC/portal for free). New `src/hooks/useUrlState.ts` (5 helpers); AppsPage delete + form dialogs converted from useState to `?formMode/?editId/?deleteId` URL state. Zero per-page Query overrides confirmed via grep; canonical cache-contract doc in App.tsx. yarn typecheck + yarn build green. | In progress (Batch 6/10) |
40
+ | 2026-05-08 | Batch 5b — AboutPage rewrite + postbuild-seo body-injection. AboutPage extended to ≥1000 words with definition-first intro, project history timeline, audience cards, 7-entry FAQ, tips, author/date, plus AboutPage+Person+FAQPage JSON-LD. postbuild-seo gained a `bodyContent` field that injects a semantic-HTML `<noscript>` block right after `<div id="root">` so AI crawlers without JS see real content. Static HTML word counts: /features 1492→1956, /pricing 1457→1897, /about (thin)→1913. | In progress (Batch 5b/10) |
41
+ | 2026-05-08 | Batch 5 — SEO/AEO content enrichment (I7 partial, I8, I9). FeaturesPage + PricingPage rewritten to ≥1000 unique words each with definition-first intro, use cases, HowTo steps, FAQ (7+8), tips, author, lastUpdated, plus JSON-LD (SoftwareApplication / FAQPage / HowTo / Product with 3 Offers showing real $0/$29/$199 tiers). Created `website/public/pricing.md` machine-readable pricing. Feed.xml `lastBuildDate` now emits runtime stamp. AboutPage rewrite + postbuild-seo body-injection deferred to Batch 5b. Static HTML: /features 1492 words, /pricing 1457 words. | In progress (Batch 5/10) |
42
+ | 2026-05-08 | Batch 4 — centralized logger + plugin polish + CLI scaffold (I1, I2, I3, B2). 9 live `console.*` in src/web.ts + src/core/event-emitter.ts → Logger; ConsoleAnalyticsProvider documented as architectural exception. iOS Capacitor SDK workaround comment added. CLI backend-create.js: 8 TODOs → `TODO[SCAFFOLD-IMPLEMENT-BEFORE-DEPLOY]` greppable markers; SCAFFOLD_BANNER injected into 3 entry-point templates; post-generation warning. yarn lint+build exit 0, 62/62 tests still pass. | In progress (Batch 4/10) |
43
+ | 2026-05-08 | Batch 3 — backend tests + FormRequests + auto-create flag (B5, I14, I11, I10) + pre-existing test fix + storage_path bug fix. New: 4 FormRequest classes, 2 test files (BundleUploadTest 7 cases + UserLicenseTest 5 cases), `native_update.firebase_auto_create` config flag. Refactored AppController/ApiKeyController/BuildController to use FormRequests. php artisan test 117/117 passing (was 104/105). | In progress (Batch 3/10) |
44
+ | 2026-05-08 | Batch 2 — backend security hardening + deploy runbook (B4, I12, I13, H1, I15, B6, N4, N5). New policies (User/Build/ApiKey/SigningKey/App admin-bypass) + AuthServiceProvider; Nova/User.php canSee guards; backend/config/cors.php with env-driven allowlist; PayPal webhook Feature test (4 cases); docs/deployment/PRODUCTION-DEPLOY-CHECKLIST.md. php artisan test 104/105 passing (1 pre-existing failure unrelated to this batch). yarn lint exit 0, 62/62 plugin tests still passing. | In progress (Batch 2/10) |
45
+ | 2026-05-08 | Production-readiness audit kickoff + Batch 1 — created `docs/project-audit/PRODUCTION-READINESS-AUDIT-2026-05-08.md` (39 items + 5 roadmap), `docs/project-audit/BATCH-PLAN.md` (10 batches), `docs/tracking/production-readiness-audit-tracker.json` (resumeable, 7-day cooldown). Retired `docs/tracking/full-audit-tracker.json`. Batch 1 fixes: package.json `files` += android/manifest-additions.xml; cli/commands/monitor.js (interval/spinner cleanup, signal handlers, failure bail); rollup.config.js duplicate `comments` key removed; example-apps/react-capacitor/README.md firebase-backend refs replaced with node-express + Laravel pointers + standalone-install instructions. yarn lint exit 0, yarn build exit 0, 62/62 tests pass. | In progress (Batch 1/10) |
46
+ | 2026-05-04 | v3.0.0 — Firestore removed from plugin SDK + website; Laravel-only backend; +preferences/me/analytics/rollouts dashboard endpoints; deleted `example-apps/firebase-backend/`, `src/firestore/`, `website/src/types/firestore.ts`, `website/src/types/index.ts`. yarn build + 62/62 tests + website tsc all green. Commits 1b82d48, 4ce5a78. | Passed |
47
+ | 2026-05-03 | Full audit re-run requested → SKIPPED (7-day cooldown, last run 2026-05-02) | Skipped |
48
+ | 2026-05-02 | Full audit + fixes (code, SEO, AEO, content) | Passed |
49
+ | 2026-04-25 | Generic Project Rules Master Pass (R-001→R-039) | Passed |
50
+ | 2026-04-24 | Website SEO/AEO/AIO Full Pass | Passed |
51
+ | 2026-03-28 | Laravel Backend + Nova | Passed |
52
+ | 2026-03-24 | Portfolio + Docs Refresh | Passed |
53
+ | 2026-02-02 | Package Update | Passed |
54
+ | 2026-01-23 | Full Audit | Passed |
55
+
56
+ **Last Audit Details (pre-v3 baseline):** Package manager (yarn confirmed), Build (0 errors), TypeScript (0 errors), Tests (89/89 passing), Features (all complete), TODOs (none found). Code/SEO/Content audit found and fixed: Firestore disconnectDrive atomicity, console.* → logger across services + dashboard pages, ExamplesPage route + nav + sitemap wiring, dead GitHub link, stale humans.txt/llms-full.txt/security.txt/robots.txt dates, broken icon refs in index.html + manifest.json, stale 1.4.9 → 2.0.0 in JSON-LD softwareVersion. Generic Project Rules tracker at `docs/rules-tracker.md`.
57
+ **Last Verified:** 2026-05-02 | **Next Audit Due:** 2026-05-16
58
+
59
+ ## Re-run procedures (moved from CLAUDE.md)
60
+
61
+ ### Production-readiness audit
62
+ - Read `docs/tracking/production-readiness-audit-tracker.json` FIRST. If `last_run.status == "complete"` AND today < `last_run.next_allowed_run_after`, SKIP — tell the user the date and what completed. If `in_progress`, find the lowest-numbered batch with `status != "completed"` in `batches[]` and resume there. Do NOT redo earlier batches.
63
+ - Per-batch: invoke RULE #0 skills → apply fixes per `BATCH-PLAN.md` → run that batch's verification → ONE commit per batch → update tracker.
64
+ - Final closure: set `last_run.status = "complete"`, `completed_at = today`, `next_allowed_run_after = today + 7 days`. Sync this history + CLAUDE.md summary in the same commit.
65
+ - Override conditions: explicit user bypass, broken build/tests, production incident, critical-dep CVE.
66
+
67
+ ### Public Docusaurus docs site
68
+ - Sibling repo: `/home/ahsan/Documents/01-code/projects/native-update-docs/` (remote `github.com/aoneahsan/native-update-docs`, created by user via `gh repo create`).
69
+ - Hosting: Firebase Hosting project `native-update-docs` (deployed by user via `yarn firebase:deploy`).
70
+ - Dev port: 5960 (preview 5961) — registered in `~/.dev-ports.json` as `native-update-docs`.
71
+ - Tracker: `docs/docs-site/tracker.json`; scope: `docs/docs-site/scope.md`; plan: `docs/docs-site/plan.md` (10 batches); deploy runbook: `native-update-docs/DEPLOY.md`.
72
+ - Re-run protocol: read tracker FIRST; same cooldown/resume logic as the production audit. ONE commit per batch in each affected repo.
73
+ - Why a separate repo: plugin source GitHub is private; a public docs repo gives an additional indexable surface, satisfies AI-bot crawl access, and lets contributors propose doc fixes without plugin-source access.
74
+ - Site totals at last close (Batch 10): 58 pages, ~76k words, full Diátaxis coverage (Tutorials + How-to + Reference + Explanation), 7 discovery files (robots/llms/llms-full/humans/security/sitemap-index/sitemap), 3 JSON-LD blocks per page (WebSite + SoftwareApplication + Organization), Firebase Hosting deploy-ready.
@@ -0,0 +1,168 @@
1
+ # Production-Readiness Batch Plan
2
+
3
+ **Created:** 2026-05-08
4
+ **Source audit:** `docs/project-audit/PRODUCTION-READINESS-AUDIT-2026-05-08.md`
5
+ **Tracker:** `docs/tracking/production-readiness-audit-tracker.json`
6
+
7
+ ## Batching philosophy
8
+
9
+ Each batch groups items that:
10
+ 1. Share a domain (so context loads once, not many times)
11
+ 2. Can be verified together with one build/test/lint pass
12
+ 3. Aren't too small (wastes overhead) and aren't too large (risks context exhaustion / partial-batch state)
13
+
14
+ Each batch ends with: `yarn lint` + `yarn typecheck` + `yarn build` + `yarn test:run` clean (plus `php artisan test` for backend batches), then ONE commit per batch (per project rule), then tracker update.
15
+
16
+ ---
17
+
18
+ ## Batch 1 — npm-publish + immediate-ship blockers (THIS SESSION)
19
+
20
+ **Goal:** every fix here unblocks shipping v3.0.x.
21
+
22
+ | ID | Severity | Fix |
23
+ |---|---|---|
24
+ | B1 | Blocker | Add `"android/manifest-additions.xml"` to `package.json` `files` array |
25
+ | B3 | Blocker | `cli/commands/monitor.js`: capture interval ID, install SIGINT/SIGTERM handlers, `clearInterval` + `spinner.stop()` on exit, bail on N consecutive failures |
26
+ | B7 | Blocker | Decide example-apps lockfile strategy: declare workspaces in root `package.json` OR document standalone `cd example-apps/react-capacitor && yarn install` flow |
27
+ | B8 | Blocker | Strip `firebase-backend` references from `example-apps/react-capacitor/README.md` (lines 14, 101, 210); replace with `node-express` only |
28
+ | N1 | Nit (free with ✏️) | `rollup.config.js`: remove duplicate `comments` key |
29
+
30
+ **Verification:** `yarn lint && yarn build && yarn test:run` from root + `cd example-apps/react-capacitor && yarn install` succeeds.
31
+ **Commit message:** `fix(release): unblock v3.0.x publish — manifest-additions in files, monitor cleanup, example lockfile, README v3 cleanup`
32
+
33
+ ---
34
+
35
+ ## Batch 2 — Backend security hardening (high-value, single domain)
36
+
37
+ | ID | Severity | Fix |
38
+ |---|---|---|
39
+ | B4 | Blocker | Add Nova policies (`canViewAny`/`canCreate`/`canUpdate`/`canDelete`) for User, App, Build, ApiKey, SigningKey resources; register in `AuthServiceProvider` |
40
+ | I12 | Important | Wrap Nova User admin panels (Suspend, License, Custom Limits) with `canSee(fn ($req) => $req->user()->isAdmin())` |
41
+ | I13 / H1 | Important / Sec-High | Publish `config/cors.php`; lock `paths` to `['api/*']`, `allowed_origins` to explicit list (`nativeupdate.aoneahsan.com` + `localhost:5942`/`5944`/`5946`) |
42
+ | I15 | Important | Confirm + test PayPal webhook is CSRF-exempt; add Feature test that POST to webhook with valid signature succeeds |
43
+
44
+ **Verification:** `cd backend && php artisan test && composer dump-autoload`.
45
+ **Commit message:** `fix(backend): Nova authorization gates, CORS lockdown, PayPal webhook test`
46
+
47
+ ---
48
+
49
+ ## Batch 3 — Backend bundle/license tests + FormRequests + deploy runbook
50
+
51
+ | ID | Severity | Fix |
52
+ |---|---|---|
53
+ | B5 | Blocker | Feature test for bundle upload + signature verify + monotonic version + duplicate detection + chunk merge (`tests/Feature/Build/BundleUploadTest.php`) |
54
+ | I14 | Important | Feature test for `User::hasValidLicense()` and a paid-tier-gated endpoint |
55
+ | I11 | Important | Extract inline validators to `app/Http/Requests/*Request.php`; use `$this->authorize()` |
56
+ | I10 | Important | Add config flag `auth.firebase.auto_create` (default `true` to preserve current behavior); document in deploy runbook |
57
+ | B6 | Blocker | Create `docs/deployment/PRODUCTION-DEPLOY-CHECKLIST.md`: APP_DEBUG=false, LOG_LEVEL=warning, APP_ENV=production, key:generate, config:cache, migrate --force, queue daemon, composer install --no-dev |
58
+ | N4 / N5 | Nit | Add comments in `backend/.env.example` recommending Redis for cache + queue daemon for prod |
59
+
60
+ **Verification:** `cd backend && php artisan test`.
61
+ **Commit message:** `feat(backend): bundle/license tests, FormRequests, production deploy runbook`
62
+
63
+ ---
64
+
65
+ ## Batch 4 — Centralized logger + plugin polish
66
+
67
+ | ID | Severity | Fix |
68
+ |---|---|---|
69
+ | I1 | Important | Replace 18 `console.*` in `src/web.ts` with `Logger.{warn,error}`; replace `console.error` in `src/core/event-emitter.ts:52`. Verify via `grep -rEn "\bconsole\." src --include="*.ts" \| grep -v "src/utils/logger"` returns zero |
70
+ | I2 | Important | Add `// CAPACITOR-SDK-WORKAROUND:` comment block in `ios/Plugin/NativeUpdatePlugin.swift:72-75` referencing Capacitor 8.x |
71
+ | I3 | Important | Reconcile `cli/templates/express/` against `example-apps/node-express/` so the scaffold ships working code |
72
+ | B2 | Blocker | For each TODO in `cli/commands/backend-create.js` (8 sites), either implement or prepend generated file with `// SCAFFOLD — implement before deploying` banner + doc reference |
73
+
74
+ **Verification:** `yarn lint && yarn build && yarn test:run`.
75
+ **Commit message:** `refactor(plugin): centralized logger in web.ts/event-emitter, CLI scaffold parity, iOS workaround docs`
76
+
77
+ ---
78
+
79
+ ## Batch 5 — SEO/AEO content enrichment (3 marketing pages + pricing.md + feed fix)
80
+
81
+ This is the largest batch. Treat as multi-page content batch per global playbook §13.
82
+
83
+ | ID | Severity | Fix |
84
+ |---|---|---|
85
+ | I7 | Important | Rewrite `FeaturesPage.tsx`, `AboutPage.tsx`, `PricingPage.tsx` to ≥1000 unique words each: definition-first intro (80-120 words), 3-5 use cases (50-80 words), 4-6 HowTo steps (30-40 words), 2-3 examples, 5-8 FAQ, 3-6 tips, author + lastUpdated. Wire into `postbuild-seo.ts` so the static HTML carries the same body. Use `ai-seo` + `copywriting` skills. |
86
+ | I8 | Important | Create `website/public/pricing.md` machine-readable file: tiers, limits, FAQ, in plain markdown. Linked from llms.txt. |
87
+ | I9 | Important | Fix `website/scripts/generate-sitemap.mjs` so feed `<lastBuildDate>` and sitemap `<lastmod>` use `new Date().toUTCString()` / `new Date().toISOString()` at build time. |
88
+
89
+ **Verification:** `cd website && yarn build` (postbuild-seo step verifies prerendered HTML); manually open three prerendered HTML pages in `dist/` and confirm `<noscript>` body has the rich content.
90
+ **Commit message:** `feat(seo): per-page rich SEO content for Features/About/Pricing + pricing.md + feed-date fix`
91
+
92
+ ---
93
+
94
+ ## Batch 6 — Website UI/UX polish (a11y dialog + URL state)
95
+
96
+ | ID | Severity | Fix |
97
+ |---|---|---|
98
+ | I4 | Important | Migrate `website/src/components/ui/Dialog.tsx` to `@radix-ui/react-dialog`. Update all import sites. |
99
+ | I5 | Important | Convert `AppsPage.tsx:50,55` and any other dashboard `useState` modal/form state to URL search params (`?deleteId=ID`, `?formMode=create\|edit&appId=ID`). Use the project's `useUrlState` hook family. Sweep all dashboard pages. |
100
+ | I6 | Important | Audit per-page TanStack Query `staleTime`/`gcTime` overrides; document the cache contract in a code comment in `App.tsx`. |
101
+
102
+ **Verification:** `cd website && yarn typecheck && yarn build`; manual: open `/dashboard/apps?deleteId=test` in incognito, confirm dialog opens; reload, confirm dialog still open; close, confirm URL param drops.
103
+ **Commit message:** `refactor(website): Radix Dialog migration, URL state for dashboard modals, query cache audit`
104
+
105
+ ---
106
+
107
+ ## Batch 7 — env-sync + security preventive docs
108
+
109
+ | ID | Severity | Fix |
110
+ |---|---|---|
111
+ | M1 | Sec-Med | Add one-line "where to get this" note next to each individual PayPal/Google sub-var in `backend/.env.example` |
112
+ | M2 | Sec-Med | Add `VITE_NATIVE_UPDATE_PUBLIC_BACKEND_URL`, `VITE_NATIVE_UPDATE_API_KEY`, `VITE_NATIVE_UPDATE_PUBLIC_KEY` rows (as `[OPTIONAL]`) to `website/.env.example` |
113
+ | H2 | Sec-High preventive | Create `docs/SECURITY-IF-REPO-PUBLIC.md` runbook: rotate every committed secret, add patterns to .gitignore, audit history with git-filter-repo |
114
+
115
+ **Verification:** none beyond docs-only changes; quick grep confirms env-example coverage.
116
+ **Commit message:** `docs(security): env-example sync + repo-public runbook`
117
+
118
+ ---
119
+
120
+ ## Batch 8 — Roadmap features for v3.x release
121
+
122
+ | ID | Severity | Fix |
123
+ |---|---|---|
124
+ | R3 | Roadmap | Create `.github/workflows/release.yml`: on tag, run `yarn build:prod`, `yarn test:run`, then `npm publish --provenance` |
125
+ | R3 | Roadmap | Create `.github/workflows/example-bundle.yml`: scheduled+manual; create signed bundle from `example-apps/react-capacitor`, attach to release |
126
+ | R4 / I16 | Important | Expand `example-apps/react-capacitor/src/App.tsx` to demo: download/apply update, app-update check, app-review prompt, background-update toggle, signature verify. One section per method. |
127
+ | I17 | Important | React 18 vs 19 decision: bump to 19 + verify build (recommended) OR add explicit "stable downstream target" note in README. |
128
+ | R1 | Roadmap | Performance-benchmarking scaffold: `tools/bench/` with Vitest-based microbench for bundle-verify + signature-verify hot paths. Doc in `docs/PERFORMANCE.md`. |
129
+ | R2 | Roadmap | `docs/security/PRE-LAUNCH-PENTEST-CHECKLIST.md`: dep audit, manual auth/CSRF/CORS check, signature-verify fuzz, license-bypass attempts. |
130
+
131
+ **Verification:** `cd example-apps/react-capacitor && yarn build && yarn lint`; root `yarn test:run`; CI workflows: `actionlint .github/workflows/*.yml` if available.
132
+ **Commit message:** `feat(release): GitHub Actions release workflow, example-app coverage, perf bench scaffold, pentest checklist`
133
+
134
+ ---
135
+
136
+ ## Batch 9 — Marketing-website tracker (rendered-on-live-pages items)
137
+
138
+ | ID | Severity | Fix |
139
+ |---|---|---|
140
+ | R5 | Roadmap | Sweep `docs/MARKETING_WEBSITE_TRACKER.md` for `[ ]` items that ARE actually rendered as gaps on live pages (not "future feature ideas"). Convert each to a small per-page issue. Examples to look for: missing screenshots in `Screenshots`/`Demo` section, stale code-snippet copy in `DocsPage`, dashboard onboarding flow polish, footer links to non-existent routes. |
141
+
142
+ **Verification:** depends on what surfaces.
143
+ **Commit message:** `chore(website): close out marketing-tracker rendered-page gaps`
144
+
145
+ ---
146
+
147
+ ## Batch 10 — Final consolidated pass + version bump + portfolio refresh
148
+
149
+ | ID | Fix |
150
+ |---|---|
151
+ | — | Bump root `package.json` version (3.0.0 → 3.0.1 if all batches done; 3.1.0 if any roadmap features added) per project version-cascade rule |
152
+ | — | Update `docs/CHANGELOG.md` + `website` changelog page + portfolio info file (weekly cadence anyway) |
153
+ | — | Final `yarn lint && yarn typecheck && yarn build && yarn test:run` from root, `cd website && yarn build`, `cd backend && php artisan test`. All clean. |
154
+ | — | Update root `CLAUDE.md` + `AGENTS.md` `Audit Record` table; tracker → `status: complete`, `completed_at`, `next_allowed_run_after = +7 days` |
155
+ | — | One commit + push |
156
+
157
+ **Verification:** all green.
158
+ **Commit message:** `chore(release): v3.0.1 — production-readiness audit batches 1-9 complete`
159
+
160
+ ---
161
+
162
+ ## Resume rules (also encoded in tracker JSON)
163
+
164
+ 1. On every run of this prompt, the FIRST action is `cat docs/tracking/production-readiness-audit-tracker.json`.
165
+ 2. If `last_run.status == "complete"` and `today < last_run.next_allowed_run_after`, SKIP. Tell the user the date and what was completed last time. Don't redo finished work.
166
+ 3. If `last_run.status == "in_progress"`, find the lowest-numbered batch with `status != "completed"` and resume there.
167
+ 4. After completing each batch: update tracker `batches[N].status = "completed"`, append a `history` entry, commit.
168
+ 5. After the final batch: set `last_run.status = "complete"`, `last_run.completed_at = today`, `last_run.next_allowed_run_after = today + 7 days`. ONE final commit.
@@ -0,0 +1,73 @@
1
+ # Marketing Website — Per-Page Findings (Batch 9 sweep)
2
+
3
+ This document captures the **rendered-on-live-pages gaps** found by sweeping the React marketing+dashboard site at `website/` on 2026-05-11. It is the deliverable for production-readiness audit Batch 9 (item R5).
4
+
5
+ This is **not** a sweep of `docs/MARKETING_WEBSITE_TRACKER.md` — that file is a stale planning artifact from 2025-12-27 (created before the live site shipped, never updated as features landed; 236 items still marked `[ ]` while the corresponding code is in production). The tracker file is now annotated as superseded — see its header note.
6
+
7
+ The findings below are grouped by page. Each item names the file, the live URL where the gap would be visible to a user today, and a concrete fix. Trivial issues are fixed inline in the Batch 9 commit; non-trivial items are listed as follow-ups for future maintenance.
8
+
9
+ Maintained by Ahsan Mahmood. Audit date: 2026-05-11.
10
+
11
+ ## Fixed in this batch (commit alongside this doc)
12
+
13
+ ### `ExamplesPage.tsx` — stale `firebase-backend` example card
14
+
15
+ - **Live URL**: `https://nativeupdate.aoneahsan.com/examples`
16
+ - **File**: `website/src/pages/ExamplesPage.tsx` lines 189-198 (third entry in the `backendExamples` array)
17
+ - **Problem**: The card advertised an `example-apps/firebase-backend` example with a GitHub source link and an in-app docs link. The underlying directory was removed in v3.0.0 (per audit history 2026-05-04), so the GitHub URL 404s. The description also mentioned "Firestore manifests," contradicting the website's own architecture rule that forbids importing `firebase/firestore` since v3.0.0 (`website/CLAUDE.md`).
18
+ - **Fix applied**: Removed the third entry from the `backendExamples` array. The two canonical v3 examples (React + Capacitor, Node + Express) remain. `Layers` icon import retained — still used elsewhere in the file (line 228).
19
+ - **Risk if left**: Users land on `/examples`, click "View Source on GitHub" for the third card, get a GitHub 404, lose trust.
20
+
21
+ ## Follow-ups (not blocking; track for a future maintenance batch)
22
+
23
+ ### Stale MDX docs files mirrored under `website/public/package-docs/`
24
+
25
+ - **File path**: `website/public/package-docs/docs/examples/firebase-backend-example.md` (plus copies under `website/dist/`, `website/android/app/...`, `website/ios/App/App/...`)
26
+ - **Problem**: The Markdown file documenting the now-removed Firebase backend example is still present in the static-assets pipeline. It is no longer linked from the live React pages (after this batch's ExamplesPage fix), but it is still served at `/package-docs/docs/examples/firebase-backend-example.md` if someone has a direct link.
27
+ - **Recommended action**: Delete the source file at `website/public/package-docs/docs/examples/firebase-backend-example.md`. The `dist/` and platform-mirror copies regenerate from `public/` on every build, so deleting the source clears them downstream. Verify after deletion that the docs-routing index in `DocsMarkdownPage.tsx` doesn't return a broken card for the missing file.
28
+ - **Why deferred**: Touching `public/package-docs/` requires re-running the docs-content sync that produced those files, plus regenerating the Android / iOS asset bundles. That's a larger blast radius than fits in Batch 9.
29
+
30
+ ### HomePage has no Screenshots / Demo section
31
+
32
+ - **Live URL**: `https://nativeupdate.aoneahsan.com/`
33
+ - **File**: `website/src/pages/HomePage.tsx`
34
+ - **Observation**: The 393-line HomePage renders Hero → Features → How-It-Works → CTA. There is no `Screenshots` or `Demo` section. Zero `<img>` or `<video>` tags in the entire file.
35
+ - **Why this is a gap**: The marketing site is selling a UI-heavy product (a dashboard, OTA progress on a device). Visitors who don't already know what the dashboard looks like leave without seeing the actual product surface. This pattern is the single highest-converting block on competitive SaaS landing pages.
36
+ - **Recommended action**: Add a "See it in action" section between How-It-Works and CTA. Three SVG-only mockup tiles is enough: a dashboard "uploads" view, a device showing the in-app update prompt, and a Nova admin panel snapshot. SVG keeps file sizes small and avoids the PNG/JPG-screenshot maintenance treadmill that breaks on every UI tweak.
37
+ - **Why deferred**: Building three good-looking SVG mockup tiles is a half-day of design work, not a Batch 9 inline fix. Logging as a follow-up so it's not lost.
38
+
39
+ ### `DocsPage.tsx` is 1,406 lines
40
+
41
+ - **Live URL**: `https://nativeupdate.aoneahsan.com/docs`
42
+ - **File**: `website/src/pages/DocsPage.tsx`
43
+ - **Observation**: The file violates the project-wide "Max 500 lines/file" rule from the global CLAUDE.md. Most of the content is large code-snippet string literals — ~10 large snippets embedded inline rather than imported from separate files.
44
+ - **Recommended action**: Extract code-snippet strings into `website/src/data/docs-snippets/` (one file per snippet). The page then becomes a thin renderer over the data. This reduces churn on the page when snippets change.
45
+ - **Why deferred**: Not a rendered-page gap — visitors don't see the line count. Pure maintainability concern; lower priority than the user-facing items above.
46
+
47
+ ## Items reviewed and confirmed healthy (no action needed)
48
+
49
+ The sweep also confirmed the following are NOT gaps:
50
+
51
+ | Surface | Status |
52
+ |---|---|
53
+ | Header.tsx internal links | All 4 `<Link to=...>` targets (`/dashboard`, `/login`, `/signup`) resolve to registered routes in `src/router.tsx`. |
54
+ | Footer.tsx internal links | All 19 `<Link to=...>` targets resolve to registered routes. Includes `/sitemap`, `/feed`, `/security`, `/permissions`, `/data-deletion`, `/cookies`, `/privacy`, `/terms` — every legal page is wired up. |
55
+ | Dashboard empty states | 6 dashboard pages (AppsPage, AppDetailPage, DashboardOverview, ConfigPage, UploadPage) have explicit empty-state UI with "create your first app" / "upload your first build" copy. Onboarding flow exists. |
56
+ | `firebase-backend` references in user-facing copy | Only one remaining in `AboutPage.tsx` line 57-58 — a FAQ entry "Why build another OTA solution? What about CodePush?" mentioning CodePush, not firebase-backend. Correct (CodePush is a real third-party reference, not a deleted internal example). |
57
+ | CodePush references | All current and contextually correct (the migration story is part of the marketing message; CodePush's March 2025 retirement is fact). |
58
+ | Version strings in JSON-LD | Audit Record entry 2026-05-02 confirms softwareVersion was bumped to current. |
59
+ | `console.*` calls in src/ | Audit Record entry 2026-05-02 confirms migration to `src/lib/logger.ts`. |
60
+
61
+ ## How to use this doc
62
+
63
+ This is a snapshot. Re-run the per-page sweep when:
64
+
65
+ - A new public page ships (re-check footer + sitemap coverage)
66
+ - A feature is removed (re-grep for any references that point at it)
67
+ - Before a major release (it pairs with the [Pre-Launch Pentest Checklist](/home/ahsan/Documents/01-code/projects/native-update/docs/security/PRE-LAUNCH-PENTEST-CHECKLIST.md))
68
+
69
+ The findings format intentionally avoids GitHub issue creation here — when the project goes public, items in the "Follow-ups" section above are good first issues to open against the public repo.
70
+
71
+ ## Authored by
72
+
73
+ Ahsan Mahmood — author and maintainer of `native-update`.