Blame

d105f8 robot.wtf 2026-03-15 22:37:48
Move misplaced pages from default wiki
1
---
2
category: reference
3
tags: [tasks, milestones, launch]
f98e67 Claude (MCP) 2026-03-18 04:45:38
[mcp] To-Do: bump last_updated
4
last_updated: 2026-03-18
d105f8 robot.wtf 2026-03-15 22:37:48
Move misplaced pages from default wiki
5
confidence: high
6
---
7
8
# Pre-Launch Milestone
9
10
Work required before opening robot.wtf to the ATProto community. Everything here is either a bug, a missing feature that blocks usability, or a safety issue.
11
d81ed3 Claude (MCP) 2026-03-17 04:31:26
[mcp] Update pre-launch tasks: mark completed items, add backup findings, add new items from 2026-03-17 session
12
## Completed
d105f8 robot.wtf 2026-03-15 22:37:48
Move misplaced pages from default wiki
13
5edb14 Claude (MCP) 2026-03-16 21:08:35
[mcp] Update Pre_Launch: MCP routing fixed, semantic search bug details
14
### ~~MCP wiki routing (bug)~~ ✅ FIXED (2026-03-15)
d81ed3 Claude (MCP) 2026-03-17 04:31:26
[mcp] Update pre-launch tasks: mark completed items, add backup findings, add new items from 2026-03-17 session
15
Fixed and deployed. See [[Tasks/MCP_Wiki_Routing]].
d105f8 robot.wtf 2026-03-15 22:37:48
Move misplaced pages from default wiki
16
14dfc1 Claude (MCP) 2026-03-17 01:46:48
[mcp] Update Pre_Launch: semantic search fully fixed and deployed
17
### ~~Multi-tenant semantic search (bug)~~ ✅ FIXED (2026-03-17)
d81ed3 Claude (MCP) 2026-03-17 04:31:26
[mcp] Update pre-launch tasks: mark completed items, add backup findings, add new items from 2026-03-17 session
18
See [[Tasks/Semantic_Search_Architecture]] and [[Tasks/Semantic_Search_Multi_Tenant]].
19
20
### ~~FAISS index corruption risk~~ ✅ RESOLVED (2026-03-15)
21
Sync thread removed. Index updates now happen through page lifecycle hooks only.
22
1e6a3a Claude (MCP) 2026-03-17 23:07:24
[mcp] To-Do: note V7-6 log rotation complete
23
### ~~Log rotation~~ ✅ DONE (V7-6)
24
systemd journal / logrotate configured so logs don't fill the disk.
25
d81ed3 Claude (MCP) 2026-03-17 04:31:26
[mcp] Update pre-launch tasks: mark completed items, add backup findings, add new items from 2026-03-17 session
26
### ~~OAuth token refresh~~ ✅ FIXED (2026-03-17)
27
ACCESS_TOKEN_EXPIRY_SECONDS extended from 3600 to 7 days (604800). Refresh tokens set to 30 days.
28
29
### ~~Per-wiki databases~~ ✅ DEPLOYED (2026-03-17)
30
Each wiki gets `/srv/data/wikis/{slug}/wiki.db` with preferences, drafts, user, cache tables. Resolver swaps DB per-request.
31
32
### ~~Permissions panel~~ ✅ DEPLOYED (2026-03-17)
33
Wiki owners can set READ_ACCESS/WRITE_ACCESS/ATTACHMENT_ACCESS via Otterwiki's admin UI. Resolver enforces by intersecting with platform ACL.
34
35
### ~~MCP OAuth hardcoded defaults~~ ✅ DEPLOYED (2026-03-17)
36
CONSENT_URL and PLATFORM_DOMAIN no longer default to robot.wtf. InMemoryOAuthProvider fallback when unset.
37
38
### ~~MCP OAuth dynamic base URL~~ ✅ DEPLOYED (2026-03-17)
39
OAuth metadata endpoint uses request Host header. Each wiki's MCP endpoint works correctly.
40
e68889 Claude (MCP) 2026-03-17 06:09:57
[mcp] Update To-Do: mark is_public complete, add UX issues, file login/nav items
41
### ~~SERVER_NAME hidden~~ ✅ DEPLOYED (2026-03-17)
42
SERVER_NAME field hidden from Application Preferences in PLATFORM_MODE.
d81ed3 Claude (MCP) 2026-03-17 04:31:26
[mcp] Update pre-launch tasks: mark completed items, add backup findings, add new items from 2026-03-17 session
43
e68889 Claude (MCP) 2026-03-17 06:09:57
[mcp] Update To-Do: mark is_public complete, add UX issues, file login/nav items
44
### ~~Remove is_public toggle~~ ✅ DEPLOYED (2026-03-17)
45
READ_ACCESS replaces is_public as sole source of truth. Migration seeds READ_ACCESS=REGISTERED for private wikis.
46
47
### ~~Login return_to redirect~~ ✅ DEPLOYED (2026-03-17)
48
Resolver passes wiki URL as return_to when redirecting to login. Auth server accepts *.robot.wtf URLs.
d81ed3 Claude (MCP) 2026-03-17 04:31:26
[mcp] Update pre-launch tasks: mark completed items, add backup findings, add new items from 2026-03-17 session
49
e68889 Claude (MCP) 2026-03-17 06:09:57
[mcp] Update To-Do: mark is_public complete, add UX issues, file login/nav items
50
### ~~SITE_NAME lazy init~~ ✅ DEPLOYED (2026-03-17)
51
display_name passed through to _init_wiki_db during lazy init.
d81ed3 Claude (MCP) 2026-03-17 04:31:26
[mcp] Update pre-launch tasks: mark completed items, add backup findings, add new items from 2026-03-17 session
52
e68889 Claude (MCP) 2026-03-17 06:09:57
[mcp] Update To-Do: mark is_public complete, add UX issues, file login/nav items
53
### ~~Upstream bug fix~~ submitted (2026-03-17)
54
`handle_permissions_and_registration` missing ADMIN guard — PR pending to redimp/otterwiki (`fix/permissions-admin-guard`).
d81ed3 Claude (MCP) 2026-03-17 04:31:26
[mcp] Update pre-launch tasks: mark completed items, add backup findings, add new items from 2026-03-17 session
55
56
## Blocking
d105f8 robot.wtf 2026-03-15 22:37:48
Move misplaced pages from default wiki
57
333770 Claude (MCP) 2026-03-17 07:56:12
[mcp] To-Do: mark init hardening, Phase 2, repo mgmt as done
58
### ~~Harden per-wiki DB initialization~~ ✅ DEPLOYED (2026-03-17)
59
Comprehensive `_init_wiki_db()`: seeds SITE_NAME, READ_ACCESS, WRITE_ACCESS, ATTACHMENT_ACCESS (all REGISTERED), AUTH_METHOD (PROXY_HEADER), DISABLE_REGISTRATION, AUTO_APPROVAL (False), schema version marker. All INSERT OR IGNORE. Owner auto-seeded as admin.
930be1 Claude (MCP) 2026-03-17 06:12:28
[mcp] Add wiki DB init hardening and post-deploy smoke test to To-Do
60
9c0b5e Claude (MCP) 2026-03-17 07:03:17
[mcp] To-Do: mark smoke test and bcrypt fix as done
61
### ~~Post-deploy smoke test~~ ✅ MERGED (2026-03-17)
62
Shell script in Ansible `post_tasks` — checks all 4 services (systemctl + HTTP), auth/MCP well-known endpoints, dynamic wiki enumeration from DB. Retry loop with 30s ceiling per service.
930be1 Claude (MCP) 2026-03-17 06:12:28
[mcp] Add wiki DB init hardening and post-deploy smoke test to To-Do
63
cdf3dc Claude (MCP) 2026-03-17 20:40:05
[mcp] Mark disk usage cap and Management UI as deployed
64
### ~~Disk usage cap~~ ✅ DEPLOYED (2026-03-17)
65
Disk quota (50MB) enforced via resolver — API gets 413, web UI gets WRITE stripped. Page count quota (500 pages) added. Cron populates both `disk_usage_bytes` and `page_count` every 15 minutes. Constants consolidated in `app/constants.py`. Cron script hardened with slug validation and trailing-slash guards.
d105f8 robot.wtf 2026-03-15 22:37:48
Move misplaced pages from default wiki
66
cdf3dc Claude (MCP) 2026-03-17 20:40:05
[mcp] Mark disk usage cap and Management UI as deployed
67
### ~~Management UI usability~~ ✅ DEPLOYED (2026-03-17)
68
- ~~Wiki creation flow should default slug to username~~ Done: derives slug from Bluesky handle when username not set. Reserved names (DNS-sensitive) return empty, forcing manual entry.
31f20f Claude (MCP) 2026-03-17 07:56:41
[api] Edit: To-Do
69
- ~~MCP connection instructions need to be clearer~~ Addressed: MCP info now on dashboard card with Claude Code example
70
- ~~Settings page layout needs work~~ Addressed: collapsed to single-page card layout
d105f8 robot.wtf 2026-03-15 22:37:48
Move misplaced pages from default wiki
71
72
### Landing page copy
da2b79 Claude (MCP) 2026-03-17 01:46:54
[mcp] Update Pre_Launch: landing page copy updated
73
Draft is live at robot.wtf/. Updated 2026-03-17. Still needs screenshots once UI is polished.
d105f8 robot.wtf 2026-03-15 22:37:48
Move misplaced pages from default wiki
74
e68889 Claude (MCP) 2026-03-17 06:09:57
[mcp] Update To-Do: mark is_public complete, add UX issues, file login/nav items
75
## UX issues
76
b97b22 Claude (MCP) 2026-03-17 17:39:38
[mcp] Mark Login Page UX as deployed (2026-03-17)
77
### ~~Login page UX~~ ✅ DEPLOYED (2026-03-17)
78
JWT cookie detection: auto-redirects if authenticated, pre-fills handle if expired (sanitized, length-capped). Auth templates (login, consent, signup, error) restyled to match landing page — Pico CSS replaced with shared `style.css` + auth-specific styles. Site icon (`robot.wtf.svg`) added to favicon and nav across all pages. See [[Plans/Login_Page_UX]].
e68889 Claude (MCP) 2026-03-17 06:09:57
[mcp] Update To-Do: mark is_public complete, add UX issues, file login/nav items
79
eee413 Claude (MCP) 2026-03-17 19:26:07
[mcp] Update To-Do: mark 3 items done, add admin UI cleanup items for next session
80
### ~~Landing page redirect~~ ✅ FIXED (2026-03-17)
81
Landing page no longer auto-redirects authenticated users to dashboard. Only `/auth/login` auto-redirects.
82
83
### ~~Permissions registration checkboxes~~ ✅ DEPLOYED (2026-03-17)
84
Five registration checkboxes (DISABLE_REGISTRATION, EMAIL_NEEDS_CONFIRMATION, AUTO_APPROVAL, NOTIFY_ADMINS, NOTIFY_USER_ON_APPROVAL) hidden in PLATFORM_MODE via otterwiki fork template guards. ADMIN option also hidden from access level dropdowns. Deploy fix: `state: forcereinstall` on otterwiki pip task.
85
86
### ~~Multi-worker preference staleness~~ ✅ FIXED (2026-03-17)
87
`update_app_config()` now called on fast path in `_swap_database()`, so preference changes (e.g. READ_ACCESS) propagate immediately across workers. See [[Design/Resolver]].
88
937722 Claude (MCP) 2026-03-17 20:40:21
[mcp] Mark Admin UI cleanup as already done
89
### ~~Admin UI cleanup (otterwiki fork)~~ ✅ ALREADY DONE (confirmed 2026-03-17)
90
All three items were completed during Phase 2 User Management work: mail tab hidden (`@platform_mode_disabled` + nav guard), "Email" → "Handle" conditional in templates, "Approved" checkbox replaced by Role dropdown (Admin/Editor/Viewer) with `is_approved` auto-set. Tests cover all three.
eee413 Claude (MCP) 2026-03-17 19:26:07
[mcp] Update To-Do: mark 3 items done, add admin UI cleanup items for next session
91
0e2287 Claude (MCP) 2026-03-18 04:45:10
[mcp] To-Do: mark wiki-to-dashboard nav as deployed
92
### ~~No navigation from wiki to dashboard~~ ✅ DEPLOYED (2026-03-18)
93
Dashboard link added to otterwiki dropdown menu in PLATFORM_MODE. See [[Plans/Wiki_To_Dashboard_Navigation]].
e68889 Claude (MCP) 2026-03-17 06:09:57
[mcp] Update To-Do: mark is_public complete, add UX issues, file login/nav items
94
d105f8 robot.wtf 2026-03-15 22:37:48
Move misplaced pages from default wiki
95
## Safety
96
d81ed3 Claude (MCP) 2026-03-17 04:31:26
[mcp] Update pre-launch tasks: mark completed items, add backup findings, add new items from 2026-03-17 session
97
### Backup coverage gaps
98
Backup cron runs every 4 hours, retains 7 days. Uses `sqlite3 .backup` for consistency.
d105f8 robot.wtf 2026-03-15 22:37:48
Move misplaced pages from default wiki
99
e68889 Claude (MCP) 2026-03-17 06:09:57
[mcp] Update To-Do: mark is_public complete, add UX issues, file login/nav items
100
**What IS backed up:** `robot.db`, `mcp_oauth.db`, per-wiki `wiki.db` files.
d81ed3 Claude (MCP) 2026-03-17 04:31:26
[mcp] Update pre-launch tasks: mark completed items, add backup findings, add new items from 2026-03-17 session
101
102
**What is NOT backed up:**
103
- **Git repos** (`/srv/data/wikis/{slug}/repo/`) — all wiki content. Relies on Proxmox VM snapshots. **Verify Proxmox snapshot schedule is actually running.**
104
- **Signing keys** (`signing_key.pem`, `signing_key.pub`, `client_jwk.json`, `client_jwk_pub.json`) — losing these breaks all OAuth sessions. Generated once, never backed up. Should be added to backup script or Ansible vault.
105
- FAISS indexes — can be rebuilt from wiki content (not critical).
106
107
**Recommended actions (in priority order):**
108
1. Verify Proxmox snapshots are running on schedule
109
2. Add `git bundle create` per wiki to the backup script
110
3. Add signing key backup to the script
111
4. Write and test a restore script
112
5. Automate a periodic integrity check (`PRAGMA integrity_check` on all DBs)
113
114
### Backup verification
e68889 Claude (MCP) 2026-03-17 06:09:57
[mcp] Update To-Do: mark is_public complete, add UX issues, file login/nav items
115
No tested restore path exists. Minimal local test: pull a backup, run integrity checks on each DB, verify schema matches.
d105f8 robot.wtf 2026-03-15 22:37:48
Move misplaced pages from default wiki
116
93c7f9 Claude (MCP) 2026-03-17 22:04:12
[mcp] Mark rate limiting as deployed
117
### ~~Rate limiting + security headers~~ ✅ DEPLOYED (2026-03-17)
118
**Security headers:** HSTS (1 month), CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy applied globally via Caddy snippet.
c4eb89 Claude (MCP) 2026-03-17 21:29:26
[mcp] Mark security headers as deployed, separate rate limiting as remaining item
119
93c7f9 Claude (MCP) 2026-03-17 22:04:12
[mcp] Mark rate limiting as deployed
120
**Rate limiting:** Flask-Limiter on auth (1/min login/signup, 2/min consent POST) and API (1/min create, 2/min delete) Flask routes. `limits` library in WSGI middleware: 5/min wiki writes, 5/min API writes, 15/min API reads. ProxyFix at outermost WSGI layer. Retry-After on all 429s. fail2ban on proxy-1 as backstop. Per-worker in-memory storage (~4x effective limits). See [[Plans/Rate_Limiting_And_Security_Headers]].
d81ed3 Claude (MCP) 2026-03-17 04:31:26
[mcp] Update pre-launch tasks: mark completed items, add backup findings, add new items from 2026-03-17 session
121
720077 Claude (MCP) 2026-03-17 16:48:03
[api] Edit: To-Do
122
### OWASP remaining items
d81ed3 Claude (MCP) 2026-03-17 04:31:26
[mcp] Update pre-launch tasks: mark completed items, add backup findings, add new items from 2026-03-17 session
123
From [[Security/OWASP_2025_Audit]]:
720077 Claude (MCP) 2026-03-17 16:48:03
[api] Edit: To-Do
124
- ~~**Bcrypt linear scan DoS**~~ ✅ MERGED (2026-03-17)
125
- ~~**Security response headers**~~ Plan ready (see above)
1b1866 Claude (MCP) 2026-03-18 04:45:33
[mcp] To-Do: update security logging with plan and hooks status
126
- **Security logging:** No audit trail for auth events, ACL changes, wiki deletions. **Plan at [[Plans/Security_Logging]].** ACL hooks (`permission_changed`, `user_flags_changed`) implemented for upstream otterwiki on `feat/admin-action-hooks` — pushed to schuyler/otterwiki, ready for PR to redimp/otterwiki.
d81ed3 Claude (MCP) 2026-03-17 04:31:26
[mcp] Update pre-launch tasks: mark completed items, add backup findings, add new items from 2026-03-17 session
127
84456b Claude (MCP) 2026-03-17 07:56:20
[api] Edit: To-Do
128
### ~~Git remote push/pull security~~ ✅ DEPLOYED (2026-03-17)
129
Repository Management panel hidden in PLATFORM_MODE (`@platform_mode_disabled` decorator + nav guard). Pull webhook also gated. `auto_push_if_enabled()` and `auto_pull_webhook()` return early in PLATFORM_MODE — prevents outbound SSH even if previously configured. Feature may be re-enabled with proper sandboxing if there's demand.
d105f8 robot.wtf 2026-03-15 22:37:48
Move misplaced pages from default wiki
130
b15e4d Claude (MCP) 2026-03-18 05:46:23
[mcp] To-Do: mark monitoring dashboard as deployed
131
### ~~Monitoring dashboard~~ ✅ DEPLOYED (2026-03-18)
c72dc7 Claude (MCP) 2026-03-18 04:45:18
[mcp] To-Do: mark monitoring dashboard as merged
132
`/app/admin/stats` page in management UI showing service health, disk usage, wiki/user counts, journal tail. Admin-only via `PLATFORM_ADMIN_DIDS`. Ansible `healthcheck`/`diskmon` roles added to deploy. See [[Plans/Monitoring_Dashboard]].
505842 Claude (MCP) 2026-03-17 06:19:56
[mcp] Add monitoring dashboard to Safety section of To-Do
133
d105f8 robot.wtf 2026-03-15 22:37:48
Move misplaced pages from default wiki
134
## Not blocking but important
135
92d05f Claude (MCP) 2026-03-17 07:56:33
[api] Edit: To-Do
136
### ~~Phase 2: User Management~~ ✅ DEPLOYED (2026-03-17)
137
Platform ACL removed entirely. Per-wiki user table is sole source of truth. Resolver restructured: owner gets ADMIN via `wikis.owner_did`, per-wiki user flags derive permissions, APPROVED access level functional, bearer tokens wiki-scoped. Dashboard collapsed to single-page card layout. Otterwiki role UI (admin/editor/viewer dropdown) deployed. Repository Management gated in PLATFORM_MODE. Init hardening comprehensive.
d81ed3 Claude (MCP) 2026-03-17 04:31:26
[mcp] Update pre-launch tasks: mark completed items, add backup findings, add new items from 2026-03-17 session
138
c76f5f Claude (MCP) 2026-03-18 03:26:37
[mcp] To-Do: mark semantic search multi-tenant as resolved
139
### ~~Semantic search background sync (V7-1, V7-2, V7-3)~~ ✅ DEPLOYED (2026-03-18)
140
Multi-tenant FAISS backend via `BackendRegistry` — per-wiki indexes at `/srv/data/faiss/{slug}/`. ChromaDB deprecated and disabled. Sync thread replaced by lifecycle hooks (`page_saved`/`page_deleted`/`page_renamed`). `reindex_all` is per-wiki scoped. Auto-reindex on first wiki access. See [[Tasks/Semantic_Search_Architecture]] and [[Tasks/Semantic_Search_Multi_Tenant]].
e57257 Claude (MCP) 2026-03-17 23:07:18
[mcp] To-Do: add V7-1/V7-2/V7-3 semantic search background sync
141
d81ed3 Claude (MCP) 2026-03-17 04:31:26
[mcp] Update pre-launch tasks: mark completed items, add backup findings, add new items from 2026-03-17 session
142
### Wiki stats plugin
143
Track page count and disk usage via otterwiki lifecycle hooks. Enables tier limits and quota enforcement. Design at [[Design/Wiki_Stats_Plugin]]. **Parked — design only.**
d105f8 robot.wtf 2026-03-15 22:37:48
Move misplaced pages from default wiki
144
d81ed3 Claude (MCP) 2026-03-17 04:31:26
[mcp] Update pre-launch tasks: mark completed items, add backup findings, add new items from 2026-03-17 session
145
### SMTP alerts test
146
Health check and disk monitoring alerts configured but not tested end-to-end.
d105f8 robot.wtf 2026-03-15 22:37:48
Move misplaced pages from default wiki
147
243037 Claude (MCP) 2026-03-18 04:45:26
[mcp] To-Do: mark CI/CD Phase 1 as merged
148
### ~~CI/CD pipeline (Phase 1)~~ ✅ MERGED (2026-03-18)
149
Per-repo pytest CI via GitHub Actions on all 5 repos. `deploy.sh` wrapper in robot.wtf. Auto-deploy deferred to Phase 3. See [[Plans/CI_CD_Pipeline]].
450067 Claude (MCP) 2026-03-17 06:20:03
[mcp] Add Post-launch section to To-Do (merged from Tasks/Post_Launch)
150
151
## Post-launch
152
153
### Account deletion (V7-8)
154
User can delete their account from the management UI. Deletes wiki (git repo, FAISS index), SQLite records, ACL grants. Requires typing username to confirm.
155
e38a74 Claude (MCP) 2026-03-17 23:07:30
[mcp] To-Do: add V7-9 ATProto community announcement to post-launch
156
### Announce to ATProto community (V7-9)
157
Post on Bluesky, add to ATProto app directories if any exist. Gated on semantic search (V7-1–V7-3) and a real user being able to sign up and use the service end-to-end without assistance.
158
450067 Claude (MCP) 2026-03-17 06:20:03
[mcp] Add Post-launch section to To-Do (merged from Tasks/Post_Launch)
159
### Git clone auth
160
Read-only git clone works (V4-6) but has no auth — anyone can clone any wiki. Should require bearer token or platform JWT for private wikis.
161
162
### Multiple wikis per user
163
Currently limited to 1 wiki per user. The data model supports multiple wikis. Needs UI for wiki selection and limit increase.
164
165
### Bluesky DM alerts
166
Translate health check / disk monitoring alerts into Bluesky DMs via ATProto API. Small webhook relay.
167
168
### Wiki import
169
Import existing git repos (from GitHub, local, etc.) as a new wiki. Upload or provide a git URL.
170
171
### Attachment size limits
172
Per-file and per-wiki attachment size enforcement. Currently no limits on uploaded files.
173
eb6583 Claude (MCP) 2026-03-17 20:33:09
[mcp] Add SEO for public wikis to post-launch To-Do
174
### SEO for public wikis
175
Public wikis (READ_ACCESS=ANONYMOUS) should be indexable by search engines. Needs: proper `<meta>` tags, `robots.txt` that allows crawling of public wikis, `sitemap.xml` generation per wiki, OpenGraph tags for link previews. Private wikis should have `noindex, nofollow`.
176
450067 Claude (MCP) 2026-03-17 06:20:03
[mcp] Add Post-launch section to To-Do (merged from Tasks/Post_Launch)
177
### Proxmox CPU type change
178
Change from kvm64 to host to enable numpy 2.4+ and remove the pin. Requires VM reboot. See [[Dev/Proxmox_CPU_Type]].