Skip to content

Decision Log

Point-in-time records of specific decisions — context, alternatives, and reasoning as they stood when each call was made. For current policy and principles, see Design Principles.

Doc Date Status Summary
Project Fork 2026-05-09 decided Fork from xing5/mcp-google-sheets; alternatives evaluated
Composite Tools 2026-05-22 decided Case analysis of specific composite tools approved or ruled out
Testing Approach 2026-05-13 decided Why AI-directed manual verification over automated integration tests
Publishing Strategy 2026-05-23 draft Two-track PyPI release (stable + edge); version injection open
Docs Formatting Architecture 2026-06-17 decided Two-layer approach (direct API tools + HTML abstraction via AST); phase plan for #41, #65–#70, #79–#82
Chart Theming and Phase 3 Integration 2026-06-17 decided No parsing layer for charts; no Vega-Lite adoption; unified brand config (docs + charts sections) for Phase 3 theme system
Grid Data Size Cap 2026-07-03 decided Post-fetch response-size check (not pre-fetch cell-count estimate) for get_sheet_data(include_grid_data=True); configurable cap + local_path bypass; empirically falsified two earlier approaches
Cache Invalidation 2026-07-07 decided set_cache_ttl tool for runtime TTL; modifiedTime-based validation for sheet/doc caches only (not folders/calendar); opt-out via CACHE_VALIDATE_MODIFIED_TIME
Dev-Team Roles 2026-07-11 decided Named Orchestrator/Dev/QA ×2-lane team, persistent worktree slots, one combined MCP config for Agent View, branch-prefix lane routing
Async Tool Execution 2026-07-12 decided Full tool layer converted to async def + asyncio.to_thread(); asyncio.gather() for 6 multi-call tools; per-thread HTTP transport fix for the newly-introduced shared-service concurrency risk; cache.py stays synchronous by design
Release QA Lead and Tech Writer Roles 2026-07-12 decided Aziz/Amy persistent slots, no dedicated MCP server, Aziz borrows Sky/Kit via Agent-tool subagents for sharded live release QA, Amy claims documentation-labeled issues
Repositioning 2026-07-14 decided Source-verified comparison vs. official Google Workspace MCP (dev preview, no Sheets/Docs coverage at all) and community alternatives; informational framing, not a superiority claim; narrows the Docs "deepest" claim, surfaces gaps to roadmap.md Tier 4
sync_folder Recursion 2026-07-15 decided recursive param walks matching subfolders to any depth; asymmetric subfolders only created/entered on the side direction permits, else reported under folders_skipped; fixed a pre-existing folder-as-Workspace-file bug found during the same-logic extraction
Prompt QA Role 2026-07-21 decided Bob (Senior Prompt Engineer) persistent slot; team-process self-edits now require prompt-qa-approved PR review before Kai merges (mechanical fixes exempt); retires the 2026-07-18 direct-push-to-develop grant that let an unreviewed permission grant harden into a standing exception
Auth-Status Limitation Categories 2026-08-02 decided server://auth-status's _SA_LIMITED_TOOLS generalized to _SA_LIMITATIONS, a per-failure-class list (reason/alternatives no longer shared across unrelated restrictions); adds transfer_ownership's no-personal-Drive-identity class alongside the existing no-storage-quota class; ADC's own identity ambiguity scoped out to #506
Response-Size Cap Re-Evaluation 2026-08-07 decided Live-tested up to 2MB: the client-connection-death failure mode the cap defends against no longer reproduces on the current primary MCP client; raised MAX_TOOL_RESPONSE_CHARS default 40000 → 1000000, kept the hard-error mechanism as defense-in-depth for other/untested clients; cross-client guidance scoped out to #555
Pillow Image Dependency 2026-08-07 decided Added Pillow (not hand-rolled header parsing) as a core dependency for inline-image dimension checks + opt-in auto-downscale (#400); validation/downscale scoped to sources whose bytes are already local or in Drive, not bare http(s):// URIs
mcp v2 Resource Context Access 2026-08-20 decided mcp.server.fastmcpmcp.server.mcpserver (#175) was a search-and-replace everywhere except two resources: get_context() has no v2 replacement for a static resource, so server://auth-status reads a new process-wide auth.get_lifespan_context() singleton instead; the template resource spreadsheet://{id}/info uses v2's native ctx: Context injection, which tools already relied on unchanged
Local-Filesystem Test Harness 2026-08-22 decided Opt-in tests/integration/ pytest package spawns the real server over stdio for the ~27 ⚠️ local-filesystem QA cases decision-testing.md's human-led flow structurally can't reach; self-skips with no credentials/CI impact; 3 representative tests, not all 27; CI wiring left as a separate open decision
Comments as a First-Class, Cross-Suite Capability 2026-08-28 decided Generalizes the existing Docs-flavored comment tools to tools/drive/comments.py under generic names (breaking rename, no domain-duplicated wrappers — Google's own drive scope doesn't split comments by product either); full comments/replies CRUD parity target; cell notes get their own module; cell-anchored Sheets comments confirmed infeasible via three live experiments, closed outright