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.fastmcp → mcp.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 |