Add images/preview.jpg so OG and Twitter cards stop 404ing - #39
Conversation
Homepage og:image and twitter:image already point at https://dextech.cloud/images/preview.jpg, which 404s. Commit the 1200x630 social card and assert those meta tags in the UI tests. Co-authored-by: Dexsword <wlogatto@gmail.com>
dexsword
left a comment
There was a problem hiding this comment.
Worf gate — dextech PR #39 @ 900ee593db35b2003fc9a40b5fd18887bd50c60a
Verdict: REQUEST CHANGES (COMMENT trail — formal REQUEST_CHANGES blocked same-author). Do not merge until the deploy contract ships the asset.
What looks good
| Check | Result |
|---|---|
| Head SHA | exact match |
CI checks |
success |
| Files | only images/preview.jpg + test/ui.test.js |
| JPEG | magic FF D8 FF, 1200×630, ~70 KiB |
index.html og/twitter/JSON-LD meta |
unchanged; still point at https://dextech.cloud/images/preview.jpg |
| Live today | /images/preview.jpg still 404 (goal is valid) |
| merge-gate / review failure | expected (path outside Codex allowlist); not a content reject |
Blocker — asset not in deploy RUNTIME
Root-installed ops/deployment/deploy.py builds releases with an explicit RUNTIME frozenset and git archive … -- *RUNTIME. Current contract (base bc788fd) includes root images (bg3.jpeg, favicon.png, …) and .well-known/…, but not images/preview.jpg.
So merging this PR alone does not put the file into the next automated release artifact. Express express.static(__dirname) / DocumentRoot-from-release will keep 404ing the OG URL after a normal deploy — the PR’s own post-merge verify step would fail.
Comment in deploy.py: “New runtime assets require a reviewed operator install.”
Required fix
- Add
images/preview.jpgtoRUNTIMEinops/deployment/deploy.py(nested path is already supported byunpack_runtime). - Extend offline deploy tests if they lock the RUNTIME membership set.
- PR body / operator note: after merge, root-install the reviewed
deploy.pyto/usr/local/sbin/dextech-deploybefore expecting automated deploy to publish the JPEG (same pattern as #27/cancelprobe ordering).
Until RUNTIME includes the file (or an explicit alternate publish path is documented and owned), REQUEST CHANGES.
No merge from Worf.
The git-archive release only packs explicit RUNTIME paths. Adding the OG JPEG so a normal deploy can publish it after the reviewed deploy.py is root-installed. Co-authored-by: Dexsword <wlogatto@gmail.com>
Re-review ready (Worf)Addressed REQUEST CHANGES @
New head: |
dexsword
left a comment
There was a problem hiding this comment.
Worf re-review — dextech PR #39 @ 11035229700f55f7eb22270802987c9ff639f60f
Verdict: APPROVE (COMMENT trail). Do not merge — Will owns merge (manual; allowlist).
Prior blocker closed
images/preview.jpgnow inRUNTIMEtest_deploy.pylocks membership + nestedunpack_runtimewrite- PR body documents root-install of
deploy.pybefore expecting publish
Reconfirm
| Check | Result |
|---|---|
| Head | exact 1103522… |
CI checks |
success |
| JPEG | 1200×630, ~70 KiB |
| index meta | unchanged |
| merge-gate fail | expected (allowlist); not a content reject |
Operator after merge: root-install reviewed deploy.py, then deploy so OG URL 200s.
No merge from Worf.
Manual merge required —
images/andops/deployment/are outside.github/codex/policy.cjsallowlist (unrecognized-path/protected-path), so auto-merge will not request.Homepage
og:imageandtwitter:imagealready point athttps://dextech.cloud/images/preview.jpg. That URL currently 404s. This PR adds the 1200×630 JPEG and lists it in the deployRUNTIMEcontract sogit archiveincludes it.Changes
images/preview.jpg(new): JPEG social card, 1200×630, ~70KB.test/ui.test.js: assertog:imageandtwitter:imagestayhttps://dextech.cloud/images/preview.jpg, and that the file exists. No binary-content inspection.ops/deployment/deploy.py: addimages/preview.jpgtoRUNTIME.ops/deployment/test_deploy.py: lock that membership and thatunpack_runtimewrites the nested path.index.htmlmeta URLs are unchanged.Operator note — install
deploy.pybefore expecting the JPEG to publishMerging to
maindoes not replace live/usr/local/sbin/dextech-deploy. The root-installed deployer still uses the oldRUNTIMEset until you install the revieweddeploy.py.Same pattern as #27 (
/cancelprobe ordering):ops/deployment/deploy.pyto/usr/local/sbin/dextech-deploy(root:root 0755) before expecting an automated deploy to publish/images/preview.jpg.workflow_dispatch) build the archive that includes the JPEG.Until that install, Express/
DocumentRootfrom the release artifact will keep 404ing the OG URL.Out of scope
No workflow, review-policy, server auth, Apache, Stripe, or secrets changes.
Test plan
npm test— 118 passed, including the OG meta-tag assertionsudo python3 -I ops/deployment/test_deploy.py— 12 passed, including RUNTIME membership and nested unpackGET /images/preview.jpg→ 200image/jpegog:imageandtwitter:image→https://dextech.cloud/images/preview.jpgdeploy.py:GET https://dextech.cloud/images/preview.jpgreturns 200 JPEG