97d3c29f9c
gates / gates (push) Successful in 5m24s
Second Facebook task of the day. Page settings changed by hand in the operator's Chrome; every edit read back from a channel other than the one that made it, because Meta's toasts have lied here before (2026-10-08: "A modositas nincs mentve" arrived with a partial save). - Contact (B1) was ALREADY SET, by the operator, before this run: Graph reads emails ["info@felhom.eu"] and phone "+36702378499". Verified, not typed. - Place (B2) already city-only Budapest, as the operator chose. Service area REFUSED: Facebook offers the field but its picker has no "Magyarorszag", only cities. Control: "Szeged" returns Szeged. Left unset rather than narrowed to Budapest, which would shrink a coverage claim nobody authorised. - Categories (B3) DONE: Informatikai vallalat (kept first, the only one shown) + Internetes ceg + Szoftverceg. Facebook's Hungarian list has no IT-support, IT-consulting or cloud category; eleven terms searched, and the one true match is a repair counter, which the fences rule out. - Hours (B4) CANNOT be set and need not be: Facebook requires a street address first, which the fences forbid. Measured on the rendered page with controls present -- Zarva 0, Nyitva 0 while Budapest 1, Informatikai vallalat 1. The Page will never show "Zarva". - Messenger FAQ (B5) REFUSED -> R-920: the automation does not exist for this Page. Catalogue holds exactly three templates; search "kerdes" returns none while the control "uzenet" returns two. COPY.md section 5 is written anyway, questions verbatim from gyik.html and answers condensed from each question's own answer, and waits like section 2 does (R-917). - Link preview correct in both languages, re-scraped once each; only the expected fb:app_id warning, deliberately not fixed. Both report HTTP 206 where a plain curl gets 200 -- Facebook's scraper, preview complete. fb_probe.py read now also reports emails, phone, category_list, location, single_line_address and hours, ONE FIELD PER CALL: a batched fields= list fails whole when any member is unreadable, which would let one refused field hide the other five. Refusals are logged verbatim and never retried; "null" and "not returned" are logged apart. hours is never returned by Graph, which is why B4's read-back had to come from the rendered page. Also corrects the "Business & legal" header, which read 12 rows (P2 5) over a section holding 11 (P2 4); with R-920 it is 12 (P2 4, P3 1, P4 7). Only the section this commit edits -- the other drifting headers belong to a session that owns the register. No post, no invite, no money, no app or portfolio change, website unchanged.
213 lines
18 KiB
Markdown
213 lines
18 KiB
Markdown
# marketing — CHANGELOG
|
||
|
||
## facebook — Page details: categories added, contact already set, Messenger FAQ refused (2026-10-09)
|
||
|
||
Second task of the day, after the cover work: the Page's details box, the Messenger FAQ and the link
|
||
preview. Settings changed by hand in the operator's Chrome; every edit read back from a channel other
|
||
than the one that made it, because Meta's toasts have lied here before.
|
||
|
||
- **Contact was already done — by the operator, not by this run.** The task's baseline said there was
|
||
no contact e-mail; there is. Graph reads `emails = ["info@felhom.eu"]` (the address
|
||
`website/kapcsolat.html` uses) and `phone = "+36702378499"`, and the Page's „Elérhetőségek" tab shows
|
||
the same. Nothing was typed; the value was verified and left alone.
|
||
- **Two categories added**, so the Page is findable beyond its one label:
|
||
**Informatikai vállalat · Internetes cég · Szoftvercég**. „Informatikai vállalat" stays FIRST, which
|
||
is the only one Facebook shows on the Page — the other two serve search, and correctly do not appear.
|
||
Facebook's Hungarian list has **no IT-support, IT-consulting or cloud category**: eleven terms were
|
||
searched, and the one true IT-support match („Számítógépszerviz") is a repair counter, which the
|
||
fences rule out. Read back by Graph: IT Company, Internet Company, Software Company.
|
||
- **Opening hours cannot be set, and do not need to be.** Facebook greys the row out: „A nyitvatartási
|
||
idő megadása előtt add meg előbb a vállalkozásod címét." Hours need a street address and the fences
|
||
forbid entering one — so there is no „no hours" option to choose, and none is needed, because with no
|
||
hours set the Page shows **no hours label at all**. Measured on the rendered page with controls:
|
||
`Zárva 0 · Nyitva 0 · Nyitvatartás 0`, while `Budapest 1 · Informatikai vállalat 1 · felhom.eu 1`
|
||
prove the details box was actually being read. An absent string on its own would have proved nothing.
|
||
- **The Messenger „Gyakori kérdések" automation does not exist for this Page → R-920.** Searched, not
|
||
assumed: the catalogue holds exactly three templates, and a search for „kérdés" returns none while
|
||
the control „üzenet" returns two. `COPY.md` §5 is written anyway — four questions verbatim from
|
||
`gyik.html`, each answer condensed from that question's own answer with no new claim — and waits like
|
||
§2 does (R-917).
|
||
- **Service area refused.** Facebook offers the field but its picker has no „Magyarország": it returns
|
||
cities and neighbourhoods only. Control: „Szeged" returns Szeged. Left unset rather than narrowed to
|
||
„Budapest", which would have shrunk a coverage claim nobody authorised.
|
||
- **Link preview is correct on both pages**, re-scraped once each. Title, description and image all
|
||
right, Hungarian and English, each with its own `og:image`. The only warning is the **expected**
|
||
missing `fb:app_id`, deliberately not added. Both report **Response Code 206, not 200** — a plain
|
||
`curl` gets 200, so it is Facebook's scraper and the preview is complete; noted, not chased.
|
||
- `fb_probe.py read` now also reports `emails, phone, category_list, location, single_line_address,
|
||
hours`, **one field per call** — a batched `fields=` list fails whole when any one member is
|
||
unreadable, which would let one refused field hide the other five. `hours` is never returned by
|
||
Graph, and the probe logs „not returned" apart from `null`.
|
||
|
||
## facebook — the Facebook APP measured at last; cover C to the operator's layout (2026-10-09)
|
||
|
||
- **The app view is no longer unmeasured.** The operator checked the live Page in **Facebook Lite** and in
|
||
Chrome on his phone. Solved against the laptop frame, both give a visible window of **x 349..1290** and
|
||
**x 349..1291** — the Lite app crops exactly like signed-in mobile web, and both agree with R-919's
|
||
emulator (351..1289). Their profile circle sits at **x 645..1021 from y 451**, i.e. LOWER than the
|
||
emulator's y 369, so the emulated figure was pessimistic and the build's margin was real. **Five views
|
||
are now measured and the signed-out one remains the binding constraint** (circle top y 232, bottom cut
|
||
at 525).
|
||
- **Cover C now follows the operator's draft:** the wordmark **big on top** (88 px, was 44), a small gap,
|
||
then the catchphrase. The catchphrase is **one line**, not the two he drew, and the measurement forces
|
||
that: with the signed-out circle starting at y 232, a wordmark that size plus two catchphrase lines
|
||
cannot both sit above it. Drawn as two lines it measured **392 sampled text pixels behind that circle**
|
||
— „saját szabályaid" read „saját szab" there, which is exactly the R-919 defect. Shrinking the two lines
|
||
to fit instead drops the capital to 25 px, the legibility floor. One line keeps the wordmark big, the
|
||
capital at 34 px and **every measured view clean (0 text pixels behind any circle)**.
|
||
- The laptop moved right and down to 540 px to make room for the one-line catchphrase; 64 % of it is
|
||
cropped or covered in some view, which the build reports and which is what decor is for.
|
||
|
||
|
||
## facebook — a phone has TWO views of the cover, not one; the covers fill the frame again (2026-10-09)
|
||
|
||
The operator saw the cover UNCROPPED on a signed-out phone and asked why, after R-919 had said the sides
|
||
are cut. Both are true, and the first measurement was one view generalised.
|
||
|
||
- **Measured, signed out** (from the operator's screenshot, solved against the picture): Facebook shows
|
||
the **full width** — nothing is cut at the sides — but the cover is **top-anchored and only the top
|
||
525 px survives**; the bottom 99 px is cut. The blue rule from the top of the file is still visible at
|
||
the top edge, which is how the crop's side was established. The profile circle is much bigger and much
|
||
higher than in the signed-in view: **x 486–1150 from y 232**.
|
||
- **Measured, signed in, on the operator's REAL phone** (Chrome on Android, 1080 px): the crop is real.
|
||
Solving the screenshot against the laptop frame put the window at **x 351..1298** where the emulated
|
||
Pixel 9 had said **351..1289** — the left edge to the pixel. R-919's number is confirmed, not replaced.
|
||
- **So the sides are cut for a signed-in visitor and the bottom for a signed-out one**, and a cover has to
|
||
survive both. `build.py` now carries both views (`PHONE_IN_X`, `PHONE_OUT_Y`, `PHONE_CIRCLES`) instead of
|
||
one, and SAFE is their intersection: **(391, 40)–(1249, 485)**.
|
||
- **The profile circles are modelled as DISCS now, not rectangles reaching the bottom.** Near its top a
|
||
disc is only a few pixels wide; the rectangle threw away most of the cover for nothing and is part of
|
||
why the covers looked empty.
|
||
- **Two layers, because a cover has two kinds of pixel.** The READ layer (catchphrase + wordmark) must
|
||
survive every view and the check fails on it. The DECOR layer (laptop, home motif) may be cropped or
|
||
covered — and the build now REPORTS how much is lost rather than forbidding it: cover B 39 %, cover C
|
||
62 %. Without that split the check forbade a laptop big enough to see, which is what left the frame bare.
|
||
- **The covers were redrawn.** C is the operator's laptop idea: catchphrase and wordmark left, the
|
||
dashboard now **640 px wide** (was 370) and running off the right edge — legible at last. B's home motif
|
||
grew the same way. A is unchanged in kind, lifted into the tighter band.
|
||
- **A second red-proof, run before the redraw:** the two-view geometry convicted all three covers as they
|
||
stood — cover A 908 content pixels under a circle, B 1715 plus content past the bottom, C 1962. The
|
||
permanent `control_old_window` still convicts the pre-R-919 layout as well.
|
||
- Profile pictures untouched; they are not in the diff. Still **R-919 = VERIFY**: the Facebook **app** is
|
||
the one view nobody has measured.
|
||
|
||
|
||
## facebook — the brand lockup: the mark alone on the profile, the real lettering on the covers (2026-10-09)
|
||
|
||
Operator refinements on the same day, after looking at the rebuilt pictures. No geometry changed; R-919's
|
||
measured constants and all its checks stand.
|
||
|
||
- **The profile picture is the logo MARK only.** The mark plus the „felhom.eu" lettering left both too small
|
||
to read at the 176 px Facebook shows, and smaller than the shape the Page carried before. Dropping the
|
||
lettering lets the mark grow from **69 % to 76 %** of the circle, and the canvas drops 932 → **648 px**
|
||
(still twice Meta's recommended 320 source, so the floor in `profile_width` went 720 → 640; 720 was above
|
||
what the mark alone needs and would have shrunk it for nothing). At 40 px the cloud, the house and the
|
||
keyhole now read.
|
||
- **Both backgrounds read now.** The preview recommended dark because the *lettering* faded on white — a
|
||
reason that no longer exists. It now says what is actually true: dark matches the covers and the Page as it
|
||
stands, white separates the circle from the dark cover, and the operator picks.
|
||
- **The covers set the headline the way the WEBSITE sets its h1.** `site.css`
|
||
`.page-index .hero-text h1` is `font-weight: 700; letter-spacing: -0.03em`; this file used **ExtraBold (800)
|
||
with no tracking**. Now `HEADLINE_WEIGHT = "Bold"` and `HEADLINE_TRACK = -0.03`, with real per-glyph
|
||
letter-spacing rather than faked by scaling. Bold is narrower, so the headlines grew: A 57 → 62, B 58 → 63,
|
||
C 47 → 50.
|
||
- **„felhom.eu" is no longer typed.** It is the logo's **own lettering**, cropped out of `logo.png` at a
|
||
measured split (mark y 5–289, blank band y 290–295, wordmark y 296–403) and scaled. That lettering is set
|
||
in „M+ 2c" / „Vremena Grotesk", fonts this machine does not have (R-916), so typing it in Plus Jakarta Sans
|
||
was a different wordmark. The website hero shows the same `logo.png` on the same dark background, so the
|
||
covers now match the page. The `DOMAIN` constant is gone with it.
|
||
- **Caught before it shipped:** the preview page's new profile paragraph added a fourth `%d`, and the
|
||
argument tuple was left in the old order — so the phone paragraph rendered „the centre **76** px of the
|
||
**938**-pixel width, with a profile circle **1640** cover-pixels across". All three numbers were real
|
||
numbers from the file, which is why it read as plausible rather than as a crash. Fixed and both paragraphs
|
||
re-read.
|
||
- Checks unchanged and all passing; the cap check now measures the weight the headline is actually set in.
|
||
Profile pictures necessarily changed (that was the point), so their sha256 moved: `db05dae5…` dark,
|
||
`a44849e4…` white.
|
||
|
||
|
||
## facebook — the covers rebuilt to the phone view we measured (R-919) (2026-10-09)
|
||
|
||
R-919's fix, from an operator brief (no TASK file in the repo). The covers shipped on 2026-10-08 were cut
|
||
on every phone; this rebuilds them to the measured geometry. Report: `REPORT-facebook-cover-r919.md`.
|
||
|
||
- **The geometry is measured now, not assumed.** `build.py` believed a phone shows 640 x 360 of the cover.
|
||
It shows **412 x 274 = 1,504 : 1** — the full height and only the **centre 938 px of 1640**, 351 px off
|
||
each side. `PHONE_HDR = (412, 274)` drives `CW_PHONE`, so `SAFE` is now **(391, 40)–(1249, 584)**, 858 px
|
||
wide with a 40 px margin inside each crop edge.
|
||
- **`QUIET` is no longer one formula for both circles.** The computer circle is *left-anchored* (everything
|
||
to its left is under it); the phone circle is **centred** and hides only its own measured box
|
||
`(637, 369, 393)`. The old shared formula would have blanked the whole left half of the cover's bottom.
|
||
- **A derived `BAND`** — inside SAFE, right of the computer circle, above the phone circle — is where every
|
||
cover draws, so a re-measurement moves the three designs with it.
|
||
- **A `cap` check** holds each headline's capital at ≥ 4 % of the cover height (25 px). A, B, C come out at
|
||
45, 45 and 37 px.
|
||
- **The red-proof runs on every build**, beside the circle check's own control: `control_old_window` draws
|
||
the headline where the old assumption put it (x 328) and the check must reject it. Against the covers as
|
||
committed at `a76207945e` the new check convicted **3 of 3** — A 23 px / 22 px past the left and right
|
||
edges, B 63 / 58 px plus 1017 content pixels under the phone circle, C 63 / 82 px plus 1778.
|
||
- **The three covers were redrawn** inside the band: A one centred line; B the headline left with the home,
|
||
its server and now seven app tiles right — two of them in the lower-right strip, the one place below the
|
||
band a phone still shows beside the profile circle; C the headline left with the dashboard, its screen
|
||
470 → 370 px wide to fit. `out/preview.html` shows the phone panel at the measured 938 x 624 with the
|
||
centred circle, labelled MEASURED, and no longer claims 640 x 360.
|
||
- **The profile pictures are untouched** — sha256 identical before and after, and they are not in the diff.
|
||
- **Build it on DooPlex.** The PNGs are byte-reproducible there (Pillow 11.1.0); Pillow 12.3.0 on the Windows
|
||
workstation re-renders text a pixel or two differently and rewrites all six files. Noted in the README.
|
||
- Nothing was uploaded to Facebook and no key was read. **R-919 is VERIFY, not closed:** the geometry is
|
||
measured on one emulated device in the mobile website, so the operator's check in the Facebook **app** is
|
||
the acceptance step.
|
||
|
||
## facebook — the Page's settings set by hand, and Meta's size page read first-hand (2026-10-08, evening)
|
||
|
||
Ran `marketing/facebook/TASK-page-setup-windows.md` from the Windows workstation through Claude in Chrome.
|
||
Evidence: `documentation/audits/facebook-page-setup-2026-10-08/`; report: `REPORT-facebook-page-setup.md`.
|
||
|
||
- **Done, each read back from a different channel than the edit.** Intro → `COPY.md` §1 (Graph `about` now
|
||
hex-equal to §1, 99 chars); action button → „További információ" at `https://felhom.eu/`; Messenger welcome
|
||
→ `COPY.md` §3, hex-equal, automation **on**; Page username → **`felhom.eu`**, so the Page now answers at
|
||
`facebook.com/felhom.eu` (Graph `username` confirms it). The operator typed the password Facebook demanded
|
||
for the username; nothing else needed a human.
|
||
- **Not done — `COPY.md` §2 has no field to go in.** Facebook's current Pages experience has no
|
||
long-description field anywhere, and the Graph `description` reads `null` and is not writable with the
|
||
robot key's scopes. Filed **R-917** with four options; §2 stays in `COPY.md` unused. `facebook/README.md`'s
|
||
„What goes where" row says so.
|
||
- **`facebook/README.md` sizes grade: „READ, second-hand" → „READ, Meta's help page" — and the comparison
|
||
went the other way.** Meta's page (facebook.com/help/125379114252045, quoted verbatim in the audit) carries
|
||
**none** of the 820 x 312 / 640 x 360 figures the section asserted; only the 176 px profile size matched,
|
||
and Meta's mobile profile overlap is ~40 px where we assumed 24. Meta's own page contradicts itself (16:9
|
||
on a computer, 2,4:1 on a phone, one 2,70:1 file recommended for both). What we build is unchanged.
|
||
- **Measured on the live Page at a 1435 px viewport: fine.** The cover renders whole — no crop, no distortion
|
||
— the container caps at 1250 px, and the profile circle sits 16 px clear below the cover.
|
||
- **Measured on an emulated Pixel 9: the cover is CUT on phones (R-919).** The mobile Page header is
|
||
412 x 274 = **1,504:1**, so Facebook shows only the **centre 938 px of the cover's 1640 px width** — 351 px
|
||
off each side. `build.py`'s safe area leaves 306 px clear per side, **45 px too few**, so 18 px of the text
|
||
is lost: the headline reads „aját szabályaid" and the wordmark „elhom.eu" on every phone. Nothing was
|
||
re-cropped on Facebook; the fix is `build.py`'s safe area (≤ 938 px, ~900 for margin) plus the measured
|
||
172 px centred phone profile circle, then the operator re-uploads. **Meta's own page is wrong about Meta's
|
||
own rendering** — it states 2,4:1 for the mobile cover where the header measures 1,504:1, so the first-pass
|
||
arithmetic built on Meta's figure under-predicted the crop about fivefold.
|
||
- **How to see Facebook's phone layout** (it cost several wrong turns, recipe in the audit README): narrowing
|
||
the window never works — `www.facebook.com` has a minimum width and only grows a horizontal scrollbar, and
|
||
`m.facebook.com` redirects to `www` under a desktop user agent. DevTools device mode with a device chosen
|
||
**and then a reload** does it; without the reload the already-booted desktop bundle stays (content 901 px
|
||
wide in a 412 px viewport). `www` then hangs on the splash under the mobile agent — `m.facebook.com` loads.
|
||
- **Gotcha, fixed in the session, no row.** In Business Suite the automatic-reply editor refused the first
|
||
save with „A módosítás nincs mentve." **and still created the automation and switched it on — carrying
|
||
Meta's default Hungarian greeting, not ours.** A red error toast was therefore a partial write. Reopening
|
||
the now-existing automation, pasting §3 again and saving gave „Mentve."; the reopened automation reads back
|
||
hex-equal. Anyone editing this screen must reopen it and read the text back, not trust either toast.
|
||
- Nothing was posted; no ad, no boost, no Meta Verified; the Meta app stays in development mode.
|
||
|
||
## facebook — the Page's pictures and texts (2026-10-08)
|
||
|
||
- `marketing/facebook/build.py` (Pillow only) makes `out/profile-dark.png` + `out/profile-white.png` (932 x 932, the
|
||
logo PNG placed unscaled), three covers `out/cover-{a,b,c}.png` (1640 x 624) and `out/preview.html` (self-contained).
|
||
Checks in the build: profile circle (today's shape 6823 pixels outside radius 0.42 x width → new pictures 0), cover
|
||
safe area + profile-circle clearance (content layer only), sizes read back from the files. The site's tokens and font.
|
||
- `COPY.md`: intro (99 of 100 characters), long description, Messenger welcome, three first posts — each claim cites its
|
||
website page; no price.
|
||
- Fixed in the session: covers B and C first failed the safe-area check (text in the phone profile circle's corner, the
|
||
frame past the phone crop) and were moved; `logo.svg` renders with the wrong lettering here, so the PNG is the master
|
||
(R-916).
|