Skip to content

Commit 2ae4f2d

Browse files
committed
docs(fork): worklogs deployed, plus the two traps that cost time
Records what is actually running (fork images, migration 0123 applied) and two failure modes worth not rediscovering: Uploads need bucket CORS, and the failure is deceptive β€” the object lands in S3 and the API logs nothing but 200s, because the browser uploads directly via a presigned POST and is then blocked from reading the response, so Plane's completion callback never fires. The tell is FileAsset.is_uploaded = False next to bytes that are present in S3. Google sign-in lives in InstanceConfiguration rows, not the chart, so it survives redeploys β€” but /api/instances/ is cached for two hours, so writing the rows directly looks like it did nothing until the cache is invalidated. Claude-Session: https://claude.ai/code/session_01XvVRm84RrH9APR25g8pFXt
1 parent de1fb87 commit 2ae4f2d

1 file changed

Lines changed: 25 additions & 3 deletions

File tree

β€Ždocs/fork/worklogs.mdβ€Ž

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -224,11 +224,33 @@ corrections safe.
224224

225225
## Deployment
226226

227-
**Live at https://plane.ledoweb.com** (2026-08-03), running **upstream CE
228-
v1.4.0** β€” not this fork, so worklogs are not on it yet. Config, secrets
229-
recipe, smoke tests and the values change needed to switch to fork images:
227+
**Live at https://plane.ledoweb.com** (2026-08-03), running **fork images**
228+
`registry.hz.ledoweb.com/ledoent/plane-*:v1.4.0-worklogs-de1fb87`, built by
229+
`.github/workflows/ledoent-build.yml`. Migration `0123_issueworklog` is
230+
applied. Config, secrets recipe and smoke tests:
230231
`~/projects/ledoent/infra/deployments/plane/`.
231232

233+
All five images are fork-built even though only frontend and backend carry
234+
worklogs code: the chart composes every image as `<image>:{{ .planeVersion }}`,
235+
so the tag is global and a mixed fork/upstream deployment is not expressible
236+
without patching the chart.
237+
238+
**Uploads need bucket CORS, and the failure is deceptive.** Plane mints a
239+
presigned POST and the _browser_ uploads straight to S3, then calls back to
240+
mark the asset complete. With no CORS rule the object still lands in the bucket
241+
β€” the write succeeds β€” but the browser blocks JS from reading the response, so
242+
the callback never fires. The symptom is avatars and project covers failing
243+
while the API log shows nothing but `200`s and the bytes sit in S3 with
244+
`FileAsset.is_uploaded = False`. Rule and verification in the deployment README.
245+
246+
**Google sign-in is configured in the database, not the chart.**
247+
`GOOGLE_CLIENT_ID` / `GOOGLE_CLIENT_SECRET` / `IS_GOOGLE_ENABLED` are
248+
`InstanceConfiguration` rows (the secret Fernet-encrypted off `SECRET_KEY`), so
249+
they survive redeploys and never touch a values file. Note `/api/instances/` is
250+
cached for two hours β€” writing the rows directly requires
251+
`invalidate_cache_directly(path="/api/instances/", user=False)` or the change
252+
appears to do nothing.
253+
232254
Both hostnames now resolve to the cluster ingress, `49.13.40.172`:
233255
`plane.hz.ledoweb.com` via the `*.hz` wildcard, and `plane.ledoweb.com` via an
234256
A record added directly (Cloudflare zone `ledoweb.com`, unproxied).

0 commit comments

Comments
Β (0)