oficina / sheets Public

design: preserve deployed import and workbook rename routes in tabs

Paul Campbell pushed by paul@keymail.dev d8fc99f80e52d7d916e89262934c8eacecac057f parent ee62d39
1 file changed, +5 −1
  • docs/superpowers/specs/2026-09-07-workbook-tabs.md +5 −1

CI passed — run details

diff --git a/docs/superpowers/specs/2026-09-07-workbook-tabs.md b/docs/superpowers/specs/2026-09-07-workbook-tabs.md
index aa1cd73..5da4580 100644
--- a/docs/superpowers/specs/2026-09-07-workbook-tabs.md
+++ b/docs/superpowers/specs/2026-09-07-workbook-tabs.md
@@ -10,7 +10,7 @@ This is one subsystem, not a tab strip laid over first-tab handlers. Existing ce
## Source findings
-- app.go has 19 session-gated /sheets routes (the older spec said 21; the current route registrations were recounted), counting list/create/import. The anonymous capability view is an additional route. There are also three job status routes that remain unrelated.
+- Main 4aea8f4 has 19 session-gated /sheets routes, but deployed 7212864 adds GET /sheets/import and POST /sheets/{sheetID}/rename, giving the 21-route baseline named in the older spec. Reconciliation a75c7a9 preserves both deployed routes plus main doctrine and has Fable approval, with copy/canary gates still pending. Tabs must build on that reconciled baseline. The anonymous capability view is additional; three job status routes remain unrelated.
- sheetsvc.go SheetSummary embeds the first TabID/TabName. summarize orders by position then ID. tabName currently falls back to Sheet 1 on unreadable names.
- handlers_sheets.go sheetFromURL checks access using sheetSummary and never reads a requested tab.
- handlers_table.go openTabFor simply opens summary.TabID. Comments/history/view and table writes reuse this assumption. All their redirects are currently sheet-only.
@@ -28,8 +28,10 @@ P denotes /sheets/{sheetID}; T denotes P/tabs/{tabID}. Keep every existing URL w
| --- | --- | --- |
| GET /sheets | Whole collection | Unchanged; preview uses first tab |
| POST /sheets | Whole workbook | Create first tab, redirect to its T |
+| GET /sheets/import | Whole workbook | Existing import form remains available, including scriptless paths |
| POST /sheets/import | Whole workbook | Existing job flow; see import sequencing |
| GET P | Default-tab alias | Resolve first tab; 303 to T |
+| POST P/rename | Whole workbook | Preserve current rename behavior; numeric returnTab must pair with this workbook before redirecting to T |
| GET P/export.xlsx | Whole workbook | Export all tabs in workbook order |
| GET P/table | First-tab compatibility alias | GET T/table |
| POST P/table | First-tab compatibility write | POST T/table; redirect preserves tab/page |
@@ -104,3 +106,5 @@ Multi-worksheet import's existing trigger fires when a second tab is reachable.
4. Parent's isolated canary environment/authentication setup.
No user decision is required to preserve the existing no-tab-deletion scope. If deletion is requested later, surface the already-recorded last/non-empty-tab ruling explicitly.
+
+Deferred workbook title events: existing rename changes neither live title displays nor cell history. Trigger a reviewed workbook metadata-event design when rename/tab metadata needs cross-session freshness; do not describe title changes as cell edits or silently overload the content watermark. Reconciliation review20 identified this follow-up.