Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
77f60be
docs(sheet-sync): design spec for Google Sheets <-> task board sync
bkearns Jul 14, 2026
245db40
docs(sheet-sync): ship sync skill in forge repo (resolve OQ-2)
bkearns Jul 14, 2026
3a98dee
docs(sheet-sync): implementation plan (11 TDD tasks)
bkearns Jul 14, 2026
f23786c
feat(sheet-sync): scaffold crate, canonical model, id normalization; …
bkearns Jul 14, 2026
6110e6a
feat(sheet-sync): per-sheet mapping config with validation
bkearns Jul 14, 2026
c6df98f
refactor(sheet-sync): make alias_path ancestor-walk testable via inje…
bkearns Jul 14, 2026
dd7d136
docs(sheet-sync): fix example TOML key ordering (top-level arrays bef…
bkearns Jul 14, 2026
ec44332
feat(sheet-sync): map grid to canonical rows with fail-loud header + …
bkearns Jul 14, 2026
54cbf27
feat(sheet-sync): sidecar state file for row↔task join
bkearns Jul 14, 2026
e033b13
feat(sheet-sync): pull planning with status map + never-move-backward
bkearns Jul 14, 2026
a82f885
fix(sheet-sync): protect Archived from pull + stable content_hash fie…
bkearns Jul 14, 2026
ceeb4d3
feat(sheet-sync): push edit computation with lifecycle handoff + blas…
bkearns Jul 14, 2026
4344728
feat(sheet-sync): SheetsApi/BoardSink seam + pull/push orchestration …
bkearns Jul 14, 2026
4aa44c7
fix(sheet-sync): only record last_push_status when a status cell was …
bkearns Jul 14, 2026
cd126d1
feat(sheet-sync): BoardExec BoardSink over CQL task store (+Clone on …
bkearns Jul 14, 2026
ccc1ac0
feat(sheet-sync): GoogleSheets ureq client + OAuth loopback flow
bkearns Jul 14, 2026
1e071f2
fix(sheet-sync): surface redacted HTTP error bodies, disclose token c…
bkearns Jul 14, 2026
190c67c
feat(sheet-sync): frg sheet CLI + sheet_pull/push/auth MCP tools
bkearns Jul 14, 2026
252af3a
docs(sheet-sync): example mapping, sync skill, changelog
bkearns Jul 14, 2026
32106a1
fix(sheet-sync): crash-safe pull, write-boundary blast-radius, fail-l…
bkearns Jul 14, 2026
a7297cb
fix(sheet-sync): CSPRNG oauth state nonce, fallible token_cache_path,…
bkearns Jul 14, 2026
2f5968e
docs(sheet-sync): promote spec todo -> implemented
bkearns Jul 14, 2026
6fdd4c7
docs(sheet-sync): use placeholder spreadsheet_id in examples/tests/sp…
bkearns Jul 14, 2026
0858b0a
docs(sheet-sync): document Google Sheets sync setup + commands in README
bkearns Jul 14, 2026
fb85338
feat(sheet-sync): non-interactive service-account auth (ring RS256 JW…
bkearns Jul 14, 2026
c05b944
feat(sheet-sync): service-account provisioning helper + headless setu…
bkearns Jul 14, 2026
07b9dfa
fix(sheet-sync): skip empty template rows (id present, no Title) on pull
bkearns Jul 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased

### Added
- **Google Sheets ↔ task board sync.** New `frg sheet auth|pull|push` and MCP
`sheet_auth`/`sheet_pull`/`sheet_push`: pull open rows from a Google Sheet of
bugs into the CQL task board (idempotent, never-move-backward) and push
status/fix-version/resolution-notes back to the sheet's own cells, writing
only the configured `writable` columns with a lifecycle-handoff guard. OAuth
(installed-app loopback, `spreadsheets` scope) via `FORGE_GOOGLE_OAUTH_CLIENT`;
per-sheet mapping at `.forge/sheets/<alias>.toml` (see
`crates/sheet-sync/examples/spoton-qa.toml`).
- **Trusted web read/search tools.** Added `frg fetch-url` / MCP `fetch_url` for
read-only page extraction through Forge's own HTTP path (no persistence, no
third-party extraction provider, no auxiliary LLM), plus `frg web-search` /
Expand Down
84 changes: 51 additions & 33 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ members = [
]

[workspace.package]
version = "0.14.0"
version = "0.15.0"
edition = "2021"
license = "Apache-2.0"

Expand Down
Loading