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