design: preserve deployed import and workbook rename routes in tabs
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. |