mcp-gee-sweet 0.9.2.dev241__tar.gz → 0.9.2.dev243__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 (249) hide show
  1. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/PKG-INFO +1 -1
  2. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/roadmap.md +1 -1
  3. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/sheets/helpers.py +2 -2
  4. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/sheets/test_helpers.py +5 -0
  5. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/sheets/test_structure.py +15 -0
  6. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.claude/commands/cleanup-worktrees.md +0 -0
  7. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.claude/commands/merge-pr.md +0 -0
  8. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.claude/commands/notify-kai.md +0 -0
  9. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.claude/commands/notify-partner.md +0 -0
  10. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.claude/commands/orchestrator.md +0 -0
  11. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.claude/commands/prep-for-pr.md +0 -0
  12. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.claude/commands/qa-kickoff.md +0 -0
  13. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.claude/commands/release.md +0 -0
  14. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.claude/commands/retro.md +0 -0
  15. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.claude/commands/roadmap-status.md +0 -0
  16. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.claude/commands/start-worktree.md +0 -0
  17. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.claude/commands/team-member.md +0 -0
  18. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.claude/commands/verify-pr.md +0 -0
  19. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.claude/settings.json +0 -0
  20. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.claude/team-roles/amy.md +0 -0
  21. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.claude/team-roles/aziz.md +0 -0
  22. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.claude/team-roles/bob.md +0 -0
  23. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.claude/team-roles/dev.md +0 -0
  24. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.claude/team-roles/joy.md +0 -0
  25. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.claude/team-roles/kai.md +0 -0
  26. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.claude/team-roles/qa.md +0 -0
  27. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.dockerignore +0 -0
  28. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  29. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  30. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  31. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.github/dependabot.yml +0 -0
  32. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.github/workflows/ci.yml +0 -0
  33. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.github/workflows/docs.yml +0 -0
  34. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.github/workflows/publish-dev.yml +0 -0
  35. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.github/workflows/release.yml +0 -0
  36. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.gitignore +0 -0
  37. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.pre-commit-config.yaml +0 -0
  38. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/.python-version +0 -0
  39. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/CHANGELOG.md +0 -0
  40. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/CLAUDE.md +0 -0
  41. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/CODE_OF_CONDUCT.md +0 -0
  42. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/CONTRIBUTING.md +0 -0
  43. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/Dockerfile +0 -0
  44. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/LICENSE +0 -0
  45. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/Makefile +0 -0
  46. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/README.md +0 -0
  47. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/SECURITY.md +0 -0
  48. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docker-compose.yml +0 -0
  49. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/assets/logo.png +0 -0
  50. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/auth.md +0 -0
  51. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/client-setup.md +0 -0
  52. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/configuration.md +0 -0
  53. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-async-tool-execution.md +0 -0
  54. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-auth-status-limitation-categories.md +0 -0
  55. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-cache-invalidation.md +0 -0
  56. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-chart-theming.md +0 -0
  57. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-comments-first-class.md +0 -0
  58. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-composite-tools.md +0 -0
  59. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-condition-type-docstring-generation.md +0 -0
  60. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-converted-doc-change-detection.md +0 -0
  61. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-dev-team.md +0 -0
  62. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-docs-formatting.md +0 -0
  63. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-fork.md +0 -0
  64. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-gmail-domain.md +0 -0
  65. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-grid-data-size-cap.md +0 -0
  66. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-local-fs-test-harness.md +0 -0
  67. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-mcp-v2-resource-context-access.md +0 -0
  68. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-pillow-image-dependency.md +0 -0
  69. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-prompt-qa-role.md +0 -0
  70. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-publishing.md +0 -0
  71. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-release-docs-roles.md +0 -0
  72. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-repositioning.md +0 -0
  73. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-response-size-cap-generalization.md +0 -0
  74. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-response-size-cap-reevaluation-519.md +0 -0
  75. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-review-finding-ticket-bar.md +0 -0
  76. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-supports-all-drives-lint-check.md +0 -0
  77. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-sync-folder-recursion.md +0 -0
  78. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-testing.md +0 -0
  79. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/decision-tool-error-visibility.md +0 -0
  80. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/decisions/index.md +0 -0
  81. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/design/blockquote-representation.md +0 -0
  82. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/design/borderless-table-columns.md +0 -0
  83. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/design/doc-to-markdown.md +0 -0
  84. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/design/docs-ast-pipeline.md +0 -0
  85. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/design/effectiveformat-spike.md +0 -0
  86. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/design/heading-anchor-resolution.md +0 -0
  87. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/design/image-conversion.md +0 -0
  88. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/design/index.md +0 -0
  89. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/design/markdown-support.md +0 -0
  90. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/design/module-history.md +0 -0
  91. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/design/phase3-theme-system.md +0 -0
  92. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/design/sse-consent-off-event-loop.md +0 -0
  93. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/design.md +0 -0
  94. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/index.md +0 -0
  95. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/known-limitations.md +0 -0
  96. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/notes-read.md +0 -0
  97. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/README.md +0 -0
  98. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/fixtures/qa-fixture-pixel.png +0 -0
  99. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/fixtures/tc-d195-create-doc.md +0 -0
  100. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/fixtures/tc-d196-create-doc.html +0 -0
  101. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/fixtures/tc-d213-dollar-escape.md +0 -0
  102. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/fixtures/tc-d226-heading-table.md +0 -0
  103. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/fixtures/tc-doc102-image-conversion.html +0 -0
  104. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/fixtures/tc-doc103-image-conversion.md +0 -0
  105. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/fixtures/tc-doc104-nested-lists.html +0 -0
  106. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/fixtures/tc-doc105-nested-lists-gfm.md +0 -0
  107. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/fixtures/tc-doc106-nested-lists-4space.md +0 -0
  108. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/fixtures/tc-doc135-paragraph-boundary.md +0 -0
  109. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/fixtures/tc-doc136-interrupted-block-boundary.md +0 -0
  110. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/fixtures/tc-doc137-inline-hr-no-block-ancestor.html +0 -0
  111. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/fixtures/tc-doc138-nbsp-spacer-paragraph.md +0 -0
  112. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/fixtures/tc-doc141-mismatched-list-tags.html +0 -0
  113. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/fixtures/tc-doc142-heading-anchors.md +0 -0
  114. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/fixtures/tc-doc144-anchor-in-table-cell.md +0 -0
  115. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/fixtures/tc-doc145-anchor-on-first-element.md +0 -0
  116. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/fixtures.template.md +0 -0
  117. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/gmail-test-plan.md +0 -0
  118. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/operations.yaml +0 -0
  119. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/playwright_oauth.md +0 -0
  120. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/results/.gitkeep +0 -0
  121. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/results/2026-06-02.md +0 -0
  122. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/results/2026-06-14.md +0 -0
  123. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/results/2026-06-17.md +0 -0
  124. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/results/2026-06-18.md +0 -0
  125. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/results/2026-06-21-drive-discovery.md +0 -0
  126. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/results/2026-06-21-sheets-delete-clear.md +0 -0
  127. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/results/2026-06-28.md +0 -0
  128. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/results/2026-07-04-docs.md +0 -0
  129. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/results/2026-07-04-drive-smoke.md +0 -0
  130. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/results/2026-07-04-infra.md +0 -0
  131. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/results/2026-07-04-sheets_read.md +0 -0
  132. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/results/2026-07-04.md +0 -0
  133. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/results/2026-09-04.md +0 -0
  134. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/retro-v0.8.0.md +0 -0
  135. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/retro-v0.9.0.md +0 -0
  136. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/run.md +0 -0
  137. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/runs/README.md +0 -0
  138. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/runs/v0.8.0.md +0 -0
  139. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/runs/v0.8.1.md +0 -0
  140. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/runs/v0.9.0.md +0 -0
  141. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/setup.md +0 -0
  142. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/tests/calendar.md +0 -0
  143. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/tests/docs_content.md +0 -0
  144. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/tests/docs_layout.md +0 -0
  145. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/tests/docs_style.md +0 -0
  146. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/tests/docs_tables.md +0 -0
  147. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/tests/drive_activity.md +0 -0
  148. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/tests/drive_files.md +0 -0
  149. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/tests/drive_sharing.md +0 -0
  150. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/tests/drive_transfer.md +0 -0
  151. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/tests/gmail.md +0 -0
  152. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/tests/infra.md +0 -0
  153. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/tests/sheets_charts.md +0 -0
  154. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/tests/sheets_mgmt.md +0 -0
  155. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/tests/sheets_read.md +0 -0
  156. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/qa/tests/sheets_write.md +0 -0
  157. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/style-guide.md +0 -0
  158. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/docs/tools.md +0 -0
  159. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/mkdocs.yml +0 -0
  160. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/pyproject.toml +0 -0
  161. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/pyrightconfig.json +0 -0
  162. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/scripts/check_supports_all_drives.py +0 -0
  163. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/scripts/gen_tool_docs.py +0 -0
  164. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/scripts/lane_context_hook.py +0 -0
  165. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/scripts/oauth_setup.py +0 -0
  166. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/scripts/qa_cancel_insert_local_images.py +0 -0
  167. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/scripts/qa_gmail_fixtures.py +0 -0
  168. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/scripts/setup_team.sh +0 -0
  169. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/scripts/write_team_mcp_configs.sh +0 -0
  170. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/server.json +0 -0
  171. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/.env.template +0 -0
  172. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/__init__.py +0 -0
  173. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/auth.py +0 -0
  174. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/cache.py +0 -0
  175. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/http_transport.py +0 -0
  176. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/server.py +0 -0
  177. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/sse_shutdown.py +0 -0
  178. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/__init__.py +0 -0
  179. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/cache.py +0 -0
  180. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/calendar.py +0 -0
  181. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/concurrency.py +0 -0
  182. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/docs/__init__.py +0 -0
  183. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/docs/anchors.py +0 -0
  184. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/docs/ast.py +0 -0
  185. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/docs/ast_to_markdown.py +0 -0
  186. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/docs/comments.py +0 -0
  187. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/docs/content.py +0 -0
  188. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/docs/doc_to_ast.py +0 -0
  189. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/docs/editing.py +0 -0
  190. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/docs/emitter.py +0 -0
  191. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/docs/html_parser.py +0 -0
  192. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/docs/images.py +0 -0
  193. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/docs/indices.py +0 -0
  194. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/docs/layout.py +0 -0
  195. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/docs/markdown_export.py +0 -0
  196. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/docs/named_ranges.py +0 -0
  197. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/docs/style.py +0 -0
  198. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/docs/tables.py +0 -0
  199. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/drive/__init__.py +0 -0
  200. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/drive/activity.py +0 -0
  201. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/drive/files.py +0 -0
  202. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/drive/sharing.py +0 -0
  203. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/drive/transfer.py +0 -0
  204. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/gmail.py +0 -0
  205. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/pagination.py +0 -0
  206. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/response_limits.py +0 -0
  207. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/sheets/__init__.py +0 -0
  208. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/sheets/data.py +0 -0
  209. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/src/mcp_gee_sweet/tools/sheets/structure.py +0 -0
  210. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/__init__.py +0 -0
  211. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/conftest.py +0 -0
  212. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/drive/__init__.py +0 -0
  213. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/drive/test_activity.py +0 -0
  214. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/drive/test_files.py +0 -0
  215. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/drive/test_sharing.py +0 -0
  216. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/drive/test_transfer.py +0 -0
  217. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/fakes.py +0 -0
  218. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/integration/__init__.py +0 -0
  219. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/integration/conftest.py +0 -0
  220. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/integration/test_local_fs_harness.py +0 -0
  221. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/sheets/__init__.py +0 -0
  222. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/sheets/test_data.py +0 -0
  223. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_auth.py +0 -0
  224. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_cache.py +0 -0
  225. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_calendar.py +0 -0
  226. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_check_supports_all_drives.py +0 -0
  227. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_concurrency.py +0 -0
  228. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_docs_anchors.py +0 -0
  229. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_docs_comments.py +0 -0
  230. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_docs_content.py +0 -0
  231. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_docs_core.py +0 -0
  232. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_docs_editing.py +0 -0
  233. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_docs_images.py +0 -0
  234. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_docs_indices.py +0 -0
  235. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_docs_layout.py +0 -0
  236. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_docs_markdown_export.py +0 -0
  237. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_docs_named_ranges.py +0 -0
  238. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_docs_style.py +0 -0
  239. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_docs_tables.py +0 -0
  240. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_gen_tool_docs.py +0 -0
  241. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_gmail.py +0 -0
  242. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_lane_context_hook.py +0 -0
  243. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_qa_gmail_fixtures.py +0 -0
  244. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_response_limits.py +0 -0
  245. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_server.py +0 -0
  246. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_server_json.py +0 -0
  247. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_sse_shutdown.py +0 -0
  248. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/tests/test_team_mcp_configs.py +0 -0
  249. {mcp_gee_sweet-0.9.2.dev241 → mcp_gee_sweet-0.9.2.dev243}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: mcp-gee-sweet
3
- Version: 0.9.2.dev241
3
+ Version: 0.9.2.dev243
4
4
  Summary: MCP server for Google Workspace — Sheets, Drive, Docs (HTML or Markdown), and Calendar.
5
5
  Project-URL: Homepage, https://github.com/khuisman/mcp-gee-sweet
6
6
  Project-URL: Bug Tracker, https://github.com/khuisman/mcp-gee-sweet/issues
@@ -273,7 +273,7 @@ Same shape as v0.8.1 — stabilize on defects that surfaced since v0.9.0 shipped
273
273
  **Calendar hardening** _(triaged out of `backlog` 2026-09-11)_
274
274
 
275
275
  **Testing** _(triaged out of `backlog` 2026-09-11)_
276
- - [ ] **Bundle:** test-suite tightening, one PR closing [#392](https://github.com/khuisman/mcp-gee-sweet/issues/392), [#526](https://github.com/khuisman/mcp-gee-sweet/issues/526), [#551](https://github.com/khuisman/mcp-gee-sweet/issues/551), [#561](https://github.com/khuisman/mcp-gee-sweet/issues/561), [#574](https://github.com/khuisman/mcp-gee-sweet/issues/574) — lane B ([#891](https://github.com/khuisman/mcp-gee-sweet/issues/891))
276
+ - [x] **Bundle:** test-suite tightening, one PR closing [#392](https://github.com/khuisman/mcp-gee-sweet/issues/392), [#526](https://github.com/khuisman/mcp-gee-sweet/issues/526), [#551](https://github.com/khuisman/mcp-gee-sweet/issues/551), [#561](https://github.com/khuisman/mcp-gee-sweet/issues/561), [#574](https://github.com/khuisman/mcp-gee-sweet/issues/574) — lane B (PR #924) ([#891](https://github.com/khuisman/mcp-gee-sweet/issues/891))
277
277
  - [ ] `qa`: `search_files` has no unit test coverage for the error-dict path ([#573](https://github.com/khuisman/mcp-gee-sweet/issues/573))
278
278
 
279
279
  **Infrastructure**
@@ -65,9 +65,9 @@ def _parse_a1_notation(range_str: str) -> dict[str, int]:
65
65
  if not range_str:
66
66
  raise ValueError("Invalid A1 notation: empty string")
67
67
 
68
- match = re.match(r"^([A-Z]+)?(\d+)?(?::([A-Z]+)?(\d+)?)?$", range_str.upper())
68
+ match = re.fullmatch(r"([A-Z]+)?(\d+)?(?::([A-Z]+)?(\d+)?)?", range_str.upper())
69
69
 
70
- if not match:
70
+ if not match or not any(match.groups()):
71
71
  raise ValueError(f"Invalid A1 notation: {range_str}")
72
72
 
73
73
  start_col, start_row, end_col, end_row = match.groups()
@@ -48,6 +48,11 @@ class TestLetterToColumnIndex:
48
48
 
49
49
 
50
50
  class TestParseA1Notation:
51
+ @pytest.mark.parametrize("range_str", [":", "A1\n", "1:2\n", "B:D\n"])
52
+ def test_incomplete_or_trailing_newline_range_raises(self, range_str):
53
+ with pytest.raises(ValueError, match="Invalid A1 notation"):
54
+ _parse_a1_notation(range_str)
55
+
51
56
  def test_single_cell(self):
52
57
  result = _parse_a1_notation("A1")
53
58
  assert result["startColumnIndex"] == 0
@@ -3,6 +3,8 @@
3
3
  from itertools import groupby
4
4
  from unittest.mock import AsyncMock, MagicMock
5
5
 
6
+ import pytest
7
+
6
8
  from mcp_gee_sweet.cache import SheetInfo
7
9
  from mcp_gee_sweet.tools.sheets import structure as sheets_structure_module
8
10
 
@@ -1260,6 +1262,19 @@ class TestResizeColumns:
1260
1262
 
1261
1263
 
1262
1264
  class TestFormatCells:
1265
+ @pytest.mark.parametrize("range_str", [":", "A1\n"])
1266
+ async def test_malformed_range_does_not_format_any_cells(self, range_str):
1267
+ svc = self._sheets_service()
1268
+ result = await _structure_tools["format_cells"](
1269
+ spreadsheet_id="ss1",
1270
+ sheet="Sheet1",
1271
+ range=range_str,
1272
+ bold=True,
1273
+ ctx=_make_ctx(sheets_service=svc, cache=None),
1274
+ )
1275
+ assert "error" in result
1276
+ svc.spreadsheets.return_value.batchUpdate.assert_not_called()
1277
+
1263
1278
  def _sheets_service(self, sheet_id=0):
1264
1279
  mock = MagicMock()
1265
1280
  mock.spreadsheets.return_value.get.return_value.execute.return_value = {