pushframe 5.1.7__tar.gz → 5.1.9__tar.gz

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 (423) hide show
  1. {pushframe-5.1.7 → pushframe-5.1.9}/CHANGELOG.md +103 -38
  2. pushframe-5.1.9/PKG-INFO +645 -0
  3. pushframe-5.1.9/README.md +585 -0
  4. {pushframe-5.1.7 → pushframe-5.1.9}/docs/CLI.md +90 -93
  5. pushframe-5.1.9/docs/DEVELOPING.md +114 -0
  6. pushframe-5.1.9/docs/ERRORS.md +85 -0
  7. pushframe-5.1.9/docs/INTERNALS.md +177 -0
  8. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/__init__.py +1 -1
  9. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/cli.py +44 -6
  10. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/google/enumerate.py +14 -3
  11. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/gsync.py +12 -11
  12. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/pairs.py +1 -1
  13. {pushframe-5.1.7 → pushframe-5.1.9}/pyproject.toml +1 -1
  14. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_cli_google_album.py +7 -2
  15. pushframe-5.1.9/tests/test_docs_hint.py +29 -0
  16. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_google_enumerate.py +27 -3
  17. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_gsync_execute.py +1 -1
  18. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_schedule.py +1 -1
  19. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_version.py +1 -1
  20. {pushframe-5.1.7 → pushframe-5.1.9}/uv.lock +1 -1
  21. pushframe-5.1.7/PKG-INFO +0 -661
  22. pushframe-5.1.7/README.md +0 -601
  23. {pushframe-5.1.7 → pushframe-5.1.9}/.env.sample +0 -0
  24. {pushframe-5.1.7 → pushframe-5.1.9}/.freebuff/project-id +0 -0
  25. {pushframe-5.1.7 → pushframe-5.1.9}/.github/workflows/release.yml +0 -0
  26. {pushframe-5.1.7 → pushframe-5.1.9}/.github/workflows/tests.yml +0 -0
  27. {pushframe-5.1.7 → pushframe-5.1.9}/.gitignore +0 -0
  28. {pushframe-5.1.7 → pushframe-5.1.9}/.gsd/dispatch-isolation-sentinel.json +0 -0
  29. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/MILESTONES.md +0 -0
  30. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/PROJECT.md +0 -0
  31. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/REQUIREMENTS.md +0 -0
  32. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/RETROSPECTIVE.md +0 -0
  33. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/ROADMAP.md +0 -0
  34. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/STATE.md +0 -0
  35. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/WINDOWS.md +0 -0
  36. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/codebase/ARCHITECTURE.md +0 -0
  37. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/codebase/CONCERNS.md +0 -0
  38. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/codebase/CONVENTIONS.md +0 -0
  39. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/codebase/INTEGRATIONS.md +0 -0
  40. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/codebase/STACK.md +0 -0
  41. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/codebase/STRUCTURE.md +0 -0
  42. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/codebase/TESTING.md +0 -0
  43. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/config.json +0 -0
  44. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/debug/gsync-apply-budget-none-crash.md +0 -0
  45. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/debug/knowledge-base.md +0 -0
  46. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/debug/login-475-null-creds.md +0 -0
  47. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/debug/resolved/cli-status-verbose-logging.md +0 -0
  48. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/debug/resolved/inspect-asset-null-fields.md +0 -0
  49. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/debug/resolved/select-asset-401-unauthorized.md +0 -0
  50. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/debug/status-crash-401-trip.md +0 -0
  51. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-REQUIREMENTS.md +0 -0
  52. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-ROADMAP.md +0 -0
  53. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/01-toolchain-revival/01-01-PLAN.md +0 -0
  54. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/01-toolchain-revival/01-01-SUMMARY.md +0 -0
  55. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/01-toolchain-revival/01-02-PLAN.md +0 -0
  56. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/01-toolchain-revival/01-02-SUMMARY.md +0 -0
  57. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/01-toolchain-revival/01-CONTEXT.md +0 -0
  58. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/01-toolchain-revival/01-DISCUSSION-LOG.md +0 -0
  59. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/01-toolchain-revival/01-PATTERNS.md +0 -0
  60. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/01-toolchain-revival/01-RESEARCH.md +0 -0
  61. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/01-toolchain-revival/01-REVIEW.md +0 -0
  62. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/01-toolchain-revival/01-VERIFICATION.md +0 -0
  63. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/02-live-read-path-verification/02-01-PLAN.md +0 -0
  64. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/02-live-read-path-verification/02-01-SUMMARY.md +0 -0
  65. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/02-live-read-path-verification/02-02-PLAN.md +0 -0
  66. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/02-live-read-path-verification/02-02-SUMMARY.md +0 -0
  67. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/02-live-read-path-verification/02-CONTEXT.md +0 -0
  68. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/02-live-read-path-verification/02-DISCUSSION-LOG.md +0 -0
  69. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/02-live-read-path-verification/02-LIVE-EVIDENCE.md +0 -0
  70. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/02-live-read-path-verification/02-PATTERNS.md +0 -0
  71. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/02-live-read-path-verification/02-RESEARCH.md +0 -0
  72. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/02-live-read-path-verification/02-REVIEW.md +0 -0
  73. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/02-live-read-path-verification/02-VERIFICATION.md +0 -0
  74. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/03-run-docs-verification-report/03-01-PLAN.md +0 -0
  75. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/03-run-docs-verification-report/03-01-SUMMARY.md +0 -0
  76. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/03-run-docs-verification-report/03-CONTEXT.md +0 -0
  77. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/03-run-docs-verification-report/03-DISCUSSION-LOG.md +0 -0
  78. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/03-run-docs-verification-report/03-PATTERNS.md +0 -0
  79. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/03-run-docs-verification-report/03-RESEARCH.md +0 -0
  80. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/03-run-docs-verification-report/03-REVIEW.md +0 -0
  81. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.0-phases/03-run-docs-verification-report/03-VERIFICATION.md +0 -0
  82. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.1-ROADMAP.md +0 -0
  83. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.1-phases/04-client-transport-seam-for-offline-testability/.gitkeep +0 -0
  84. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.1-phases/04-client-transport-seam-for-offline-testability/04-01-PLAN.md +0 -0
  85. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.1-phases/04-client-transport-seam-for-offline-testability/04-01-SUMMARY.md +0 -0
  86. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.1-phases/04-client-transport-seam-for-offline-testability/04-02-PLAN.md +0 -0
  87. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.1-phases/04-client-transport-seam-for-offline-testability/04-02-SUMMARY.md +0 -0
  88. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.1-phases/04-client-transport-seam-for-offline-testability/04-03-PLAN.md +0 -0
  89. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.1-phases/04-client-transport-seam-for-offline-testability/04-03-SUMMARY.md +0 -0
  90. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.1-phases/04-client-transport-seam-for-offline-testability/04-PATTERNS.md +0 -0
  91. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.1-phases/04-client-transport-seam-for-offline-testability/04-RESEARCH.md +0 -0
  92. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.1-phases/04-client-transport-seam-for-offline-testability/04-REVIEW.md +0 -0
  93. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.1-phases/04-client-transport-seam-for-offline-testability/04-SECURITY.md +0 -0
  94. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.1-phases/04-client-transport-seam-for-offline-testability/04-UAT.md +0 -0
  95. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v1.1-phases/04-client-transport-seam-for-offline-testability/04-VERIFICATION.md +0 -0
  96. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-REQUIREMENTS.md +0 -0
  97. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-ROADMAP.md +0 -0
  98. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/05-cli-skeleton-status/05-01-PLAN.md +0 -0
  99. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/05-cli-skeleton-status/05-01-SUMMARY.md +0 -0
  100. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/05-cli-skeleton-status/05-02-PLAN.md +0 -0
  101. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/05-cli-skeleton-status/05-02-SUMMARY.md +0 -0
  102. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/05-cli-skeleton-status/05-CONTEXT.md +0 -0
  103. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/05-cli-skeleton-status/05-DISCUSSION-LOG.md +0 -0
  104. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/05-cli-skeleton-status/05-PATTERNS.md +0 -0
  105. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/05-cli-skeleton-status/05-REVIEW.md +0 -0
  106. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/05-cli-skeleton-status/05-SECURITY.md +0 -0
  107. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/05-cli-skeleton-status/05-UAT.md +0 -0
  108. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/05-cli-skeleton-status/05-VERIFICATION.md +0 -0
  109. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/06-inspect-frame-resolution/06-01-PLAN.md +0 -0
  110. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/06-inspect-frame-resolution/06-01-SUMMARY.md +0 -0
  111. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/06-inspect-frame-resolution/06-02-PLAN.md +0 -0
  112. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/06-inspect-frame-resolution/06-02-SUMMARY.md +0 -0
  113. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/06-inspect-frame-resolution/06-CONTEXT.md +0 -0
  114. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/06-inspect-frame-resolution/06-DISCUSSION-LOG.md +0 -0
  115. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/06-inspect-frame-resolution/06-PATTERNS.md +0 -0
  116. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/06-inspect-frame-resolution/06-RESEARCH.md +0 -0
  117. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/06-inspect-frame-resolution/06-REVIEW.md +0 -0
  118. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/06-inspect-frame-resolution/06-SECURITY.md +0 -0
  119. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/06-inspect-frame-resolution/06-VERIFICATION.md +0 -0
  120. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/07-sync-diffing-engine-dry-run-only/07-01-PLAN.md +0 -0
  121. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/07-sync-diffing-engine-dry-run-only/07-01-SUMMARY.md +0 -0
  122. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/07-sync-diffing-engine-dry-run-only/07-02-PLAN.md +0 -0
  123. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/07-sync-diffing-engine-dry-run-only/07-02-SUMMARY.md +0 -0
  124. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/07-sync-diffing-engine-dry-run-only/07-03-PLAN.md +0 -0
  125. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/07-sync-diffing-engine-dry-run-only/07-03-SUMMARY.md +0 -0
  126. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/07-sync-diffing-engine-dry-run-only/07-CONTEXT.md +0 -0
  127. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/07-sync-diffing-engine-dry-run-only/07-DISCUSSION-LOG.md +0 -0
  128. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/07-sync-diffing-engine-dry-run-only/07-PATTERNS.md +0 -0
  129. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/07-sync-diffing-engine-dry-run-only/07-REVIEW-FIX.md +0 -0
  130. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/07-sync-diffing-engine-dry-run-only/07-REVIEW.md +0 -0
  131. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/07-sync-diffing-engine-dry-run-only/07-SECURITY.md +0 -0
  132. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/07-sync-diffing-engine-dry-run-only/07-VERIFICATION.md +0 -0
  133. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/08-destructive-execution-upload-delete-verification/08-01-PLAN.md +0 -0
  134. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/08-destructive-execution-upload-delete-verification/08-01-SUMMARY.md +0 -0
  135. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/08-destructive-execution-upload-delete-verification/08-02-PLAN.md +0 -0
  136. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/08-destructive-execution-upload-delete-verification/08-02-SUMMARY.md +0 -0
  137. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/08-destructive-execution-upload-delete-verification/08-03-PLAN.md +0 -0
  138. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/08-destructive-execution-upload-delete-verification/08-03-SUMMARY.md +0 -0
  139. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/08-destructive-execution-upload-delete-verification/08-04-PLAN.md +0 -0
  140. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/08-destructive-execution-upload-delete-verification/08-04-SUMMARY.md +0 -0
  141. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/08-destructive-execution-upload-delete-verification/08-CONTEXT.md +0 -0
  142. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/08-destructive-execution-upload-delete-verification/08-DISCUSSION-LOG.md +0 -0
  143. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/08-destructive-execution-upload-delete-verification/08-LIVE-FINDINGS.md +0 -0
  144. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/08-destructive-execution-upload-delete-verification/08-PATTERNS.md +0 -0
  145. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/08-destructive-execution-upload-delete-verification/08-RESEARCH.md +0 -0
  146. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/08-destructive-execution-upload-delete-verification/08-REVIEW-FIX.md +0 -0
  147. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/08-destructive-execution-upload-delete-verification/08-REVIEW.md +0 -0
  148. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/08-destructive-execution-upload-delete-verification/08-VERIFICATION.md +0 -0
  149. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/09-proactive-write-rate-limiter-geo-guard/.gitkeep +0 -0
  150. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/09-proactive-write-rate-limiter-geo-guard/09-01-PLAN.md +0 -0
  151. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/09-proactive-write-rate-limiter-geo-guard/09-01-SUMMARY.md +0 -0
  152. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/09-proactive-write-rate-limiter-geo-guard/09-02-PLAN.md +0 -0
  153. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/09-proactive-write-rate-limiter-geo-guard/09-02-SUMMARY.md +0 -0
  154. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/09-proactive-write-rate-limiter-geo-guard/09-CONTEXT.md +0 -0
  155. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/09-proactive-write-rate-limiter-geo-guard/09-RESEARCH.md +0 -0
  156. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/09-proactive-write-rate-limiter-geo-guard/09-REVIEW-FIX.md +0 -0
  157. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/09-proactive-write-rate-limiter-geo-guard/09-REVIEW.md +0 -0
  158. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/09-proactive-write-rate-limiter-geo-guard/09-VERIFICATION.md +0 -0
  159. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/10-hide-instead-of-delete-sync-mode/.gitkeep +0 -0
  160. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/10-hide-instead-of-delete-sync-mode/10-01-PLAN.md +0 -0
  161. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/10-hide-instead-of-delete-sync-mode/10-01-SUMMARY.md +0 -0
  162. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/10-hide-instead-of-delete-sync-mode/10-02-PLAN.md +0 -0
  163. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/10-hide-instead-of-delete-sync-mode/10-02-SUMMARY.md +0 -0
  164. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/10-hide-instead-of-delete-sync-mode/10-03-PLAN.md +0 -0
  165. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/10-hide-instead-of-delete-sync-mode/10-03-SUMMARY.md +0 -0
  166. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/10-hide-instead-of-delete-sync-mode/10-04-PLAN.md +0 -0
  167. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/10-hide-instead-of-delete-sync-mode/10-04-SUMMARY.md +0 -0
  168. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/10-hide-instead-of-delete-sync-mode/10-CONTEXT.md +0 -0
  169. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/10-hide-instead-of-delete-sync-mode/10-DISCUSSION-LOG.md +0 -0
  170. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/10-hide-instead-of-delete-sync-mode/10-LIVE-FINDINGS.md +0 -0
  171. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/10-hide-instead-of-delete-sync-mode/10-PATTERNS.md +0 -0
  172. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/10-hide-instead-of-delete-sync-mode/10-RESEARCH.md +0 -0
  173. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/10-hide-instead-of-delete-sync-mode/10-SECURITY.md +0 -0
  174. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/10-hide-instead-of-delete-sync-mode/10-UAT.md +0 -0
  175. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/10-hide-instead-of-delete-sync-mode/10-VERIFICATION.md +0 -0
  176. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-phases/10-hide-instead-of-delete-sync-mode/COVERAGE.md +0 -0
  177. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-quick/260630-qs8-make-main-py-load-a-local-env-file-at-st/260630-qs8-PLAN.md +0 -0
  178. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-quick/260630-qs8-make-main-py-load-a-local-env-file-at-st/260630-qs8-SUMMARY.md +0 -0
  179. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-quick/260708-dt9-add-progress-feedback-to-aura-cli-sync-a/260708-dt9-PLAN.md +0 -0
  180. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-quick/260708-dt9-add-progress-feedback-to-aura-cli-sync-a/260708-dt9-SUMMARY.md +0 -0
  181. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-quick/260708-dt9-add-progress-feedback-to-aura-cli-sync-a/deferred-items.md +0 -0
  182. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-quick/260708-fyr-batch-refactor-of-sync-apply-write-path-/260708-fyr-PLAN.md +0 -0
  183. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-quick/260708-fyr-batch-refactor-of-sync-apply-write-path-/260708-fyr-SUMMARY.md +0 -0
  184. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-quick/260708-fyr-batch-refactor-of-sync-apply-write-path-/260708-fyr-VERIFICATION.md +0 -0
  185. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v2.0-quick/README.md +0 -0
  186. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v3.0-REQUIREMENTS.md +0 -0
  187. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v3.0-ROADMAP.md +0 -0
  188. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v3.0-phases/11-write-path-reliability-format-support/11-01-PLAN.md +0 -0
  189. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v3.0-phases/11-write-path-reliability-format-support/11-01-SUMMARY.md +0 -0
  190. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v3.0-phases/11-write-path-reliability-format-support/11-02-PLAN.md +0 -0
  191. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v3.0-phases/11-write-path-reliability-format-support/11-02-SUMMARY.md +0 -0
  192. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v3.0-phases/11-write-path-reliability-format-support/11-03-PLAN.md +0 -0
  193. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v3.0-phases/11-write-path-reliability-format-support/11-03-SUMMARY.md +0 -0
  194. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v3.0-phases/11-write-path-reliability-format-support/11-04-PLAN.md +0 -0
  195. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v3.0-phases/11-write-path-reliability-format-support/11-04-SUMMARY.md +0 -0
  196. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v3.0-phases/11-write-path-reliability-format-support/11-05-PLAN.md +0 -0
  197. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v3.0-phases/11-write-path-reliability-format-support/11-05-SUMMARY.md +0 -0
  198. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v3.0-phases/11-write-path-reliability-format-support/11-06-PLAN.md +0 -0
  199. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v3.0-phases/11-write-path-reliability-format-support/11-06-SUMMARY.md +0 -0
  200. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v3.0-phases/11-write-path-reliability-format-support/11-CONTEXT.md +0 -0
  201. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v3.0-phases/11-write-path-reliability-format-support/11-DISCUSSION-LOG.md +0 -0
  202. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v3.0-phases/11-write-path-reliability-format-support/11-LIVE-FINDINGS.md +0 -0
  203. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v3.0-phases/11-write-path-reliability-format-support/11-PATTERNS.md +0 -0
  204. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v3.0-phases/11-write-path-reliability-format-support/11-REVIEW.md +0 -0
  205. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v3.0-phases/11-write-path-reliability-format-support/11-VERIFICATION.md +0 -0
  206. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-REQUIREMENTS.md +0 -0
  207. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-ROADMAP.md +0 -0
  208. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/16-local-mechanism-spike-decision/16-01-PLAN.md +0 -0
  209. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/16-local-mechanism-spike-decision/16-01-SUMMARY.md +0 -0
  210. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/16-local-mechanism-spike-decision/16-02-PLAN.md +0 -0
  211. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/16-local-mechanism-spike-decision/16-02-SUMMARY.md +0 -0
  212. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/16-local-mechanism-spike-decision/16-03-PLAN.md +0 -0
  213. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/16-local-mechanism-spike-decision/16-03-SUMMARY.md +0 -0
  214. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/16-local-mechanism-spike-decision/16-CONTEXT.md +0 -0
  215. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/16-local-mechanism-spike-decision/16-DECISION-RECORD.md +0 -0
  216. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/16-local-mechanism-spike-decision/16-DISCUSSION-LOG.md +0 -0
  217. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/16-local-mechanism-spike-decision/16-LIVE-FINDINGS.md +0 -0
  218. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/16-local-mechanism-spike-decision/COVERAGE.md +0 -0
  219. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/17-google-link-album-selection/17-01-PLAN.md +0 -0
  220. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/17-google-link-album-selection/17-01-SUMMARY.md +0 -0
  221. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/17-google-link-album-selection/17-02-PLAN.md +0 -0
  222. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/17-google-link-album-selection/17-02-SUMMARY.md +0 -0
  223. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/17-google-link-album-selection/17-CONTEXT.md +0 -0
  224. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/17-google-link-album-selection/17-DISCUSS-CHECKPOINT.json +0 -0
  225. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/17-google-link-album-selection/17-VERIFICATION.md +0 -0
  226. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/17-google-link-album-selection/COVERAGE.md +0 -0
  227. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/18-album-frame-mirror-sync-single-pair/18-01-PLAN.md +0 -0
  228. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/18-album-frame-mirror-sync-single-pair/18-01-SUMMARY.md +0 -0
  229. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/18-album-frame-mirror-sync-single-pair/18-02-PLAN.md +0 -0
  230. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/18-album-frame-mirror-sync-single-pair/18-02-SUMMARY.md +0 -0
  231. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/18-album-frame-mirror-sync-single-pair/18-03-PLAN.md +0 -0
  232. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/18-album-frame-mirror-sync-single-pair/18-03-SUMMARY.md +0 -0
  233. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/18-album-frame-mirror-sync-single-pair/18-CONTEXT.md +0 -0
  234. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/18-album-frame-mirror-sync-single-pair/18-RESEARCH.md +0 -0
  235. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/18-album-frame-mirror-sync-single-pair/18-UAT.md +0 -0
  236. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/18-album-frame-mirror-sync-single-pair/18-VERIFICATION.md +0 -0
  237. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/19-debt-closeout/19-01-PLAN.md +0 -0
  238. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/19-debt-closeout/19-01-SUMMARY.md +0 -0
  239. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/19-debt-closeout/19-02-PLAN.md +0 -0
  240. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/19-debt-closeout/19-02-SUMMARY.md +0 -0
  241. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/19-debt-closeout/19-CONTEXT.md +0 -0
  242. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/19-debt-closeout/19-RESEARCH.md +0 -0
  243. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v4.0-phases/19-debt-closeout/19-VERIFICATION.md +0 -0
  244. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v5.0-REQUIREMENTS.md +0 -0
  245. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v5.0-ROADMAP.md +0 -0
  246. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v5.0-phases/20-pushframe-rename-migration-repo-switch/20-SUMMARY.md +0 -0
  247. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v5.0-phases/21-debian-package-apt-repo/21-01-PLAN.md +0 -0
  248. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v5.0-phases/21-debian-package-apt-repo/21-01-SUMMARY.md +0 -0
  249. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v5.0-phases/21-debian-package-apt-repo/21-02-PLAN.md +0 -0
  250. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v5.0-phases/21-debian-package-apt-repo/21-02-SUMMARY.md +0 -0
  251. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v5.0-phases/21-debian-package-apt-repo/21-CONTEXT.md +0 -0
  252. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v5.0-phases/21-debian-package-apt-repo/21-RESEARCH.md +0 -0
  253. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v5.0-phases/21-debian-package-apt-repo/21-VERIFICATION.md +0 -0
  254. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v5.0-phases/22-pypi-release-engineering/22-01-PLAN.md +0 -0
  255. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v5.0-phases/22-pypi-release-engineering/22-01-SUMMARY.md +0 -0
  256. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v5.0-phases/22-pypi-release-engineering/22-02-PLAN.md +0 -0
  257. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v5.0-phases/22-pypi-release-engineering/22-02-SUMMARY.md +0 -0
  258. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v5.0-phases/22-pypi-release-engineering/22-CONTEXT.md +0 -0
  259. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v5.0-phases/22-pypi-release-engineering/22-RESEARCH.md +0 -0
  260. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v5.0-phases/22-pypi-release-engineering/22-VERIFICATION.md +0 -0
  261. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/milestones/v5.0-phases/22-pypi-release-engineering/OPERATOR-STEPS.md +0 -0
  262. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/phases/23-config-wizard-precedence/23-01-PLAN.md +0 -0
  263. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/phases/23-config-wizard-precedence/23-01-SUMMARY.md +0 -0
  264. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/phases/23-config-wizard-precedence/23-CONTEXT.md +0 -0
  265. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/phases/23-config-wizard-precedence/23-RESEARCH.md +0 -0
  266. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/phases/23-config-wizard-precedence/23-VERIFICATION.md +0 -0
  267. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/phases/24-token-first-sessions-preflight-sweep-sec-01-03-prf-01-02/24-01-PLAN.md +0 -0
  268. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/phases/24-token-first-sessions-preflight-sweep-sec-01-03-prf-01-02/24-01-SUMMARY.md +0 -0
  269. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/phases/24-token-first-sessions-preflight-sweep-sec-01-03-prf-01-02/24-CONTEXT.md +0 -0
  270. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/phases/24-token-first-sessions-preflight-sweep-sec-01-03-prf-01-02/24-RESEARCH.md +0 -0
  271. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/phases/24-token-first-sessions-preflight-sweep-sec-01-03-prf-01-02/24-VERIFICATION.md +0 -0
  272. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/phases/25-multi-frame-mappings-systemd-user-scheduling-mtf-01-03-tmr-01-03/25-01-PLAN.md +0 -0
  273. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/phases/25-multi-frame-mappings-systemd-user-scheduling-mtf-01-03-tmr-01-03/25-01-SUMMARY.md +0 -0
  274. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/phases/25-multi-frame-mappings-systemd-user-scheduling-mtf-01-03-tmr-01-03/25-CONTEXT.md +0 -0
  275. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/phases/25-multi-frame-mappings-systemd-user-scheduling-mtf-01-03-tmr-01-03/25-RESEARCH.md +0 -0
  276. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/phases/25-multi-frame-mappings-systemd-user-scheduling-mtf-01-03-tmr-01-03/25-VERIFICATION.md +0 -0
  277. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/research/ALBUM-ACCESS-V4-ADDENDUM.md +0 -0
  278. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/research/ALBUM-ACCESS.md +0 -0
  279. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/research/ARCHITECTURE.md +0 -0
  280. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/research/BROWSER-AUTOMATION.md +0 -0
  281. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/research/FEATURES.md +0 -0
  282. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/research/PITFALLS.md +0 -0
  283. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/research/STACK.md +0 -0
  284. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/research/SUMMARY.md +0 -0
  285. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/state.json +0 -0
  286. {pushframe-5.1.7 → pushframe-5.1.9}/.planning/todos/completed/2026-07-06-promote-debug-flag-to-a-global-cli-convention.md +0 -0
  287. {pushframe-5.1.7 → pushframe-5.1.9}/.python-version +0 -0
  288. {pushframe-5.1.7 → pushframe-5.1.9}/CLAUDE.md +0 -0
  289. {pushframe-5.1.7 → pushframe-5.1.9}/LICENSE +0 -0
  290. {pushframe-5.1.7 → pushframe-5.1.9}/SECURITY.md +0 -0
  291. {pushframe-5.1.7 → pushframe-5.1.9}/VERIFICATION-REPORT.md +0 -0
  292. {pushframe-5.1.7 → pushframe-5.1.9}/docs/agents/domain.md +0 -0
  293. {pushframe-5.1.7 → pushframe-5.1.9}/docs/agents/issue-tracker.md +0 -0
  294. {pushframe-5.1.7 → pushframe-5.1.9}/docs/agents/triage-labels.md +0 -0
  295. {pushframe-5.1.7 → pushframe-5.1.9}/docs/superpowers/specs/2026-07-09-write-rate-limiter-design.md +0 -0
  296. {pushframe-5.1.7 → pushframe-5.1.9}/main.py +0 -0
  297. {pushframe-5.1.7 → pushframe-5.1.9}/packaging/control-template +0 -0
  298. {pushframe-5.1.7 → pushframe-5.1.9}/packaging/lintian-overrides +0 -0
  299. {pushframe-5.1.7 → pushframe-5.1.9}/packaging/postinst +0 -0
  300. {pushframe-5.1.7 → pushframe-5.1.9}/packaging/pushframe.copyright +0 -0
  301. {pushframe-5.1.7 → pushframe-5.1.9}/probes/.gitignore +0 -0
  302. {pushframe-5.1.7 → pushframe-5.1.9}/probes/README.md +0 -0
  303. {pushframe-5.1.7 → pushframe-5.1.9}/probes/browser_bootstrap.py +0 -0
  304. {pushframe-5.1.7 → pushframe-5.1.9}/probes/common.py +0 -0
  305. {pushframe-5.1.7 → pushframe-5.1.9}/probes/cookie_vault.py +0 -0
  306. {pushframe-5.1.7 → pushframe-5.1.9}/probes/fidelity_check.py +0 -0
  307. {pushframe-5.1.7 → pushframe-5.1.9}/probes/rpc_capture.py +0 -0
  308. {pushframe-5.1.7 → pushframe-5.1.9}/probes/shared_link_probe.py +0 -0
  309. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/api/__init__.py +0 -0
  310. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/api/accountApi.py +0 -0
  311. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/api/activityApi.py +0 -0
  312. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/api/assetApi.py +0 -0
  313. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/api/baseApi.py +0 -0
  314. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/api/frameApi.py +0 -0
  315. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/api/notificationApi.py +0 -0
  316. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/api/peopleApi.py +0 -0
  317. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/api/playlistApi.py +0 -0
  318. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/aura.py +0 -0
  319. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/aws/__init__.py +0 -0
  320. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/aws/awsclient.py +0 -0
  321. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/aws/s3client.py +0 -0
  322. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/aws/sqsclient.py +0 -0
  323. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/cache.py +0 -0
  324. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/client.py +0 -0
  325. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/config_store.py +0 -0
  326. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/doctor.py +0 -0
  327. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/exif.py +0 -0
  328. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/export.py +0 -0
  329. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/google/__init__.py +0 -0
  330. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/google/bootstrap.py +0 -0
  331. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/google/cache.py +0 -0
  332. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/google/client.py +0 -0
  333. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/google/manifest.py +0 -0
  334. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/google/parsers.py +0 -0
  335. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/google/redaction.py +0 -0
  336. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/google/vault.py +0 -0
  337. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/migration.py +0 -0
  338. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/models/__init__.py +0 -0
  339. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/models/activity.py +0 -0
  340. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/models/asset.py +0 -0
  341. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/models/frame.py +0 -0
  342. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/models/meta.py +0 -0
  343. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/models/person.py +0 -0
  344. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/models/user.py +0 -0
  345. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/preflight.py +0 -0
  346. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/ratelimit.py +0 -0
  347. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/reconcile.py +0 -0
  348. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/schedule.py +0 -0
  349. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/session.py +0 -0
  350. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/sync.py +0 -0
  351. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/utils/dt.py +0 -0
  352. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/utils/io.py +0 -0
  353. {pushframe-5.1.7 → pushframe-5.1.9}/pushframe/utils/settings.py +0 -0
  354. {pushframe-5.1.7 → pushframe-5.1.9}/scripts/build-deb.sh +0 -0
  355. {pushframe-5.1.7 → pushframe-5.1.9}/scripts/make-apt-key.sh +0 -0
  356. {pushframe-5.1.7 → pushframe-5.1.9}/scripts/publish-apt-repo.sh +0 -0
  357. {pushframe-5.1.7 → pushframe-5.1.9}/scripts/test-apt-journey-container.sh +0 -0
  358. {pushframe-5.1.7 → pushframe-5.1.9}/scripts/test-config-journey-container.sh +0 -0
  359. {pushframe-5.1.7 → pushframe-5.1.9}/scripts/test-deb-container.sh +0 -0
  360. {pushframe-5.1.7 → pushframe-5.1.9}/scripts/test-install-journey-container.sh +0 -0
  361. {pushframe-5.1.7 → pushframe-5.1.9}/scripts/test-multipair-journey-container.sh +0 -0
  362. {pushframe-5.1.7 → pushframe-5.1.9}/tests/conftest.py +0 -0
  363. {pushframe-5.1.7 → pushframe-5.1.9}/tests/fixtures/asset_unprocessed.json +0 -0
  364. {pushframe-5.1.7 → pushframe-5.1.9}/tests/fixtures/assets_page1.json +0 -0
  365. {pushframe-5.1.7 → pushframe-5.1.9}/tests/fixtures/assets_page2.json +0 -0
  366. {pushframe-5.1.7 → pushframe-5.1.9}/tests/fixtures/assets_placeholders.json +0 -0
  367. {pushframe-5.1.7 → pushframe-5.1.9}/tests/fixtures/error_envelope.json +0 -0
  368. {pushframe-5.1.7 → pushframe-5.1.9}/tests/fixtures/frame_detail.json +0 -0
  369. {pushframe-5.1.7 → pushframe-5.1.9}/tests/fixtures/frames.json +0 -0
  370. {pushframe-5.1.7 → pushframe-5.1.9}/tests/fixtures/google_rpc_snackc_page.json +0 -0
  371. {pushframe-5.1.7 → pushframe-5.1.9}/tests/fixtures/google_share_page_sample.html +0 -0
  372. {pushframe-5.1.7 → pushframe-5.1.9}/tests/fixtures/login.json +0 -0
  373. {pushframe-5.1.7 → pushframe-5.1.9}/tests/fixtures/probe_af_initdata_sample.html +0 -0
  374. {pushframe-5.1.7 → pushframe-5.1.9}/tests/offline.py +0 -0
  375. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_asset_partial.py +0 -0
  376. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_asset_unprocessed.py +0 -0
  377. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_aura_logger.py +0 -0
  378. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_batch_update_contract.py +0 -0
  379. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_budget_identity.py +0 -0
  380. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_cli_apply.py +0 -0
  381. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_cli_google_link.py +0 -0
  382. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_cli_inspect.py +0 -0
  383. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_cli_push_budget_geo.py +0 -0
  384. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_cli_reconcile.py +0 -0
  385. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_cli_status.py +0 -0
  386. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_cli_status_google.py +0 -0
  387. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_cli_sync.py +0 -0
  388. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_client_rate_limit.py +0 -0
  389. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_config_wizard.py +0 -0
  390. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_doctor.py +0 -0
  391. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_execute_plan.py +0 -0
  392. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_execute_plan_budget_geo.py +0 -0
  393. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_fixtures_validity.py +0 -0
  394. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_google_cache.py +0 -0
  395. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_google_client.py +0 -0
  396. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_google_manifest.py +0 -0
  397. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_google_parsers.py +0 -0
  398. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_google_vault.py +0 -0
  399. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_gsync_all.py +0 -0
  400. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_gsync_engine.py +0 -0
  401. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_imports.py +0 -0
  402. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_logout.py +0 -0
  403. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_migration.py +0 -0
  404. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_network_guard.py +0 -0
  405. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_offline_read_path.py +0 -0
  406. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_pairs.py +0 -0
  407. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_preflight_sweep.py +0 -0
  408. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_preflight_vault.py +0 -0
  409. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_prep_upload_formats.py +0 -0
  410. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_probe_browser.py +0 -0
  411. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_probe_shared_link.py +0 -0
  412. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_ratelimit.py +0 -0
  413. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_read_path.py +0 -0
  414. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_reconcile.py +0 -0
  415. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_retry_401.py +0 -0
  416. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_session.py +0 -0
  417. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_settings_budget.py +0 -0
  418. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_settings_resolution.py +0 -0
  419. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_sync_engine.py +0 -0
  420. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_token_refresh_extension.py +0 -0
  421. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_write_endpoints_failloud.py +0 -0
  422. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_write_formats_live.py +0 -0
  423. {pushframe-5.1.7 → pushframe-5.1.9}/tests/test_write_throttling.py +0 -0
@@ -12,12 +12,77 @@ every channel.
12
12
  `pushframe` is an unofficial community CLI for Aura Frames digital photo
13
13
  frames; it is not affiliated with Aura Frames Inc.
14
14
 
15
+ ## [5.1.9] - 2026-10-01
16
+
17
+ ### Fixed
18
+
19
+ - **`google-sync`/`google-album` no longer fail on albums whose final page is
20
+ short** (2026-10-01 live drift, the 757-item "Cadre" album): Google now
21
+ emits a continuation token even on a short final page (300+300+157), and
22
+ the past-the-end request answers the null-payload shape — which the loop
23
+ read as the September transient, burned its single retry on and failed
24
+ loud, hard-blocking every run on that album. The loop now treats a short
25
+ page (< 300 items) as terminal — the paginated-API convention — and never
26
+ requests past it; the single-retry transient recovery stays for the
27
+ genuine mid-listing case. One new test reproduces the drift with the live
28
+ page counts.
29
+
30
+ ## [5.1.8] - 2026-10-01
31
+
32
+ ### Changed
33
+
34
+ - **Documentation restructured around users, not development history.** The
35
+ README is now a user guide (highlight → install → connect → everyday use →
36
+ safety model → troubleshooting) and no longer carries the device-flow
37
+ transcripts, the write-path research narrative or the open
38
+ reverse-engineering questions; those moved to a new
39
+ [`docs/INTERNALS.md`](docs/INTERNALS.md) ("how it works" for curious
40
+ readers). docs/CLI.md's reconcile evidence story is condensed to what a
41
+ user needs. No behavior change.
42
+
43
+ ### Added
44
+
45
+ - **Every failed command now points at the documentation from the terminal**:
46
+ any non-zero exit prints one footer with the URLs of docs/ERRORS.md (every
47
+ error message explained) and docs/CLI.md (full command reference). It never
48
+ appears on success — a dry run or an aborted confirmation stays output-only.
49
+ - `docs/ERRORS.md`: every error message explained by symptom, meaning and
50
+ remedy (login/session, the refused-write 401 family, resolution ambiguity,
51
+ the Google safety gates, pacing/budget, scheduling) — the user's map from
52
+ "what does this message mean" to "what do I do".
53
+ - `docs/DEVELOPING.md`: the contributor guide — project layout, environment,
54
+ conventions (plain-language user text, offline-test contract, changelog
55
+ discipline), the verified-increment working method, and the release
56
+ process (one tag → PyPI + APT + GitHub Releases).
57
+ - `docs/INTERNALS.md`: how pushframe works internally — the
58
+ reverse-engineered cloud API, the Google mirror engine (cache, manifest,
59
+ safety gates), the anti-abuse findings, the device flows (documented from
60
+ code, not verified) and the open questions.
61
+
62
+ ### Changed (docs)
63
+
64
+ - The README's requirements and install sections no longer assume a
65
+ uv/Python setup: prerequisites are just the two accounts, the install
66
+ channels are ordered by simplicity (APT repository first — no Python
67
+ required, then the one-off .deb, then `uv tool install`/pipx, then from
68
+ source), and each channel states exactly what it needs.
69
+ - `pushframe schedule --help` now answers "what gets scheduled": the timer
70
+ runs a `google-sync` of the Google album onto the frame (`--pair NAME` →
71
+ `google-sync "<album>" --frame "<frame>" --apply --yes --scheduled`),
72
+ with the `--album/--frame`, `--sync-dir` (local-directory sync) and
73
+ `--at "OnCalendar"` alternatives plus copy-pasteable examples.
74
+ docs/CLI.md and the README spell out the same.
75
+ - Internal task codes (SAFE-xx, phase N, plan 11-xx, D-xx, MTF/TMR/PRF/SEC,
76
+ UAT) removed from all user-facing documentation AND from the CLI's own
77
+ output (`--help` strings, the mass-hide confirmation and the scheduled
78
+ skip message now speak plain language); two tests pinning the old
79
+ strings updated.
80
+
15
81
  ## [5.1.7] - 2026-10-01
16
82
 
17
83
  ### Fixed
18
84
 
19
- - **The live progress bar names the primitive that actually runs** (D-07,
20
- venus 2026-10-01): the removal loop of `execute_plan` emitted a
85
+ - **The live progress bar names the primitive that actually runs** (2026-10-01): the removal loop of `execute_plan` emitted a
21
86
  hardcoded `delete` kind on every per-item progress callback, so a hide
22
87
  run's bar read `delete ok <asset>` mid-run even though the final summary
23
88
  correctly said `Hidden` — the wording contract held on plan headers and
@@ -43,11 +108,11 @@ frames; it is not affiliated with Aura Frames Inc.
43
108
 
44
109
  - **`google-sync --apply` (and `sync --apply` / `push --apply` /
45
110
  `reconcile --remove`) no longer crash building the write budget on a
46
- token-session host** (venus, 2026-09-30, debug session
111
+ token-session host** (observed in production, 2026-09-30, debug session
47
112
  gsync-apply-budget-none-crash): the budget's account email was read
48
113
  from the ENVIRONMENT only while auth resolves env-then-stored-session
49
114
  — the config/env duality was broken at exactly that layer. With a
50
- stored token session and no env vars (venus's intended posture), the
115
+ stored token session and no env vars (that install's intended posture), the
51
116
  run authenticated fine, printed the plan, took the operator's `y`
52
117
  confirmation, then died on `email.encode()` inside the budget state
53
118
  filename. The identity now resolves through ONE helper
@@ -64,7 +129,7 @@ frames; it is not affiliated with Aura Frames Inc.
64
129
 
65
130
  ### Removed
66
131
 
67
- - The phase-24 sweep's `gsync_no_creds` case: with the vault gate standing
132
+ - The preflight sweep's `gsync_no_creds` case: with the vault gate standing
68
133
  BEFORE the Aura gate by design, a form-valid fake vault pushed the run
69
134
  past the gate onto the REAL Google network with a bogus cookie (the
70
135
  5.1.2 network guard covers pushd, not google.com). The Aura-side
@@ -75,13 +140,13 @@ frames; it is not affiliated with Aura Frames Inc.
75
140
  ### Fixed
76
141
 
77
142
  - **`google-sync` no longer claims "no Google session vault" on a healthy
78
- vault** (venus, 2026-09-30): the vault preflight probed the default path
143
+ vault** (observed in production, 2026-09-30): the vault preflight probed the default path
79
144
  WITHOUT `expanduser()` — a literal `~` path never exists, so the check
80
145
  fired on every machine whose vault was perfectly healthy (a
81
146
  `google-link` seconds earlier had saved it) — and its shape check
82
147
  demanded a JSON object while the vault is a JSON list of cookie
83
- records, so even the right path would have failed. Two stacked
84
- phase-24 bugs, masked until now because CI has no vault either and the
148
+ records, so even the right path would have failed. Two stacked
149
+ session-layer bugs, masked until now because CI has no vault either and the
85
150
  scheduled `--pair` branch skips this block entirely. One tell was in
86
151
  every transcript: `google-link` prints "existing Google session found"
87
152
  only when a vault READ succeeds. The preflight now expands the default
@@ -95,10 +160,10 @@ frames; it is not affiliated with Aura Frames Inc.
95
160
  ### Added
96
161
 
97
162
  - **One-shot TTY token refresh on every frames-reading verb** — `status`,
98
- `inspect`, `sync`, `push` and `google-sync` (venus, 2026-09-30): when
163
+ `inspect`, `sync`, `push` and `google-sync` (observed in production, 2026-09-30): when
99
164
  the stored token is refused (401) and stdin is a terminal, the command
100
165
  offers ONE re-login right there — the new token is persisted and the
101
- same run continues (venus proved a fresh login reads green while the
166
+ same run continues (production proved a fresh login reads green while the
102
167
  stored token was dead). All five verbs share one gate
103
168
  (`session.frames_read_with_refresh`), so the behavior, the failure
104
169
  shapes and the guardrails are byte-identical everywhere. Guardrails:
@@ -113,14 +178,14 @@ frames; it is not affiliated with Aura Frames Inc.
113
178
  ### Fixed
114
179
 
115
180
  - **`pushframe status` no longer tracebacks on a refused frames read**
116
- (venus, debug session status-crash-401-trip): a 401 with the trip's
181
+ (observed in production, debug session status-crash-401-trip): a 401 with the trip's
117
182
  `logout:true` body prints a named diagnosis — the remedy is
118
183
  `pushframe config` (refresh the stored token; a fresh login read frames
119
184
  fine minutes later, so on a READ that body means a dead token first),
120
185
  with the 24h-silence protocol reserved for the case where the same
121
186
  body recurs on a genuinely fresh login. A 475/429 on the read prints a
122
187
  named WAIT (never a re-login suggestion). Every shape exits 1 named —
123
- the PRF-02 no-traceback contract now holds on the token path's first
188
+ the no-traceback contract now holds on the token path's first
124
189
  authenticated call.
125
190
 
126
191
  ## [5.1.3] — 2026-09-30
@@ -128,7 +193,7 @@ frames; it is not affiliated with Aura Frames Inc.
128
193
  ### Fixed
129
194
 
130
195
  - **`pushframe config` — Enter now keeps the stored email, as the banner
131
- always promised** (venus, 5.1.2): an empty answer on a configured
196
+ always promised** (observed on 5.1.2): an empty answer on a configured
132
197
  install aborted with "no email given — aborting" instead of keeping
133
198
  it. With a stored token, Enter-Enter now finishes the wizard with ZERO
134
199
  API calls (the anti-abuse rule: no gratuitous login); typing a new
@@ -166,8 +231,8 @@ frames; it is not affiliated with Aura Frames Inc.
166
231
 
167
232
  - **The `tests` workflow is green again** (red on master since v5.1.0 —
168
233
  not a 5.1.1 regression): the 9 offline tests of the 401-retry and
169
- write-throttling suites relied on the pre-phase-24 re-login default
170
- (`aura.login`); phase 24 made the default token-aware, which fails
234
+ write-throttling suites relied on the old unconditional re-login default
235
+ (`aura.login`); the token-first session work made the default token-aware, which fails
171
236
  named off-TTY without env credentials — exactly the CI case. A local
172
237
  `.env` with real credentials masked it locally. All 9 `execute_plan`
173
238
  call sites now pin `relogin=aura.login`; zero product code changed.
@@ -176,7 +241,7 @@ frames; it is not affiliated with Aura Frames Inc.
176
241
 
177
242
  ### Changed
178
243
 
179
- - **Credible client identity** (venus 2026-09-30 anti-abuse lesson): the
244
+ - **Credible client identity** (production 2026-09-30 anti-abuse lesson): the
180
245
  user agent is now a setting — `USER_AGENT` (env `PUSHFRAME_USER_AGENT`,
181
246
  or `pushframe config set USER_AGENT …`) — whose default tracks a
182
247
  current Play build (`Aura/4.7.4271 (Android 36; Client)`) instead of
@@ -196,48 +261,48 @@ frames; it is not affiliated with Aura Frames Inc.
196
261
 
197
262
  ## [5.1.0] — 2026-09-29
198
263
 
199
- ### Added (phase 25: Multi-frame & Scheduling)
264
+ ### Added
200
265
 
201
- - **Named pairs** (MTF-01): `pushframe config pair add/remove/list` —
202
- `pairs` in config.json is a named dict (`{"cadre-venus": {"album": …,
266
+ - **Named pairs**: `pushframe config pair add/remove/list` —
267
+ `pairs` in config.json is a named dict (`{"family": {"album": …,
203
268
  "frame": …}}`); duplicates and unknown names fail named.
204
- - **`google-sync --pair <name>` / `--all`** (MTF-02/03): per-pair state
269
+ - **`google-sync --pair <name>` / `--all`**: per-pair state
205
270
  (manifest `~/.config/pushframe/pairs/<name>/`, cache
206
271
  `~/.local/state/pushframe/pairs/<name>/cache/`); `--all` runs every pair
207
- in sorted order with ONE shared write budget (account-level SAFE-02);
272
+ in sorted order with ONE shared write budget (the mass-hide guard applies account-wide);
208
273
  a failing pair is reported and never blocks the others; exit 1 if any
209
274
  failed.
210
- - **`pushframe schedule add/list/remove`** (TMR-01..03): systemd USER
275
+ - **`pushframe schedule add/list/remove`**: systemd USER
211
276
  timers (no root) — `pushframe-<job>.service/.timer`, oneshot,
212
277
  `Restart=no` (the next tick is the retry), `RandomizedDelaySec`, per-job
213
278
  log at `~/.local/state/pushframe/<job>.log`. ExecStart is fully
214
- non-interactive (token session); **`--scheduled` flips SAFE-02 to
215
- skip-and-log** (a timed run never mass-hides silently and never fails
279
+ non-interactive (token session); **`--scheduled` flips the mass-hide
280
+ threshold to skip-and-log** (a timed run never mass-hides silently and never fails
216
281
  the unit over a safety decision). Preflight names the systemd user
217
282
  session requirement with the `loginctl enable-linger` remedy
218
283
  (documented; never executed by the tool).
219
284
 
220
285
  ## [5.0.7] — 2026-09-29
221
286
 
222
- ### Added (phase 24: Token-First Sessions & Preflight Sweep)
287
+ ### Added (Token-First Sessions & Preflight Sweep)
223
288
 
224
- - **One session path for every command** (SEC-01/02): `inspect`,
289
+ - **One session path for every command**: `inspect`,
225
290
  `reconcile`, `sync`, `push` and `google-sync` now run from the stored
226
291
  token session (0600) with no password and no login call; env vars stay
227
292
  the override; a terminal session gets ONE password prompt whose token is
228
- persisted (SEC-01: the password is never written anywhere — file-content
293
+ persisted (the password is never written anywhere — file-content
229
294
  tested); non-interactive runs without credentials fail named.
230
- - **Token expiry** (D-01): a 401 while resuming the stored session prompts
295
+ - **Token expiry**: a 401 while resuming the stored session prompts
231
296
  once in a terminal (new token persisted, command continues) and raises
232
297
  `SessionExpiredError` with the remedy in scheduled runs. `execute_plan`'s
233
298
  401-retry relogin is token-aware (it previously assumed a password).
234
- - **`pushframe logout`** (SEC-03, D-02): deletes the stored token (and only
299
+ - **`pushframe logout`**: deletes the stored token (and only
235
300
  the token) — email and settings survive, mode stays 0600, idempotent.
236
- - **Preflights** (PRF-01, D-03): `google-sync` checks the vault up front
301
+ - **Preflights**: `google-sync` checks the vault up front
237
302
  (remedy: `google-link` + the headless ssh -X recipe); `sync`/`push` fail
238
303
  named on a nonexistent source directory BEFORE any network call (an
239
304
  empty directory remains a friendly "nothing to do").
240
- - **The traceback-free sweep** (PRF-02): a parametrized test over the
305
+ - **The traceback-free sweep**: a parametrized test over the
241
306
  failure-mode inventory proves every foreseeable mode ends named, with a
242
307
  remedy, and never a traceback.
243
308
 
@@ -248,7 +313,7 @@ frames; it is not affiliated with Aura Frames Inc.
248
313
  owned by the session path.
249
314
 
250
315
  ## [5.0.6] — 2026-09-29
251
- - **`pushframe doctor`** — the field write-probe the venus regressions
316
+ - **`pushframe doctor`** — the field write-probe the production regressions
252
317
  demanded: one 4×4 test image through the REAL write path (S3 +
253
318
  select_asset + batch_update), verify + cleanup, then a GO/NO-GO verdict
254
319
  with the 401 body classified. `--no-write` for reads-only. Closes the
@@ -259,7 +324,7 @@ frames; it is not affiliated with Aura Frames Inc.
259
324
 
260
325
  ### Added
261
326
 
262
- - **`pushframe config`** (v5.1, phase 23): interactive wizard that asks for
327
+ - **`pushframe config`** (v5.1): interactive wizard that asks for
263
328
  the email + password (hidden input), **verifies the login against the real
264
329
  Aura API before writing anything**, and stores email + session token —
265
330
  never the password — in `~/.config/pushframe/config.json` (0600, atomic
@@ -274,7 +339,7 @@ frames; it is not affiliated with Aura Frames Inc.
274
339
 
275
340
  ### Fixed
276
341
 
277
- - **`google-sync`/`sync`/`push` apply feedback was opaque** (venus
342
+ - **`google-sync`/`sync`/`push` apply feedback was opaque** (a production
278
343
  regression): the progress bar sat silent for minutes at a time — budget
279
344
  waits and inter-chunk cooldowns never reached the bar — and failures
280
345
  showed a bare `upload FAIL` with no cause. The bar now shows a live
@@ -289,14 +354,14 @@ frames; it is not affiliated with Aura Frames Inc.
289
354
  - The abort message on the 5-consecutive-failures breaker now states what
290
355
  to expect: confirmed items ARE on the frame, the next run recognizes
291
356
  them and will not upload them twice, wait ~30 min before retrying.
292
- - **Scoped-trip honesty** (second venus regression): `pushframe status`
357
+ - **Scoped-trip honesty** (second production regression): `pushframe status`
293
358
  staying green does NOT mean writes will work — the anti-abuse trip can
294
359
  be scoped to the assets surface (write endpoints AND the
295
360
  `asset_for_local_identifier` verify-probe read) while login/frames keep
296
361
  answering. The abort message no longer suggests status as an all-clear;
297
362
  it prescribes 60+ min from the abort and a single, solitary retry call.
298
363
  - **"Request Unauthenticated" + logout:true identified as the trip's
299
- disguise** (fourth venus regression, decisive capture): the body arrived
364
+ disguise** (fourth production regression, decisive capture): the body arrived
300
365
  on a FRESH token immediately after a successful re-login, one item after
301
366
  a doctor probe had WRITTEN fine — so Pushd's "Request Unauthenticated"
302
367
  here means "we refuse your writes (trip)", not "your token is bad". The
@@ -315,7 +380,7 @@ frames; it is not affiliated with Aura Frames Inc.
315
380
  Forwarded only when supplied — the historical default (50) otherwise
316
381
  rules. The anti-trip drill (doctor → wait → batch-size) is documented in
317
382
  docs/CLI.md.
318
- - **401 bodies are captured and classified** (third venus regression): an
383
+ - **401 bodies are captured and classified** (third production regression): an
319
384
  HTTP 401 exception now carries the server's response body (redacted
320
385
  through the same filter as request logs, truncated to 300 chars, also
321
386
  debug-logged) — so per-item failure reasons, verify-probe errors and the
@@ -452,7 +517,7 @@ Milestone summary — see `.planning/MILESTONES.md` for the full retros.
452
517
  `google-link` (dedicated Chrome profile, cookie vault `0600`),
453
518
  `google-album` (full walk, exact byte counts), `google-sync`
454
519
  (hide-by-default mirror semantics, pruned cache + persistent manifest,
455
- SAFE-01..04 guards); live UAT two-run proof (upload run → zero-upload
520
+ mirror safety gates); live two-run proof (upload run → zero-upload
456
521
  steady state); debt closeout (AWS config out of code, single logger
457
522
  per process, transport seam).
458
523
  - **v3.0 — direct transport rewrite**: `Client` over `httpx` (HTTP/2),