marketing/facebook: Page settings set by hand (intro, action button, Messenger welcome, username felhom.eu)
gates / gates (push) Successful in 4m36s

Ran marketing/facebook/TASK-page-setup-windows.md from the Windows workstation
through Claude in Chrome. Evidence in
documentation/audits/facebook-page-setup-2026-10-08/, report in
REPORT-facebook-page-setup.md.

Done, each read back from a different channel than the edit: the intro is
COPY.md §1 (Graph `about` hex-equal, 99 chars); the action button is
"További információ" to https://felhom.eu/; the Messenger welcome is COPY.md §3
(hex-equal) and the automation is on; the username is felhom.eu, so the Page
answers at facebook.com/felhom.eu.

Not done: COPY.md §2 has no field to go in — Facebook's current Pages
experience has no long-description field and the Graph `description` is null
and unwritable with the robot key's scopes. R-917, four options, operator's
call; no Hungarian copy was shortened.

Phase A read Meta's size page first-hand: it carries none of the 820x312 /
640x360 figures our README asserted, and its own two ratios contradict the file
it recommends. README's grade and comparison rewritten; what we build is
unchanged.

Phase C measured the computer width (cover whole, no crop, profile circle 16 px
clear). The 390 px phone check was NOT performed: narrowing a desktop browser
never gives Facebook's phone layout. R-918.

Nothing posted; no ad, no boost, no Meta Verified; the Meta app stays in
development mode; no host, guest, box or hub touched.
This commit is contained in:
2026-10-08 20:49:14 +02:00
parent 1d6927345c
commit 8664cbda78
37 changed files with 1256 additions and 10 deletions
+148
View File
@@ -0,0 +1,148 @@
# REPORT — Facebook Page setup (2026-10-08, Windows + Claude in Chrome)
Task: `marketing/facebook/TASK-page-setup-windows.md`. Evidence:
`documentation/audits/facebook-page-setup-2026-10-08/` (its `README.md` holds the method and the read-back
table). This file is a `REPORT-<topic>.md` sibling; the shared `REPORT.md` was not touched.
## 1. Baseline and pushed commit
| | |
|---|---|
| Baseline | `felhom.eu` `main` = `1d692734`, clean on the Windows tree and on DooPlex before the run |
| Pushed | see §9 — filled in after the push |
| Repos touched | `felhom.eu` only (`marketing/`, `documentation/`, `REPORT-facebook-page-setup.md`) |
## 2. Phase A — Meta's figures, and how they compare
Read first-hand from `https://www.facebook.com/help/125379114252045` at 18:04:31 UTC; quoted verbatim in
`A-meta-sizes.md`. Meta says: profile picture shown **176 × 176** on a computer, **196 × 196** on a
smartphone, **36 × 36** on a feature phone, circle-cropped, best source **320 × 320**; cover **16:9** on a
computer and **2,4:1** on a phone, minimum **400 × 150** either way, fastest as sRGB JPG **851 × 315** under
100 kB; the profile circle overlaps the cover by **about 40 px on mobile**; **PNG beats JPG** for a picture
carrying a logo or text.
**Different from ours, and mostly by absence.** `marketing/facebook/README.md` asserted a cover shown
**820 × 312** on computers and **640 × 360** on phones, and a profile-circle overlap of 16 px / 176 px and
24 px / 196 px. **None of those figures is on Meta's page.** Only the 176 px profile size matched. Meta's
mobile overlap (~40 px) is larger than the 24 px we assumed, and 640 × 360 is 16:9 — which Meta puts on the
computer, not the phone. Meta's page also contradicts itself: 16:9 and 2,4:1 and one recommended 851 × 315
(2,70:1) file for both. Recorded, not resolved.
**Are the pictures still safe?** Not rebuilt here, as the task says. Our 1640 × 624 PNG is far above both
stated minimums and is the format Meta prefers; the 932 × 932 profile source is larger than Meta's 320 × 320
recommendation, so it is downscaled, never enlarged. Phase C measured the computer case directly and it is
clean. The grade in `README.md` now reads „READ, Meta's help page", with what Meta does and does not confirm
spelled out.
## 3. B1–B5, one line each
| # | Edit | Result | Read-back, and from where |
|---|---|---|---|
| **B1** | Intro → `COPY.md` §1 | **done** | Graph `GET /{page}?fields=about` on DooPlex: 99 chars / 111 bytes, **hex equal yes**. The before-run `C1-page.json` holds a different, 134-char value, so the change is visible across the pair |
| **B2** | About → details → `COPY.md` §2 | **REFUSED — the field does not exist** | n/a. Graph `description`, `general_info`, `bio` all read `null`; four UI surfaces checked and none offers a long description. Filed **R-917** |
| **B3** | Action button → website | **done**, as „További információ" | Page header „…" → „Műveletgomb módosítása" (a different entry point than the setup card that set it): „További információ", `https://felhom.eu/` |
| **B4** | Messenger welcome → `COPY.md` §3, on | **done, on the second save** | the automation reopened from its own URL after a reload: 120 chars / 134 bytes, **hex equal yes**; toggle „Bekapcsolva" |
| **B5** | Username | **done — `felhom.eu`** | Graph `GET /{page}?fields=username` → `"felhom.eu"`, **and** `facebook.com/felhom.eu` loads the Page |
Three things in that table need their own paragraph.
**B2 — this is the one that could not be done.** The task assumed a „Névjegy → Részletek" long-description
field. There is none. Checked, all on the live Page as its admin: the Page's Névjegy tab (Rövid áttekintés,
Személyes adatok, Részletek — only a 255-character „Bemutatkozás" and the pinned category); Business Suite's
„Oldal módosítása" dialog (profile picture, cover, Bemutatkozás, category, phone, e-mail, address, website,
social links, and nothing else); Facebook settings → „Oldal adatai", which redirects back to the Névjegy tab;
and settings → „Oldal beállítása" (name, access, type, history, status, recommendation, messaging, data
sharing). The Graph fields are `null`. Writing `description` by API would need `pages_manage_metadata`, which
the robot key does not have and which fence 3 forbids adding. **No Hungarian copy was shortened** — that is
the operator's call, and R-917 lays out four options with (c), publish §2 as the first pinned post after the
app goes Live, recommended.
**B3 — the label in the task does not exist either.** The action-button chooser offers no „Weboldal". The
full list is Foglalás most, Regisztráció, Rendelés indítása, Jegyvásárlás, Üzenet küldése, WhatsApp-üzenet
küldése, Hívás most, E-mail küldése, Kapcsolatfelvétel, További információ, Megnézem most, Csoport
felkeresése, Játék indítása, Megveszem, Foglalás. The only generic website-opener is **„További információ —
Webhely megnyitása"**, so that is what was set. Facebook normalised the URL from `https://felhom.eu` to
`https://felhom.eu/`. Before the edit the button was „Üzenet küldése".
**B4 — a red error toast was a partial write.** The first save answered **„A módosítás nincs mentve."** and
the text did not change. Reloading showed the URL had gained an `automation_id` and the automation **existed
and was switched on — carrying Meta's default Hungarian greeting, not ours.** So Meta refused the text and
still created and enabled the rule. (The on/off toggle also would not move before the automation existed:
clicked at its measured centre and via `.click()` on the `role="switch"` input, `aria-checked` stayed
`false`.) With the automation now existing, pasting §3 again and saving gave **„Mentve. A változtatások
alkalmazása eltarthat egy ideig."**, and the reopened automation reads back hex-equal with the toggle on.
This is the inverse of the project's „HTTP 200 can be a REFUSAL" trap: here the error was the thing that
lied. Small, fixed in the session, no row — but it is in `marketing/CHANGELOG.md` because the next person on
that screen must reopen it and read the text back rather than trust either toast.
**One side effect worth naming.** The old `about` carried `https://felhom.eu` as its first line, so the Page
header used to show that as a blue link. Replacing the intro with §1 removed it. The `website` field is
untouched (`https://felhom.eu/`), it still shows under „Hivatkozások", and the new action button now does
that job more prominently. Nothing to fix; said here so it is not read later as a regression.
## 4. Phase C — the four checks
Measured at a **1435 px** viewport (`C1-page-computer-1435px.jpg`), with the geometry read from the DOM:
1. **The profile circle does not cut the logo** — **pass.** Rendered 168 × 168; zoomed on it, the cloud,
house, keyhole, server and the „felhom.eu" lettering are all whole.
2. **The cover headline and „felhom.eu" are whole** — **pass at computer width.** The cover renders
1059 × 403 from the natural 960 × 365 Facebook re-encode of our 1640 × 624 PNG, `object-fit: fill`, and
the image rectangle equals its container's rectangle exactly: **no crop**, and 2,6301 vs 2,6316 is a
0,06 % distortion. The container caps at **1250 px**, so a 2067 px viewport renders the identical cover
(`C1-page-computer-2067px.jpg`) — the requested 1440 px and the 1435 px measured are the same case.
3. **The profile circle does not cover cover text** — **pass.** Its top edge sits 16–17 px *below* the
cover's bottom edge; at this width it does not touch the cover at all.
4. **Phone width (390 px)** — **NOT performed.** `resize_window` reported success while the window was
maximised and changed nothing (`innerWidth` 2133); after the operator un-maximised it, only the first call
after each window-state change took effect. At about 500 px wide, **`www.facebook.com` kept the desktop
layout and grew a horizontal scrollbar** — `innerWidth` pinned at 1105, `scrollWidth` 2051
(`C3-narrow-window-horizontal-scroll.jpg`) — and `m.facebook.com/felhom.eu` redirected to
`www.facebook.com/felhom.eu?_rdr`. The phone view needs a mobile user agent, which these tools do not set.
Filed **R-918**. The arithmetic (a 2,4:1 crop of 1640 × 624 loses ~71 px a side; the safe area is 306 px
clear) says the headline should survive, but that is arithmetic and is reported as such, not as a check.
No cut was found at the width that could be measured, so nothing was re-cropped on Facebook.
## 5. Secret scan, with its control
Over the whole evidence directory: control planted (`EAAfakeprobe`) → `grep -r -o -a 'EAA'` = **1**; control
removed → **0**. `"access_token"` = **0**. `jelszo|jelszó|password` = **0**.
The first pass returned **1 real hit**: `probe/run.log` line 1, the probe's own
`key FACEBOOK_API: <n> chars, starts EAA` line — token metadata, not a token. It was redacted in place before
committing and the replacement line says so. No screenshot of the credentials file, a token page, the
Messenger inbox or the operator's personal profile was saved; the one screenshot that caught the re-auth
dialog (with the operator's name and avatar) was deliberately **not** copied into the evidence directory.
## 6. What the operator still does
- **R-917 — decide where `COPY.md` §2 goes** (a leave it unused / b rewrite one of §1-§2 to fit 255
characters / c publish it as the first pinned post after Live / d ask Meta). Recommended **c**. If nothing
is decided, the Page carries only the 99-character intro — which is a working state, not a broken one.
- **R-915 — switch the Meta app to Live** before any real public post; it needs a Terms of Service URL
(blocked on R-813). `COPY.md` §4, the first three posts, waits on this and was out of scope here.
- **R-916 — the vector logo master**, on the machine that has the „M+ 2c" and „Vremena Grotesk" fonts.
- **R-918 — the phone check**: open `facebook.com/felhom.eu` on a phone, or Ctrl+Shift+M in Chrome at
390 × 844, and say whether the cover headline is cut.
## 7. Register
Rows before **138**, after **140**, opened **2** (R-917, R-918), closed **0**. Section counts updated:
Business & legal 9 → 10, Process & tooling 23 → 24. R-915 stays open as the task says.
## 8. Teardown — three layers
- **Machine:** nothing. No host, no guest, no box, no hub was touched. Two throwaway read-only scripts were
written to DooPlex `/tmp` (`fb_fields.py`, `fb_fields2.py`) and nothing in the DooPlex working tree was
changed; the probe wrote only to DooPlex `/tmp`, from where the JSON was copied here.
- **Facebook:** no post, no story, no reel, no comment, no message sent, no like, no follow, no invite. No
ad, no boost, no Meta Verified, no payment or monetisation setting. No app change — `felhom.eu`
(`2273465403490709`) stays in development mode. No business-portfolio change, no new permission, no new
token, no Page-role change. No consent or terms banner accepted. The one automation created is the
Messenger auto-reply that B4 asked for, and it carries our text.
- **Hub:** nothing.
## 9. Gates, commit, CI
Filled in below after the run.
Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

@@ -0,0 +1,97 @@
# Phase A — Meta's own picture-size page, read first-hand
| | |
|---|---|
| URL | `https://www.facebook.com/help/125379114252045` |
| Title | „A Facebook-oldalak profilképének és borítóképének méretei \| Facebook Súgóközpont" |
| Read at | 2026-10-08 18:04:31 UTC (20:04 CEST) |
| How | Claude in Chrome on the Windows workstation, tab „Számítógépes súgó" (the default tab for a desktop browser) |
| Screenshot | `A-meta-sizes-screenshot.jpg` |
DooPlex could not open this page (it needs a browser); this is the first first-hand read.
## The quote — verbatim, every pixel figure
> A logódat vagy szöveget is tartalmazó profilképek és borítóképek esetén PNG-fájl használatával jobb
> eredményt érhetsz el.
>
> A borítóképed bal oldalát részben takarni fogja a profilképed, és előfordulhat, hogy körül lesz vágva
> és át lesz méretezve, hogy igazodjon a különböző képernyőkhöz.
>
> **Facebook-oldal profilképe**
>
> Az oldal profilképének tulajdonságai:
>
> - Számítógépen 176×176, okostelefonon 196×196, hagyományos mobiltelefonon 36×36 képpontos méretben
> jelenik meg az oldaladon.
> - Kör alakban körül van vágva.
> - A legjobb minőséghez 320 képpont széles és 320 képpont magas képet érdemes használni.
>
> **Facebook-oldal borítóképe számítógépen**
>
> - Balra igazítva jelenik meg, a teljes oldalt kitölti, oldalaránya 16:9.
> - Legalább 400 képpont szélesnek és 150 képpont magasnak kell lennie.
> - Leggyorsabban sRGB JPG formátumú, 851 képpont széles és 315 képpont magas, 100 kB méretnél kisebb
> fájlként töltődik be.
>
> **Facebook-oldal borítóképe mobileszközön**
>
> - Balra igazítva jelenik meg, a teljes oldalt kitölti, oldalaránya 2,4:1.
> - Legalább 400 képpont szélesnek és 150 képpont magasnak kell lennie.
> - Leggyorsabban sRGB JPG formátumú, 851 képpont széles és 315 képpont magas, 100 kB méretnél kisebb
> fájlként töltődik be.
> - A profilkép mobileszközön körülbelül 40 képponttal átfedi a borítóképet.
## Every figure, as a table
| Thing | Meta says |
|---|---|
| Profile picture, displayed, computer | 176 × 176 |
| Profile picture, displayed, smartphone | 196 × 196 |
| Profile picture, displayed, feature phone | 36 × 36 |
| Profile picture, shape | circle crop |
| Profile picture, source to upload | 320 × 320 („a legjobb minőséghez") |
| Cover, computer, aspect ratio | 16:9 |
| Cover, computer, minimum | 400 wide × 150 high |
| Cover, computer, fastest-loading file | sRGB JPG, 851 × 315, < 100 kB |
| Cover, mobile, aspect ratio | 2,4:1 |
| Cover, mobile, minimum | 400 wide × 150 high |
| Cover, mobile, fastest-loading file | sRGB JPG, 851 × 315, < 100 kB |
| Profile circle over the cover, mobile | overlaps by about 40 px |
| File format for a cover/profile with a logo or text | PNG beats JPG |
## Compared with `marketing/facebook/README.md` „Sizes used"
**Different.** The grade stays a grade of *our* figures, and most of ours are not on Meta's page at all.
| Ours (second-hand) | Meta's page | Verdict |
|---|---|---|
| cover shown **820 × 312** on computers | not stated — Meta gives a ratio (16:9), a minimum (400 × 150) and a fastest-loading size (851 × 315) | **not confirmed**; no 820 × 312 anywhere on Meta's page |
| cover shown **640 × 360** on phones | not stated — Meta gives 2,4:1, minimum 400 × 150, 851 × 315 | **not confirmed**; and 640 × 360 is 16:9, which Meta puts on the **computer**, not the phone |
| profile picture shown **about 176 px** | 176 × 176 on computer | **confirmed** (and Meta adds 196 × 196 on a smartphone, 36 × 36 on a feature phone) |
| profile circle over the cover: 16 px / 176 px (computer), **24 px / 196 px** (phone) | only „körülbelül 40 képponttal átfedi" on mobile; nothing for the computer | **different** — Meta's mobile overlap is ~40 px, not 24 px; the computer overlap is not stated |
| built at 2×: **1640 × 624** (= 2,63:1) | 851 × 315 is 2,70:1; „16:9" is 1,78:1; „2,4:1" is 2,40:1 | our ratio is between Meta's two ratios and close to its own recommended file's ratio |
| PNG for the pictures | „A logódat vagy szöveget is tartalmazó profilképek és borítóképek esetén PNG-fájl… jobb eredményt" | **confirmed** — our PNGs are the right format |
| profile source 932 × 932 (unscaled logo master) | 320 × 320 „a legjobb minőséghez" | ours is **larger than Meta's recommendation**, i.e. downscaled not upscaled — safe |
### Meta's page contradicts itself, and that is the quote's own problem, not ours
Meta states the computer cover ratio as **16:9 (1,78:1)** and the mobile cover ratio as **2,4:1**, and
then recommends **the same 851 × 315 file (2,70:1) for both**. No one file satisfies all three. This is
recorded, not resolved — Phase C measures the live Page instead, which is a different channel from this
help page.
### Are the pictures still safe?
**Not answered here, by design.** The task says: do not rebuild in this phase. What can be said from the
numbers alone:
- Our 1640 × 624 cover is **far above** both stated minimums (400 × 150) and is PNG, which Meta prefers
for pictures carrying a logo or text.
- The safe area we build to — the centre **1028 × 544** of 1640 × 624 — is 1,89:1, which sits **inside**
both of Meta's stated ratios (1,78:1 and 2,40:1) on the horizontal axis but is **taller** than 16:9
allows at that width. So the arithmetic does not by itself guarantee the computer view is clear.
- Meta's mobile profile-circle overlap of **~40 px** (on a 196 px circle) is larger than the 24 px our
README assumed, so slightly more of the cover's bottom-left is hidden on a phone than we planned for.
**Phase C is the measurement.** Its screenshots at 1440 px and 390 px decide whether anything is cut.
Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

@@ -0,0 +1,88 @@
# Facebook Page setup — evidence, 2026-10-08
Task: `marketing/facebook/TASK-page-setup-windows.md`. Run from the Windows workstation with Claude in
Chrome (the operator's own Chrome, logged in as the Page admin); the Graph read-backs ran on DooPlex,
where the credentials file is.
Baseline `felhom.eu` `main` = `1d692734` (clean on both working trees before the run).
## What is in here
| File | What it is |
|---|---|
| `A-meta-sizes.md` | Phase A — Meta's own size page, quoted verbatim, with the comparison against our README |
| `A-meta-sizes-screenshot.jpg` | the same page on screen |
| `B0-page-before.jpg` | the Page before any edit (old intro text visible) |
| `B1-intro-after.jpg` | the Page after the intro was replaced |
| `B3-action-button-readback.jpg` | the action button read back from the Page header „…" menu (a different entry point than the one that set it) |
| `B4-messenger-welcome-refused-attempt.jpg` | the welcome message typed in, on the attempt Meta refused |
| `B4-messenger-welcome-after.jpg` | the saved automation, on, with our text |
| `B5-username-after.jpg` | „Oldal általános beállításai" showing the saved username |
| `C1-page-computer-1435px.jpg` | the Page at a 1435 px viewport (the Phase C computer check) |
| `C1-page-computer-2067px.jpg` | the same at 2067 px — the cover container is capped at 1250 px, so both show the identical cover |
| `C3-narrow-window-horizontal-scroll.jpg` | the proof that narrowing the window does NOT give the phone layout (see below) |
| `probe-before/` | `fb_probe.py read` before the edits — `C1-page.json` holds the OLD `about` |
| `probe/` | `fb_probe.py read` after the edits — `C1-page.json` holds the NEW `about`; `run.log` is the run transcript |
## The read-backs, each from a different channel than the edit
| Edit | Made in | Read back from | Result |
|---|---|---|---|
| B1 intro | the Page's „Névjegy" editor | Graph API `GET /{page}?fields=about` (DooPlex, Page token) | `about` = 99 chars / 111 bytes, **hex equal** to `COPY.md` §1; the before run holds a different 134-char value |
| B3 action button | the „Az oldalad beállításának befejezése" card | the Page header „…" → „Műveletgomb módosítása" | „További információ", `https://felhom.eu/` |
| B4 Messenger welcome | Business Suite → Bejövő üzenetek → Automatizálások | the automation reopened from its own URL after a reload | 120 chars / 134 bytes, **hex equal** to `COPY.md` §3; toggle „Bekapcsolva" |
| B5 username | Facebook settings → Oldal általános beállításai | Graph API `GET /{page}?fields=username` **and** loading `facebook.com/felhom.eu` | `username` = `felhom.eu`; the address loads the Page |
Hex comparisons were made against the fenced blocks of `marketing/facebook/COPY.md`, read from the file —
never retyped. The in-page text was read with `TextEncoder` in the browser and compared byte for byte.
## Phase C — what was measured and what was not
**Computer width: measured, nothing is cut.** At a 1435 px viewport the cover renders **1059 × 403** from
the natural **960 × 365** Facebook re-encode of our 1640 × 624 PNG; `object-fit: fill`, and the image's
rectangle equals its container's rectangle exactly, so **no crop** and no visible distortion (2.6301 vs
2.6316 — 0.06 %). The cover container is capped at **1250 px**, so a 2067 px viewport shows the same
picture; the requested 1440 px and the 1435 px measured are the same case. The headline „Saját felhőd,
saját szabályaid" and „felhom.eu" are whole. The profile circle renders 168 × 168 and its top edge sits
**16–17 px below the cover's bottom edge** — it does not overlap the cover at all at this width, so it
covers no cover text. Zoomed on the circle, the logo is whole: nothing is cut by the circular crop.
**Phone width (390 px): NOT performed.** What was tried, in order:
1. `resize_window` to 1440 × 900 and to 390 × 844 while the Chrome window was maximised — the tool
reported success each time and `window.innerWidth` never moved (2133).
2. The operator un-maximised the window; resizing then worked, but only the first call after a window
state change took effect — several later calls reported success and changed nothing.
3. With the window narrowed to about 500 px (`C3-narrow-window-horizontal-scroll.jpg`), **`www.facebook.com`
kept the desktop layout and grew a horizontal scrollbar**: `window.innerWidth` stayed pinned at 1105
and `document.documentElement.scrollWidth` at 2051. The desktop site has a minimum width and never
switches to the phone layout.
4. `https://m.facebook.com/felhom.eu` redirected to `https://www.facebook.com/felhom.eu?_rdr`.
So narrowing a desktop browser cannot produce Facebook's phone rendering — it needs a mobile user agent
(Chrome DevTools device toolbar, Ctrl+Shift+M) or a real phone. Filed as **R-918**.
**What the numbers predict for the phone, as arithmetic and not as a measurement.** Meta's page says the
mobile cover is 2,4:1 and the profile circle overlaps it by about 40 px. Our cover is 1640 × 624 =
2,628:1. Reaching 2,4:1 at full height keeps 624 × 2,4 = 1497,6 px of the 1640 px width, so about 71 px
would be cut from each side. Our safe area is the centre 1028 × 544, which is 306 px clear of each edge —
comfortably inside that crop. This says the headline should survive; it does not show that it does.
## Secret scan
Run over this whole directory, with a planted control:
```
printf 'EAAfakeprobe\n' > decoy-control.txt
grep -r -o -a 'EAA' . -> 1 (the control, so the search works)
rm decoy-control.txt
grep -r -o -a 'EAA' . -> 0
grep -r -o -a '"access_token"' . -> 0
grep -r -o -a -iE 'jelszo|jelszó|password' . -> 0
```
The first pass found **1** real hit: `probe/run.log` line 1, the probe's own
`key FACEBOOK_API: <n> chars, starts EAA` line. That is token metadata, not a token, but it was redacted
in place before committing and the line says so. No token, no password and no personal data is in this
directory; the Messenger inbox, the credentials file and the operator's personal profile were never
screenshotted.
@@ -0,0 +1,63 @@
{
"api_version": "v26.0",
"at_utc": "2026-10-08T18:05:17Z",
"error": null,
"files": {},
"form": {},
"headers": {
"facebook-api-version": "v26.0",
"x-business-use-case-usage": "{\"4713349378884589\":[{\"type\":\"business_integration_system_user_platform_endpoints\",\"call_count\":0,\"total_cputime\":0,\"total_time\":0,\"estimated_time_to_regain_access\":0}]}",
"x-fb-rev": "1049711438",
"x-fb-trace-id": "GQz+i0Xgn+O"
},
"http_status": 200,
"method": "GET",
"ok": true,
"path": "debug_token",
"query_keys": [
"input_token"
],
"response": {
"data": {
"app_id": "2273465403490709",
"application": "felhom.eu",
"data_access_expires_at": 0,
"expires_at": 0,
"granular_scopes": [
{
"scope": "pages_show_list"
},
{
"scope": "business_management"
},
{
"scope": "pages_read_engagement"
},
{
"scope": "pages_read_user_content"
},
{
"scope": "pages_manage_posts"
},
{
"scope": "pages_manage_engagement"
}
],
"is_valid": true,
"issued_at": 1791474515,
"scopes": [
"read_insights",
"pages_show_list",
"business_management",
"pages_read_engagement",
"pages_read_user_content",
"pages_manage_posts",
"pages_manage_engagement",
"public_profile"
],
"type": "SYSTEM_USER",
"user_id": "122094150717513084"
}
},
"step": "A1-debug-token"
}
@@ -0,0 +1,25 @@
{
"api_version": "v26.0",
"at_utc": "2026-10-08T18:05:18Z",
"error": null,
"files": {},
"form": {},
"headers": {
"facebook-api-version": "v26.0",
"x-app-usage": "{\"call_count\":0,\"total_cputime\":0,\"total_time\":0}",
"x-fb-rev": "1049721894",
"x-fb-trace-id": "Bmp0t/raQ8/"
},
"http_status": 200,
"method": "GET",
"ok": true,
"path": "me",
"query_keys": [
"fields"
],
"response": {
"id": "122094150717513084",
"name": "felhom-cc"
},
"step": "B1-me"
}
@@ -0,0 +1,44 @@
{
"api_version": "v26.0",
"at_utc": "2026-10-08T18:05:19Z",
"error": null,
"files": {},
"form": {},
"headers": {
"facebook-api-version": "v26.0",
"x-app-usage": "{\"call_count\":0,\"total_cputime\":0,\"total_time\":0}",
"x-fb-rev": "1049721894",
"x-fb-trace-id": "Bzj+NQqrWTp"
},
"http_status": 200,
"method": "GET",
"ok": true,
"path": "me/accounts",
"query_keys": [
"fields"
],
"response": {
"data": [
{
"id": "1360018983863273",
"name": "Felhom.eu",
"tasks": [
"CREATE_CONTENT",
"MODERATE",
"MESSAGING",
"ADVERTISE",
"ANALYZE",
"MANAGE_LEADS",
"VIEW_MONETIZATION_INSIGHTS"
]
}
],
"paging": {
"cursors": {
"after": "QVFIVG1yVkVJTjcyYWRLNlN4ZAXNSY2FwQnVIa01JY2hjazlNTG94Y0oydkh3aC1hR1pvYW5hcm40elhQTTBndVQwTTV2U1VJeUtLOHVESWlXNlZA1WC1QbFlR",
"before": "QVFIVG1yVkVJTjcyYWRLNlN4ZAXNSY2FwQnVIa01JY2hjazlNTG94Y0oydkh3aC1hR1pvYW5hcm40elhQTTBndVQwTTV2U1VJeUtLOHVESWlXNlZA1WC1QbFlR"
}
}
},
"step": "B2-me-accounts"
}
@@ -0,0 +1,64 @@
{
"api_version": "v26.0",
"at_utc": "2026-10-08T18:05:20Z",
"error": null,
"files": {},
"form": {},
"headers": {
"facebook-api-version": "v26.0",
"x-business-use-case-usage": "{\"4713349378884589\":[{\"type\":\"business_integration_system_user_platform_endpoints\",\"call_count\":1,\"total_cputime\":1,\"total_time\":1,\"estimated_time_to_regain_access\":0}]}",
"x-fb-rev": "1049721894",
"x-fb-trace-id": "EA88ZCISFsc"
},
"http_status": 200,
"method": "GET",
"ok": true,
"path": "debug_token",
"query_keys": [
"input_token"
],
"response": {
"data": {
"app_id": "2273465403490709",
"application": "felhom.eu",
"data_access_expires_at": 0,
"expires_at": 0,
"granular_scopes": [
{
"scope": "pages_show_list"
},
{
"scope": "business_management"
},
{
"scope": "pages_read_engagement"
},
{
"scope": "pages_read_user_content"
},
{
"scope": "pages_manage_posts"
},
{
"scope": "pages_manage_engagement"
}
],
"is_valid": true,
"issued_at": 1791482718,
"profile_id": "1360018983863273",
"scopes": [
"read_insights",
"pages_show_list",
"business_management",
"pages_read_engagement",
"pages_read_user_content",
"pages_manage_posts",
"pages_manage_engagement",
"public_profile"
],
"type": "PAGE",
"user_id": "122094150717513084"
}
},
"step": "B3-debug-page-token"
}
@@ -0,0 +1,31 @@
{
"api_version": "v26.0",
"at_utc": "2026-10-08T18:05:20Z",
"error": null,
"files": {},
"form": {},
"headers": {
"facebook-api-version": "v26.0",
"x-business-use-case-usage": "{\"1360018983863273\":[{\"type\":\"pages\",\"call_count\":1,\"total_cputime\":1,\"total_time\":1,\"estimated_time_to_regain_access\":0}]}",
"x-fb-rev": "1049721894",
"x-fb-trace-id": "BBdQUTLHeNg"
},
"http_status": 200,
"method": "GET",
"ok": true,
"path": "1360018983863273",
"query_keys": [
"fields"
],
"response": {
"about": "https://felhom.eu\nSaját felhőd, saját szabályaid\nProfesszionális otthoni szerver telepítés és üzemeltetés. Te irányítasz, mi segítünk.",
"category": "Information Technology Company",
"fan_count": 0,
"followers_count": 0,
"id": "1360018983863273",
"link": "https://www.facebook.com/1360018983863273",
"name": "Felhom.eu",
"website": "https://felhom.eu/"
},
"step": "C1-page"
}
@@ -0,0 +1,46 @@
{
"api_version": "v26.0",
"at_utc": "2026-10-08T18:05:21Z",
"error": null,
"files": {},
"form": {},
"headers": {
"facebook-api-version": "v26.0",
"x-business-use-case-usage": "{\"1360018983863273\":[{\"type\":\"pages\",\"call_count\":1,\"total_cputime\":1,\"total_time\":1,\"estimated_time_to_regain_access\":0}]}",
"x-fb-rev": "1049711438",
"x-fb-trace-id": "AKD/CIXSVki"
},
"http_status": 200,
"method": "GET",
"ok": true,
"path": "1360018983863273/feed",
"query_keys": [
"limit"
],
"response": {
"data": [
{
"created_time": "2026-10-08T17:40:01+0000",
"id": "1360018983863273_1142494138310377",
"story": "Felhom.eu updated their cover photo."
},
{
"created_time": "2026-10-08T17:39:28+0000",
"id": "1360018983863273_122096099025511222",
"story": "Felhom.eu updated their profile picture."
},
{
"created_time": "2026-10-08T15:31:07+0000",
"id": "1360018983863273_122096048493511222",
"story": "Felhom.eu updated their profile picture."
}
],
"paging": {
"cursors": {
"after": "QVFIVEowbWpnd0hBb2s2bWdDeTZASWXN6RzB5Wkc0dVFwR1lSLWNkVXgzZAnZAVcjA4ZAXNZAVzlaSmZAjTlVTRXIyUmU5NkhPVUtrWjFqTlVVSndjZAElUVy1zYlAyTVY2Rm9iSVM3czA4ejhPSmZAVUWtxS0hQVElEbmlEdXphMVl3aVFlX3dRcnVxaVg3ZAUpURlloRVdtZA0pqYmNDUkVmOWNSU2gwbllWUTNxVmlZATGdxSnBZAY0NwZAEh2TE5tWWh3MHAyNVhRa0thSV9zWG10NUVOckFrMDFCZA2x1N01TSXV6WjRDckNrRjZAuV1ZAVSkJxMEhtN3lCYktqUGVMWkZAZAbkhQY21kWjIzaENIOWQyWGRIeFJod0s4Qnd5WEtqYzRmMXlubFpleXNXRG15T2xZAZAk4ta0RGLW9lWnFOcTZAzVnl0TXk2ZAEYzNnZA1bTRwU0pZAS2NxejVoTFZAObGdoazlwTE5kLVlQem1PTzlNMW81TjdVWElXcU1MQUphczZA3R1c3bmZAlY1o1TVA1ZAk5BRWFaNE5YOXZA0NFVjd2d1ZA3M0OEFhb19yd0FrYVFadVp1MkN3am15dHhkZAzJMc1VXd0Q4YWdsZAVhmUG1LeXo3SU1RTXJ0LWJUWG5oSXhUc2lWVVpMdnY3Mzc5YXdIU243WC05MnctSHlQejZAwemZAHQzNzczZAHNW1mZAE9rdUZAZAZA3l0SVhrbmlUWUJGSUs2WVNDdkU4MzV2R09xUEZALTDVBS1NRWk9YWnlkUDR3LW5seVBodHZA6VjFiektFeHVXV3M1WFY5ZA3hqVUFaU3VMX2l0OXc5UXpTdzBxajh6SDNqd05uRHZAXaE4yODBTM09VVjVGQXRMN0dHc2Y2MWpGc2treHJPRWVNVTRjaDNyY3BOZA0w4cHFfQ3M3dWNHU0dfNDNJTVRkNkRWeGZAhMDFpSXU2SkZA0MXY4OHAxMnBkc28tWFlUVEJEUVphVW5ybEQ1ZAlJOUQZDZD",
"before": "QVFIVHVzckFTZAjMzMm5GRFM3SFNGTnlfLUxsZAzdTN2FpdDVJTUR6a3REYXV2VkExQ3c5bDZAJX1lJNll4TUk5MlAzeHRvYkw5RUl6akY2QXVkVTYwSnRLVTBlSU5oNkJqSmk2a1cwMEwxaVBCVWd5T2pmOG91bWRHVGJiWHR2aU9ucnZAuZAFRzSmpUR2laUDJ5SklXMFVDZAzh0dXJnTkQwazlLckhwUE9XcnVqRk1icm1TUVVnRmhxMFlVamhKSWJoeUNlRTcwQzFzaUdVcFN6Sm96OFVScVF0ZAE84aFJ1bzFvWHVwbExjcU5OUng1LXhFV0FMdF9BaWhWUmZAUVG5CeUFhNTJablhtckktSzRsU204dzFWSVdzY28ta0padV9MZAHZANMmZAhVi1fSmY1RllGaUJ0ZADFUUkRDX3ljVXdlYWsyanNERGl1VWJ2ZAHBWNEJLUDMycFlQR25xZAzlqbWZAoS3hfOTlZAR3ZABME0wVk0tMVlqbUItNGpTeDlGcGNwWmwzd3ZAibDJYcjVqdGFWLWxrV3Q3ZA0t5VVdIVXljSHMyMkxDZAFhhTjktTm5hM1RVQ1Jub2NVSEJOSzhzeTlXSWJXT2hLTG9WRWRyUlpqbHBNVGhpZAzdHT1psRWRBZAjVwMkFLMFl4SXhxWE1vaXhCRkFFbW1kck1KYmJHdHk4X052TUlXLUUxaGQ2aVEtaFRLZAkRhX0NoVzlEVEV3U05lNC0zSnd4RFllZAHJoVEdYSFRpQTcycEF1ME43Mm5GVUwtRi1ya3dTT3Q0ZAG9VeVAzTmZAUNEJfdHkwemVDam1yeWxXQTNwZA0FDREwtTDZAxdVMwZAGduTm9jbFlOUkJEM09lVEE1c1E4N2RLLUZAJMzBKcjFDVE9LOUJKOTlDd1htX19YZAWZAZAeVNJcC01RTZA5bHFMcGF4cWtjaDV0Y3RWclVJdjNISEFPRVNXV3ZA3QlpQQk84RmZAlMThGMGlCQjF5UQZDZD"
}
}
},
"step": "C2-feed"
}
@@ -0,0 +1,47 @@
{
"api_version": "v26.0",
"at_utc": "2026-10-08T18:05:22Z",
"error": null,
"files": {},
"form": {},
"headers": {
"facebook-api-version": "v26.0",
"x-business-use-case-usage": "{\"1360018983863273\":[{\"type\":\"pages\",\"call_count\":1,\"total_cputime\":1,\"total_time\":1,\"estimated_time_to_regain_access\":0}]}",
"x-fb-rev": "1049711438",
"x-fb-trace-id": "FblG7E7+dz+"
},
"http_status": 200,
"method": "GET",
"ok": true,
"path": "1360018983863273/insights",
"query_keys": [
"metric",
"period"
],
"response": {
"data": [
{
"description": "Lifetime: The number of followers of your Facebook Page or profile. This is calculated as the number of follows minus the number of unfollows over the lifetime of your Facebook Page or profile. ",
"id": "1360018983863273/insights/page_follows/day",
"name": "page_follows",
"period": "day",
"title": "Lifetime Total Follows",
"values": [
{
"end_time": "2026-10-06T07:00:00+0000",
"value": 0
},
{
"end_time": "2026-10-07T07:00:00+0000",
"value": 0
}
]
}
],
"paging": {
"next": "https://graph.facebook.com/v26.0/1360018983863273/insights?metric=page_follows&period=day&since=1791356400&until=1791529200",
"previous": "https://graph.facebook.com/v26.0/1360018983863273/insights?metric=page_follows&period=day&since=1791010800&until=1791183600"
}
},
"step": "C3-insights-page_follows"
}
@@ -0,0 +1,47 @@
{
"api_version": "v26.0",
"at_utc": "2026-10-08T18:05:22Z",
"error": null,
"files": {},
"form": {},
"headers": {
"facebook-api-version": "v26.0",
"x-business-use-case-usage": "{\"1360018983863273\":[{\"type\":\"pages\",\"call_count\":1,\"total_cputime\":1,\"total_time\":1,\"estimated_time_to_regain_access\":0}]}",
"x-fb-rev": "1049711438",
"x-fb-trace-id": "CiAll5MWBHl"
},
"http_status": 200,
"method": "GET",
"ok": true,
"path": "1360018983863273/insights",
"query_keys": [
"metric",
"period"
],
"response": {
"data": [
{
"description": "The number of times any content from your Page was displayed on a person's screen, including posts, stories, ads, and other content on your Page.",
"id": "1360018983863273/insights/page_media_view/day",
"name": "page_media_view",
"period": "day",
"title": "Facebook views",
"values": [
{
"end_time": "2026-10-06T07:00:00+0000",
"value": 0
},
{
"end_time": "2026-10-07T07:00:00+0000",
"value": 0
}
]
}
],
"paging": {
"next": "https://graph.facebook.com/v26.0/1360018983863273/insights?metric=page_media_view&period=day&since=1791356400&until=1791529200",
"previous": "https://graph.facebook.com/v26.0/1360018983863273/insights?metric=page_media_view&period=day&since=1791010800&until=1791183600"
}
},
"step": "C3-insights-page_media_view"
}
@@ -0,0 +1,47 @@
{
"api_version": "v26.0",
"at_utc": "2026-10-08T18:05:21Z",
"error": null,
"files": {},
"form": {},
"headers": {
"facebook-api-version": "v26.0",
"x-business-use-case-usage": "{\"1360018983863273\":[{\"type\":\"pages\",\"call_count\":1,\"total_cputime\":1,\"total_time\":1,\"estimated_time_to_regain_access\":0}]}",
"x-fb-rev": "1049721894",
"x-fb-trace-id": "D5xPAv6Y7nQ"
},
"http_status": 200,
"method": "GET",
"ok": true,
"path": "1360018983863273/insights",
"query_keys": [
"metric",
"period"
],
"response": {
"data": [
{
"description": "Daily: The number of times people have engaged with your posts through like, comments and shares and more.",
"id": "1360018983863273/insights/page_post_engagements/day",
"name": "page_post_engagements",
"period": "day",
"title": "Daily Post Engagements",
"values": [
{
"end_time": "2026-10-06T07:00:00+0000",
"value": 0
},
{
"end_time": "2026-10-07T07:00:00+0000",
"value": 0
}
]
}
],
"paging": {
"next": "https://graph.facebook.com/v26.0/1360018983863273/insights?metric=page_post_engagements&period=day&since=1791356400&until=1791529200",
"previous": "https://graph.facebook.com/v26.0/1360018983863273/insights?metric=page_post_engagements&period=day&since=1791010800&until=1791183600"
}
},
"step": "C3-insights-page_post_engagements"
}
@@ -0,0 +1,7 @@
{
"facebook-api-version": "v26.0",
"x-app-usage": "{\"call_count\":0,\"total_cputime\":0,\"total_time\":0}",
"x-business-use-case-usage": "{\"4713349378884589\":[{\"type\":\"business_integration_system_user_platform_endpoints\",\"call_count\":0,\"total_cputime\":0,\"total_time\":0,\"estimated_time_to_regain_access\":0}]}",
"x-fb-rev": "1049711438",
"x-fb-trace-id": "GQz+i0Xgn+O"
}
@@ -0,0 +1,63 @@
{
"api_version": "v26.0",
"at_utc": "2026-10-08T18:23:16Z",
"error": null,
"files": {},
"form": {},
"headers": {
"facebook-api-version": "v26.0",
"x-business-use-case-usage": "{\"4713349378884589\":[{\"type\":\"business_integration_system_user_platform_endpoints\",\"call_count\":1,\"total_cputime\":1,\"total_time\":1,\"estimated_time_to_regain_access\":0}]}",
"x-fb-rev": "1049721894",
"x-fb-trace-id": "FrusM41Cili"
},
"http_status": 200,
"method": "GET",
"ok": true,
"path": "debug_token",
"query_keys": [
"input_token"
],
"response": {
"data": {
"app_id": "2273465403490709",
"application": "felhom.eu",
"data_access_expires_at": 0,
"expires_at": 0,
"granular_scopes": [
{
"scope": "pages_show_list"
},
{
"scope": "business_management"
},
{
"scope": "pages_read_engagement"
},
{
"scope": "pages_read_user_content"
},
{
"scope": "pages_manage_posts"
},
{
"scope": "pages_manage_engagement"
}
],
"is_valid": true,
"issued_at": 1791474515,
"scopes": [
"read_insights",
"pages_show_list",
"business_management",
"pages_read_engagement",
"pages_read_user_content",
"pages_manage_posts",
"pages_manage_engagement",
"public_profile"
],
"type": "SYSTEM_USER",
"user_id": "122094150717513084"
}
},
"step": "A1-debug-token"
}
@@ -0,0 +1,25 @@
{
"api_version": "v26.0",
"at_utc": "2026-10-08T18:23:16Z",
"error": null,
"files": {},
"form": {},
"headers": {
"facebook-api-version": "v26.0",
"x-app-usage": "{\"call_count\":1,\"total_cputime\":0,\"total_time\":1}",
"x-fb-rev": "1049721894",
"x-fb-trace-id": "DkQ940lmMsP"
},
"http_status": 200,
"method": "GET",
"ok": true,
"path": "me",
"query_keys": [
"fields"
],
"response": {
"id": "122094150717513084",
"name": "felhom-cc"
},
"step": "B1-me"
}
@@ -0,0 +1,44 @@
{
"api_version": "v26.0",
"at_utc": "2026-10-08T18:23:17Z",
"error": null,
"files": {},
"form": {},
"headers": {
"facebook-api-version": "v26.0",
"x-app-usage": "{\"call_count\":1,\"total_cputime\":0,\"total_time\":1}",
"x-fb-rev": "1049721894",
"x-fb-trace-id": "HMxzy4fxMpx"
},
"http_status": 200,
"method": "GET",
"ok": true,
"path": "me/accounts",
"query_keys": [
"fields"
],
"response": {
"data": [
{
"id": "1360018983863273",
"name": "Felhom.eu",
"tasks": [
"CREATE_CONTENT",
"MODERATE",
"MESSAGING",
"ADVERTISE",
"ANALYZE",
"MANAGE_LEADS",
"VIEW_MONETIZATION_INSIGHTS"
]
}
],
"paging": {
"cursors": {
"after": "QVFIVG1yVkVJTjcyYWRLNlN4ZAXNSY2FwQnVIa01JY2hjazlNTG94Y0oydkh3aC1hR1pvYW5hcm40elhQTTBndVQwTTV2U1VJeUtLOHVESWlXNlZA1WC1QbFlR",
"before": "QVFIVG1yVkVJTjcyYWRLNlN4ZAXNSY2FwQnVIa01JY2hjazlNTG94Y0oydkh3aC1hR1pvYW5hcm40elhQTTBndVQwTTV2U1VJeUtLOHVESWlXNlZA1WC1QbFlR"
}
}
},
"step": "B2-me-accounts"
}
@@ -0,0 +1,64 @@
{
"api_version": "v26.0",
"at_utc": "2026-10-08T18:23:18Z",
"error": null,
"files": {},
"form": {},
"headers": {
"facebook-api-version": "v26.0",
"x-business-use-case-usage": "{\"4713349378884589\":[{\"type\":\"business_integration_system_user_platform_endpoints\",\"call_count\":1,\"total_cputime\":1,\"total_time\":1,\"estimated_time_to_regain_access\":0}]}",
"x-fb-rev": "1049721894",
"x-fb-trace-id": "GPFAp+vD2Lj"
},
"http_status": 200,
"method": "GET",
"ok": true,
"path": "debug_token",
"query_keys": [
"input_token"
],
"response": {
"data": {
"app_id": "2273465403490709",
"application": "felhom.eu",
"data_access_expires_at": 0,
"expires_at": 0,
"granular_scopes": [
{
"scope": "pages_show_list"
},
{
"scope": "business_management"
},
{
"scope": "pages_read_engagement"
},
{
"scope": "pages_read_user_content"
},
{
"scope": "pages_manage_posts"
},
{
"scope": "pages_manage_engagement"
}
],
"is_valid": true,
"issued_at": 1791483797,
"profile_id": "1360018983863273",
"scopes": [
"read_insights",
"pages_show_list",
"business_management",
"pages_read_engagement",
"pages_read_user_content",
"pages_manage_posts",
"pages_manage_engagement",
"public_profile"
],
"type": "PAGE",
"user_id": "122094150717513084"
}
},
"step": "B3-debug-page-token"
}
@@ -0,0 +1,31 @@
{
"api_version": "v26.0",
"at_utc": "2026-10-08T18:23:18Z",
"error": null,
"files": {},
"form": {},
"headers": {
"facebook-api-version": "v26.0",
"x-business-use-case-usage": "{\"1360018983863273\":[{\"type\":\"pages\",\"call_count\":1,\"total_cputime\":1,\"total_time\":1,\"estimated_time_to_regain_access\":0}]}",
"x-fb-rev": "1049721894",
"x-fb-trace-id": "GGxP8sYOYA0"
},
"http_status": 200,
"method": "GET",
"ok": true,
"path": "1360018983863273",
"query_keys": [
"fields"
],
"response": {
"about": "Saját felhőd, saját szabályaid. Otthoni szerver telepítés, üzemeltetés. Te irányítasz, mi segítünk.",
"category": "Information Technology Company",
"fan_count": 0,
"followers_count": 0,
"id": "1360018983863273",
"link": "https://www.facebook.com/1360018983863273",
"name": "Felhom.eu",
"website": "https://felhom.eu/"
},
"step": "C1-page"
}
@@ -0,0 +1,46 @@
{
"api_version": "v26.0",
"at_utc": "2026-10-08T18:23:18Z",
"error": null,
"files": {},
"form": {},
"headers": {
"facebook-api-version": "v26.0",
"x-business-use-case-usage": "{\"1360018983863273\":[{\"type\":\"pages\",\"call_count\":1,\"total_cputime\":1,\"total_time\":1,\"estimated_time_to_regain_access\":0}]}",
"x-fb-rev": "1049721894",
"x-fb-trace-id": "E98HyWsxHtV"
},
"http_status": 200,
"method": "GET",
"ok": true,
"path": "1360018983863273/feed",
"query_keys": [
"limit"
],
"response": {
"data": [
{
"created_time": "2026-10-08T17:40:01+0000",
"id": "1360018983863273_1142494138310377",
"story": "Felhom.eu updated their cover photo."
},
{
"created_time": "2026-10-08T17:39:28+0000",
"id": "1360018983863273_122096099025511222",
"story": "Felhom.eu updated their profile picture."
},
{
"created_time": "2026-10-08T15:31:07+0000",
"id": "1360018983863273_122096048493511222",
"story": "Felhom.eu updated their profile picture."
}
],
"paging": {
"cursors": {
"after": "QVFIVFoxN1haTWdDQlktdVl6WGYwczlnTi1xa250SUVxREQ2TlAxX3QtcF9NNHpfNnBYYWFiX0ZAFSkFPRlJHWklidHRveEl2bkJ6bUpaeVJTcTNVaV9ZAbTFJS3FJc29nX0FTWDFEWFVMQ0JLdDI3MWFhMTRqSnotVkcyR0lkSDFkSWNtaHAyTDFMX1YxbWNHYlg1dlZAiZADhLNE5vUUJJa1NET0ZAsWDZA2SWFxdzFxSXh6ZAk4tS19NSVBaWXlnS0RFd1NtUkhGa09qYkxFMXBzb1pVSGF5VHN1cWVZATDBCNXZANQmpTc1l2MHRVclVnZAUlYMjdYWjM5QVhHangzclNtcENKamNrMHl6TTJMd3I3djZAGcXBzeVU3MXpFSUFMZAUJoVU1vOGlCcWU0aWNSOTY2SE00MURoZAnFRS2lUZA00xcVJhMW5CRDJlbXAwWmhhYVIxaFhDd1d1UjBxZAHJYdGhKSEpqV1pLRHlwQlZALaTgtaExjLWtSNWcyYUV2NWxKXy1kRVBVOGR5SHVPam9VNXNsNk5HaVpTTFlMcDUybDZArakhjOS1BcVlRZAnRpdDZASOFkzOFQ2bE1mcHU0cnVuN2FZAc29JYmVheXc4T0V3S2ZAyckxXNklxcm5mTDFNVHFjWHZArd21WQnNDY2ZAhR0Vsd2xkY3lWdnU3X25oN25zUHczdjUxWDBEczRlVXRFaUpiTGV5ZA2RJaFJINDZAKOFNWVTE3WW4telB2TUxrbHJhc09KYlpkWUZAEaE9oQzQyY1l3V2JqQmxIczVOUE1VS0pxUjNiSVRyem1HVk03YWxaMWttOWxVUWVnQ1g4QkRBeXpyM0lRWXUtejZA5V1o2YnAzalE3MUxVTmZAYTV9pMmxyYnkwbmVhQzh4aXdLMUg2ZA2F3SWRfRThlNnlySV85MWhhM0h4X2dfQ0RUeEhhVTNCbXBpNnpFOUZARMnhuVllkMlZAESVhpWE5MN0ZAaSjllUQZDZD",
"before": "QVFIVE9HTVIxUUllU3dRbU5mNW9GcGNyQWtuaGVCMFlGTkZAJMGp3UDBwOWFZAMnk3MF9vVVg3Y0NiWnZApSmF3Q0FSSTBWa1luTGlNWEJmcWdjbFUxZAVFHX3NpNXphSGNuZAnNQdVU1UEtUbnNZAUHcwcER5S1NkQ3BSNlVQVWlRbi0zQXZAIOTdKR3ZAwajItUER4ZAFBnMnU5T0lGclc4elB5RV9zc29JTHdpeWczRkZAUSUVTVm9ubXQ5bnB4Y2pLNGhYQ2lDSDhlbVR4RDlvX3NCVUtud1FPd0FFdVJIc2V0dWFnaWtSZAVQxOVJlc18ydWFKMHVfNXJOT252MklSRjkyaTVldTc1SGxrOG4yRWdEMGhSWXd5cWdVMFZAXbHJHRFpfV2xWYnFodDFvVnFxV1l0ZAG9ab3JfWnZATVktKb3lfZAXdXWDhULWZAUNENacURQOEdQM25yNEVFVWRmNTlLczFFeGh5VVZAadVRwSXlzeFdFajhyd3FCZAWR4U21iLTZAOVFdORUVhSXBfWFJ1TVVFT2kyX09hWFZArOEJKYnZASSnFydDB2ckluT1plN1YzcWc5SUpNSUZACMVJkM2plZAWh4TkJzb0piYVRiZAFFNaHMtTDh1UHU3R3Jza1JOV2FlNWsyUUlnaGYyU2xoTVBRTUhZAaEJiNUk2RDlxYm93dzh2cERuZAlY1T0lEUGhRb2E0QTZAMQWFYVjlaQmlodkVkT3VkVktGQzEtVTBlZA0NXQTZAOVzVpYTI5WE03TWdnVzlwLVowS1dDOFBVS2pSa3V6aUEtUzRVM2xYTkNNcGlUZAG5LTk5oSG1rVFVqTW8wT1hDWW9VSzhxYkNaUVhCYmNLUWoyUnlTclpibU1hd1VFZAHE4cjNTWEk1Q3hzSXlIb2NseFhLUUFGN0dPYl8yVmlZAdFBUV0tDN0x0bjJBdXZAoZAVdod0ZAJeEdrQk1DaWlkOU56d0ZANSzdFak5zV2RhOS1sQQZDZD"
}
}
},
"step": "C2-feed"
}
@@ -0,0 +1,47 @@
{
"api_version": "v26.0",
"at_utc": "2026-10-08T18:23:19Z",
"error": null,
"files": {},
"form": {},
"headers": {
"facebook-api-version": "v26.0",
"x-business-use-case-usage": "{\"1360018983863273\":[{\"type\":\"pages\",\"call_count\":1,\"total_cputime\":1,\"total_time\":1,\"estimated_time_to_regain_access\":0}]}",
"x-fb-rev": "1049721894",
"x-fb-trace-id": "G3fCbnPETNA"
},
"http_status": 200,
"method": "GET",
"ok": true,
"path": "1360018983863273/insights",
"query_keys": [
"metric",
"period"
],
"response": {
"data": [
{
"description": "Lifetime: The number of followers of your Facebook Page or profile. This is calculated as the number of follows minus the number of unfollows over the lifetime of your Facebook Page or profile. ",
"id": "1360018983863273/insights/page_follows/day",
"name": "page_follows",
"period": "day",
"title": "Lifetime Total Follows",
"values": [
{
"end_time": "2026-10-06T07:00:00+0000",
"value": 0
},
{
"end_time": "2026-10-07T07:00:00+0000",
"value": 0
}
]
}
],
"paging": {
"next": "https://graph.facebook.com/v26.0/1360018983863273/insights?metric=page_follows&period=day&since=1791356400&until=1791529200",
"previous": "https://graph.facebook.com/v26.0/1360018983863273/insights?metric=page_follows&period=day&since=1791010800&until=1791183600"
}
},
"step": "C3-insights-page_follows"
}
@@ -0,0 +1,47 @@
{
"api_version": "v26.0",
"at_utc": "2026-10-08T18:23:20Z",
"error": null,
"files": {},
"form": {},
"headers": {
"facebook-api-version": "v26.0",
"x-business-use-case-usage": "{\"1360018983863273\":[{\"type\":\"pages\",\"call_count\":1,\"total_cputime\":1,\"total_time\":1,\"estimated_time_to_regain_access\":0}]}",
"x-fb-rev": "1049721894",
"x-fb-trace-id": "F3F+UAs/h9G"
},
"http_status": 200,
"method": "GET",
"ok": true,
"path": "1360018983863273/insights",
"query_keys": [
"metric",
"period"
],
"response": {
"data": [
{
"description": "The number of times any content from your Page was displayed on a person's screen, including posts, stories, ads, and other content on your Page.",
"id": "1360018983863273/insights/page_media_view/day",
"name": "page_media_view",
"period": "day",
"title": "Facebook views",
"values": [
{
"end_time": "2026-10-06T07:00:00+0000",
"value": 0
},
{
"end_time": "2026-10-07T07:00:00+0000",
"value": 0
}
]
}
],
"paging": {
"next": "https://graph.facebook.com/v26.0/1360018983863273/insights?metric=page_media_view&period=day&since=1791356400&until=1791529200",
"previous": "https://graph.facebook.com/v26.0/1360018983863273/insights?metric=page_media_view&period=day&since=1791010800&until=1791183600"
}
},
"step": "C3-insights-page_media_view"
}
@@ -0,0 +1,47 @@
{
"api_version": "v26.0",
"at_utc": "2026-10-08T18:23:19Z",
"error": null,
"files": {},
"form": {},
"headers": {
"facebook-api-version": "v26.0",
"x-business-use-case-usage": "{\"1360018983863273\":[{\"type\":\"pages\",\"call_count\":1,\"total_cputime\":1,\"total_time\":1,\"estimated_time_to_regain_access\":0}]}",
"x-fb-rev": "1049721894",
"x-fb-trace-id": "D2TedUmHhoR"
},
"http_status": 200,
"method": "GET",
"ok": true,
"path": "1360018983863273/insights",
"query_keys": [
"metric",
"period"
],
"response": {
"data": [
{
"description": "Daily: The number of times people have engaged with your posts through like, comments and shares and more.",
"id": "1360018983863273/insights/page_post_engagements/day",
"name": "page_post_engagements",
"period": "day",
"title": "Daily Post Engagements",
"values": [
{
"end_time": "2026-10-06T07:00:00+0000",
"value": 0
},
{
"end_time": "2026-10-07T07:00:00+0000",
"value": 0
}
]
}
],
"paging": {
"next": "https://graph.facebook.com/v26.0/1360018983863273/insights?metric=page_post_engagements&period=day&since=1791356400&until=1791529200",
"previous": "https://graph.facebook.com/v26.0/1360018983863273/insights?metric=page_post_engagements&period=day&since=1791010800&until=1791183600"
}
},
"step": "C3-insights-page_post_engagements"
}
@@ -0,0 +1,7 @@
{
"facebook-api-version": "v26.0",
"x-app-usage": "{\"call_count\":1,\"total_cputime\":0,\"total_time\":1}",
"x-business-use-case-usage": "{\"4713349378884589\":[{\"type\":\"business_integration_system_user_platform_endpoints\",\"call_count\":1,\"total_cputime\":1,\"total_time\":1,\"estimated_time_to_regain_access\":0}]}",
"x-fb-rev": "1049721894",
"x-fb-trace-id": "FrusM41Cili"
}
@@ -0,0 +1,23 @@
key FACEBOOK_API: [token length and prefix redacted by the session before committing]
GET debug_token -> HTTP 200
A debug_token: ok=True is_valid=True type=SYSTEM_USER app_id=2273465403490709 expires_at=0 data_access_expires_at=0
scopes=['read_insights', 'pages_show_list', 'business_management', 'pages_read_engagement', 'pages_read_user_content', 'pages_manage_posts', 'pages_manage_engagement', 'public_profile']
GET me -> HTTP 200
B /me: ok=True id=122094150717513084 name=felhom-cc
GET me/accounts -> HTTP 200
/me/accounts: 1 page(s): ['Felhom.eu']
page id=1360018983863273 tasks=['CREATE_CONTENT', 'MODERATE', 'MESSAGING', 'ADVERTISE', 'ANALYZE', 'MANAGE_LEADS', 'VIEW_MONETIZATION_INSIGHTS'] (page token held in memory, 204 chars)
GET debug_token -> HTTP 200
page token: ok=True type=PAGE is_valid=True expires_at=0 data_access_expires_at=0 scopes=['read_insights', 'pages_show_list', 'business_management', 'pages_read_engagement', 'pages_read_user_content', 'pages_manage_posts', 'pages_manage_engagement', 'public_profile']
GET 1360018983863273 -> HTTP 200
C page fields: ok=True {'id': '1360018983863273', 'name': 'Felhom.eu', 'link': 'https://www.facebook.com/1360018983863273', 'category': 'Information Technology Company', 'about': 'Saját felhőd, saját szabályaid. Otthoni szerver telepítés, üzemeltetés. Te irányítasz, mi segítünk.', 'website': 'https://felhom.eu/', 'followers_count': 0, 'fan_count': 0}
GET 1360018983863273/feed -> HTTP 200
feed: ok=True posts=3
GET 1360018983863273/insights -> HTTP 200
insights page_post_engagements: ok=True values=1
GET 1360018983863273/insights -> HTTP 200
insights page_follows: ok=True values=1
GET 1360018983863273/insights -> HTTP 200
insights page_media_view: ok=True values=1
read: done
F headers: {"facebook-api-version": "v26.0", "x-business-use-case-usage": "{\"4713349378884589\":[{\"type\":\"business_integration_system_user_platform_endpoints\",\"call_count\":1,\"total_cputime\":1,\"total_time\":1,\"estimated_time_to_regain_access\":0}]}", "x-fb-trace-id": "FrusM41Cili", "x-fb-rev": "1049721894", "x-app-usage": "{\"call_count\":1,\"total_cputime\":0,\"total_time\":1}"}
+4 -2
View File
@@ -263,7 +263,7 @@ stopping line that lies.
| **R-814** | Hub & operator | P4 | `PBS-storage-1` (u629193, box 611421) still `status=active`, 19.9 MB | **VERIFY** (2026-10-03 triage: a July watch row with no id; given R-814. WAITING-ON-OPERATOR — no record found that the box was deleted.) — WAITING-ON-OPERATOR | operator console | Delete the box | operator | | **R-814** | Hub & operator | P4 | `PBS-storage-1` (u629193, box 611421) still `status=active`, 19.9 MB | **VERIFY** (2026-10-03 triage: a July watch row with no id; given R-814. WAITING-ON-OPERATOR — no record found that the box was deleted.) — WAITING-ON-OPERATOR | operator console | Delete the box | operator |
| **R-844** | Hub & operator | P4 | **The household's OS-update line exists only on the hub's customer timeline.** 2026-10-04: the box itself has no event surface for agent results (the controller UI shows no timeline), so `os_update_applied` is a hub customer event (info: recorded, never mailed). Its stored text is the hub's English sentence; the hu/en bundle text (`mail.event.os_update_applied`) is used only if it is ever mailed. Fix direction: a controller-side line (the controller already polls the agent's local API) when the box gets a household timeline. `audits/os-guest-lane-2026-10-04/partG/hub-customer-timeline-demo-hp.txt` | **READY — owner: CC** **2026-10-05 (burn-down night): NEEDS A DESIGN** — a household timeline on the box does not exist yet. | — | — | CC | | **R-844** | Hub & operator | P4 | **The household's OS-update line exists only on the hub's customer timeline.** 2026-10-04: the box itself has no event surface for agent results (the controller UI shows no timeline), so `os_update_applied` is a hub customer event (info: recorded, never mailed). Its stored text is the hub's English sentence; the hu/en bundle text (`mail.event.os_update_applied`) is used only if it is ever mailed. Fix direction: a controller-side line (the controller already polls the agent's local API) when the box gets a household timeline. `audits/os-guest-lane-2026-10-04/partG/hub-customer-timeline-demo-hp.txt` | **READY — owner: CC** **2026-10-05 (burn-down night): NEEDS A DESIGN** — a household timeline on the box does not exist yet. | — | — | CC |
## Business & legal — 9 rows (P2 4, P4 5) ## Business & legal — 10 rows (P2 4, P4 6)
| ID | Category | Sev | What | State | Blocked on | Next action | Owner | | ID | Category | Sev | What | State | Blocked on | Next action | Owner |
|---|---|---|---|---|---|---|---| |---|---|---|---|---|---|---|---|
@@ -277,8 +277,9 @@ stopping line that lies.
| **R-914** | Business & legal | P4 | **Write the Felhom Facebook Page skill from the spike's findings.** Spike 2026-10-08 (`audits/SPIKE-facebook-page-api-2026-10-08.md`): key valid, never expires; the Page (`1360018983863273`) is reached with CREATE_CONTENT/MODERATE/ANALYZE; a scheduled text post and a scheduled photo were created, read back byte-equal and deleted (removal proven). Probe `scripts/facebook/fb_probe.py`. Gap to close in the skill: a scheduled photo's publish state was not read (no `post_id` returned). **2026-10-08 (Page pictures task) — two more for the skill:** (1) **the removal proof was not a proof**: the text post's after-DELETE answer was (#10) „does not exist, cannot be loaded due to missing permission…" — that message also means a permission gap. The skill proves removal by listing the Page's scheduled posts before and after the delete (present, then absent); the operator's Planner view on 2026-10-08 showed nothing on 15 October (a different channel, by eye). (2) **pictures by API** (READ, developers.facebook.com/docs/graph-api/reference/page/picture and …/reference/page/): `POST /{page}/picture` needs the `MANAGE` task, which the robot does not have (measured task list); the cover is `POST /{page}` `cover=<photo id>`, „only by the Page Admin or Page Editor with `EDIT_PROFILE`" + `business_management`. Neither names `pages_manage_metadata`. Today the pictures are uploaded by hand (`marketing/facebook/README.md`). | **READY — owner: CC** | — | Write the skill (drafts scheduled for operator review by default); read a scheduled photo back through the Page's scheduled-post listing | CC | | **R-914** | Business & legal | P4 | **Write the Felhom Facebook Page skill from the spike's findings.** Spike 2026-10-08 (`audits/SPIKE-facebook-page-api-2026-10-08.md`): key valid, never expires; the Page (`1360018983863273`) is reached with CREATE_CONTENT/MODERATE/ANALYZE; a scheduled text post and a scheduled photo were created, read back byte-equal and deleted (removal proven). Probe `scripts/facebook/fb_probe.py`. Gap to close in the skill: a scheduled photo's publish state was not read (no `post_id` returned). **2026-10-08 (Page pictures task) — two more for the skill:** (1) **the removal proof was not a proof**: the text post's after-DELETE answer was (#10) „does not exist, cannot be loaded due to missing permission…" — that message also means a permission gap. The skill proves removal by listing the Page's scheduled posts before and after the delete (present, then absent); the operator's Planner view on 2026-10-08 showed nothing on 15 October (a different channel, by eye). (2) **pictures by API** (READ, developers.facebook.com/docs/graph-api/reference/page/picture and …/reference/page/): `POST /{page}/picture` needs the `MANAGE` task, which the robot does not have (measured task list); the cover is `POST /{page}` `cover=<photo id>`, „only by the Page Admin or Page Editor with `EDIT_PROFILE`" + `business_management`. Neither names `pages_manage_metadata`. Today the pictures are uploaded by hand (`marketing/facebook/README.md`). | **READY — owner: CC** | — | Write the skill (drafts scheduled for operator review by default); read a scheduled photo back through the Page's scheduled-post listing | CC |
| **R-915** | Business & legal | P4 | **The Meta app `felhom.eu` is in development mode, so posts it makes are seen only by people with a role on the app.** READ 2026-10-08 (Meta docs, cited in the spike); not measured. MEASURED: development mode does not refuse posting (both test writes HTTP 200). Live needs display name, contact e-mail, a Terms of Service URL, an app icon, a category and the app purpose (privacy-policy and data-deletion URLs listed beside them). The robot's Page assignment, missing at first, was done by the operator the same day. | **WAITING-ON-OPERATOR** | R-813 (the Terms of Service URL) | Before real public posts: switch the app to Live in the Meta developer page. If nothing is done: posts stay invisible to the public. After Live: CC adds the Page link to the website footer (not before — a link to a Page nobody can read is worse than none) | operator | | **R-915** | Business & legal | P4 | **The Meta app `felhom.eu` is in development mode, so posts it makes are seen only by people with a role on the app.** READ 2026-10-08 (Meta docs, cited in the spike); not measured. MEASURED: development mode does not refuse posting (both test writes HTTP 200). Live needs display name, contact e-mail, a Terms of Service URL, an app icon, a category and the app purpose (privacy-policy and data-deletion URLs listed beside them). The robot's Page assignment, missing at first, was done by the operator the same day. | **WAITING-ON-OPERATOR** | R-813 (the Terms of Service URL) | Before real public posts: switch the app to Live in the Meta developer page. If nothing is done: posts stay invisible to the public. After Live: CC adds the Page link to the website footer (not before — a link to a Page nobody can read is worse than none) | operator |
| **R-916** | Business & legal | P4 | **The logo has no usable vector master: `website/assets/logo.svg` sets „felhom.eu" as live text in the fonts „M+ 2c" and „Vremena Grotesk", which DooPlex does not have, so every renderer here draws other letters.** SEEN 2026-10-08 (Facebook pictures task): librsvg drew the lettering in DejaVu; `fc-match` resolves the family to DejaVu Sans. The PNG (645 x 408) is the only faithful copy, which caps every picture made from it at about that size (`marketing/facebook/README.md`). | **WAITING-ON-OPERATOR** | the machine with the fonts | In Inkscape on that machine: select the lettering → Path → Object to Path → save as `website/assets/logo-master.svg`; then `marketing/facebook/build.py` can use it. If nothing is done: the PNG stays the master; larger prints will be soft | operator | | **R-916** | Business & legal | P4 | **The logo has no usable vector master: `website/assets/logo.svg` sets „felhom.eu" as live text in the fonts „M+ 2c" and „Vremena Grotesk", which DooPlex does not have, so every renderer here draws other letters.** SEEN 2026-10-08 (Facebook pictures task): librsvg drew the lettering in DejaVu; `fc-match` resolves the family to DejaVu Sans. The PNG (645 x 408) is the only faithful copy, which caps every picture made from it at about that size (`marketing/facebook/README.md`). | **WAITING-ON-OPERATOR** | the machine with the fonts | In Inkscape on that machine: select the lettering → Path → Object to Path → save as `website/assets/logo-master.svg`; then `marketing/facebook/build.py` can use it. If nothing is done: the PNG stays the master; larger prints will be soft | operator |
| **R-917** | Business & legal | P4 | **`COPY.md` §2, the Page's longer description (867 characters), has nowhere to go: Facebook's current Pages experience has no long-description field at all.** FOUND 2026-10-08 (Page setup task, `audits/facebook-page-setup-2026-10-08/`). Looked in four places, all on the live Page as its admin: the Page's „Névjegy" tab (Rövid áttekintés / Személyes adatok / Részletek — only a 255-character „Bemutatkozás" and the pinned category), Business Suite's „Oldal módosítása" dialog (profile picture, cover, Bemutatkozás, category, phone, e-mail, address, website, social links — and nothing else), Facebook settings → „Oldal adatai" (redirects to the same Névjegy tab) and settings → „Oldal beállítása" (name, access, type, history, status, recommendation, messaging, data sharing). MEASURED by Graph with the Page token: `description`, `general_info` and `bio` all read `null`. Writing `description` by API would need `pages_manage_metadata`; the robot key's scopes are `read_insights, pages_show_list, business_management, pages_read_engagement, pages_read_user_content, pages_manage_posts, pages_manage_engagement, public_profile`, and the task's fences forbid adding a permission. So §2 is written, reviewed and unplaceable. **Options for the operator:** (a) leave §2 unused and let the 99-character intro plus the website carry it; (b) shorten §2 to ≤ 255 characters and make it the „Bemutatkozás" instead of §1 — but §1 was written for exactly that slot, so this is really „rewrite one of the two"; (c) publish §2 as the Page's first pinned post once the app is Live (R-915), which is where a long text actually gets read; (d) ask Meta support whether the field still exists for this Page type. Recommended (c) — the text reads like a post already. | **WAITING-ON-OPERATOR** | the choice a/b/c/d; (c) also waits on R-915 | Pick a/b/c/d. If nothing is done: §2 stays in `COPY.md` unused and the Page carries only the 99-character intro | operator |
## Process & tooling — 23 rows (P3 3, P4 20) ## Process & tooling — 24 rows (P3 3, P4 21)
| ID | Category | Sev | What | State | Blocked on | Next action | Owner | | ID | Category | Sev | What | State | Blocked on | Next action | Owner |
|---|---|---|---|---|---|---|---| |---|---|---|---|---|---|---|---|
@@ -305,6 +306,7 @@ stopping line that lies.
| **R-903** | Process & tooling | P4 | **On a phone with JavaScript off, the website's menu does not open — so its links and the language globe cannot be reached there.** MEASURED 2026-10-08 (globe brief, headless Chrome at 376 px, JavaScript off): the three-line button is scripted (`#hamburger` toggles `.nav-links.is-open`), and below 900 px the nav list sits off-canvas until then. Older than the globe — the text switch had the same limit. The globe itself works with JavaScript off at desktop width (`audits/website-globe-2026-10-08/check.txt`). Fix direction: a CSS-only menu toggle (a `<details>` or a checkbox), a nav change on every page plus gate 3. | **OPEN — owner: CC** | — | Build the no-JS menu in a website task | CC | | **R-903** | Process & tooling | P4 | **On a phone with JavaScript off, the website's menu does not open — so its links and the language globe cannot be reached there.** MEASURED 2026-10-08 (globe brief, headless Chrome at 376 px, JavaScript off): the three-line button is scripted (`#hamburger` toggles `.nav-links.is-open`), and below 900 px the nav list sits off-canvas until then. Older than the globe — the text switch had the same limit. The globe itself works with JavaScript off at desktop width (`audits/website-globe-2026-10-08/check.txt`). Fix direction: a CSS-only menu toggle (a `<details>` or a checkbox), a nav change on every page plus gate 3. | **OPEN — owner: CC** | — | Build the no-JS menu in a website task | CC |
| **R-910** | Process & tooling | P4 | **The website's dashboard pictures show the old Apps card (the tags crowd the name, R-909) and no phone view (R-907).** Filed 2026-10-08. | **OPEN — owner: CC** — waits for tomorrow's controller release to reach demo-hp | Tomorrow's controller release on demo-hp | After the release reaches demo-hp 9201: retake the 8 `dashboard-*.webp` pictures the way `audits/website-dashboard-2026-10-08/` did (read only, language round trip), consider adding the phone view, run `site_gates.py`; then close R-907, R-909 | CC | | **R-910** | Process & tooling | P4 | **The website's dashboard pictures show the old Apps card (the tags crowd the name, R-909) and no phone view (R-907).** Filed 2026-10-08. | **OPEN — owner: CC** — waits for tomorrow's controller release to reach demo-hp | Tomorrow's controller release on demo-hp | After the release reaches demo-hp 9201: retake the 8 `dashboard-*.webp` pictures the way `audits/website-dashboard-2026-10-08/` did (read only, language round trip), consider adding the phone view, run `site_gates.py`; then close R-907, R-909 | CC |
| **R-912** | Process & tooling | P4 | **No gate checks that every catalog app has a logo file under its slug.** SEEN 2026-10-08: five apps (Crafty Controller, Gramps Web, Home Assistant, Plant-it, Uptime Kuma) had their logos and pictures under other names, so the dashboard showed the grey placeholder and no pictures; Docmost and Recipe Importer were added to the website today and are not in the hub's copy yet. Renamed the same day (website `CHANGELOG` 2026-10-08 evening). | **OPEN — owner: CC** | — | A gate (catalog or website): for every `templates/<app>/.felhom.yml` slug, `website/assets/<slug>-logo.svg` or `.png` exists, and no logo is coloured; with a decoy | CC | | **R-912** | Process & tooling | P4 | **No gate checks that every catalog app has a logo file under its slug.** SEEN 2026-10-08: five apps (Crafty Controller, Gramps Web, Home Assistant, Plant-it, Uptime Kuma) had their logos and pictures under other names, so the dashboard showed the grey placeholder and no pictures; Docmost and Recipe Importer were added to the website today and are not in the hub's copy yet. Renamed the same day (website `CHANGELOG` 2026-10-08 evening). | **OPEN — owner: CC** | — | A gate (catalog or website): for every `templates/<app>/.felhom.yml` slug, `website/assets/<slug>-logo.svg` or `.png` exists, and no logo is coloured; with a decoy | CC |
| **R-918** | Process & tooling | P4 | **The Facebook Page's phone rendering cannot be checked from Claude in Chrome: narrowing the desktop browser never produces Facebook's phone layout.** SEEN 2026-10-08 (Page setup task, Phase C). `resize_window` reported success while the window was maximised and `window.innerWidth` never moved (2133); after the operator un-maximised it, only the first call after each window-state change took effect. With the window at about 500 px, **`www.facebook.com` kept the desktop layout and grew a horizontal scrollbar** — `innerWidth` pinned at 1105, `scrollWidth` 2051 (`audits/facebook-page-setup-2026-10-08/C3-narrow-window-horizontal-scroll.jpg`) — and `m.facebook.com/felhom.eu` redirected to `www.facebook.com/felhom.eu?_rdr`. So the desktop site has a minimum width and the phone view needs a mobile user agent, which these tools do not set. The computer-width half of Phase C WAS measured and passed (cover whole, no crop, profile circle 16 px clear of it). Meta states a 2,4:1 mobile crop and a ~40 px profile overlap; our 1640 x 624 cover would lose about 71 px a side, and the safe area is 306 px clear — **arithmetic, not a measurement**. | **OPEN — owner: CC** | — | Check the Page on a phone, or in Chrome DevTools' device toolbar (Ctrl+Shift+M) at 390 x 844, and record it beside the computer screenshot; if the headline or „felhom.eu" is cut, that is a finding for `marketing/facebook/build.py`'s safe area, not a re-crop on Facebook. Same gap applies to any future Page picture change | CC |
<!-- DUE-CHECKS-BEGIN — machine-readable. Parsed by scripts/due_checks_gate.py. <!-- DUE-CHECKS-BEGIN — machine-readable. Parsed by scripts/due_checks_gate.py.
One row per dated check. The R-number must have a row above. Dates are UTC. One row per dated check. The R-number must have a row above. Dates are UTC.
+29
View File
@@ -1,5 +1,34 @@
# marketing — CHANGELOG # marketing — CHANGELOG
## 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: 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. The **phone** check was
**not** performed: narrowing a desktop browser never gives Facebook's phone layout (**R-918**).
- **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) ## 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 - `marketing/facebook/build.py` (Pillow only) makes `out/profile-dark.png` + `out/profile-white.png` (932 x 932, the
+25 -8
View File
@@ -21,21 +21,38 @@ Needs Python 3 + Pillow only. Brand source: `website/assets/logo.png` (the logo
| `out/profile-dark.png` (recommended) or `out/profile-white.png` | Profile picture | | `out/profile-dark.png` (recommended) or `out/profile-white.png` | Profile picture |
| `out/cover-a.png` / `cover-b.png` / `cover-c.png` — pick one | Cover photo | | `out/cover-a.png` / `cover-b.png` / `cover-c.png` — pick one | Cover photo |
| `COPY.md` §1 | Intro / Bemutatkozás (≤ 100 characters) | | `COPY.md` §1 | Intro / Bemutatkozás (≤ 100 characters) |
| `COPY.md` §2 | About → details (longer description) | | `COPY.md` §2 | **Nowhere today — the field is gone** (R-917). Facebook's current Pages experience has no long-description field: not in the Page's „Névjegy" tab, not in Business Suite's „Oldal módosítása", not in Page settings; the Graph `description` reads `null` and writing it needs `pages_manage_metadata`, which the robot key does not have. Checked 2026-10-08. |
| `COPY.md` §3 | Messenger welcome message | | `COPY.md` §3 | Messenger welcome message |
| `COPY.md` §4 | The first three posts, each with its picture | | `COPY.md` §4 | The first three posts, each with its picture |
Open `out/preview.html` (download it from Gitea, open locally — it is self-contained) to see each picture the way Open `out/preview.html` (download it from Gitea, open locally — it is self-contained) to see each picture the way
Facebook shows it. Facebook shows it.
## Sizes used (READ, second-hand) ## Sizes used (READ, Meta's help page — and it does NOT confirm most of ours)
Meta's own help page (facebook.com/help/125379114252045) needs a browser and could not be read from DooPlex. Meta's own help page (facebook.com/help/125379114252045) was read first-hand on 2026-10-08 from the Windows
Figures from size guides that quote it: cover shown **820 x 312** on computers and **640 x 360** on phones workstation, quoted verbatim in `documentation/audits/facebook-page-setup-2026-10-08/A-meta-sizes.md`. **It does
(built at 2 x: 1640 x 624); profile picture shown about 176 px; profile circle over the cover at 16 px / 176 px not carry most of the figures this section used to assert.** What it does say: cover **16:9 on a computer** and
(computer) and 24 px / 196 px (phone). Sources: postfa.st/sizes/facebook/cover, **2,4:1 on a phone**, minimum **400 x 150** either way, fastest-loading file sRGB JPG **851 x 315** under 100 kB;
linearity.io/templates/facebook-size-guide, fasturtle.com (faq-items/what-size-photos-do-i-use-on-facebook). profile picture shown **176 x 176** on a computer, **196 x 196** on a smartphone, **36 x 36** on a feature phone,
Page `about` = 100 characters: developers.facebook.com/docs/graph-api/reference/page/ (Meta, first-hand). best source **320 x 320**, cropped to a circle; the profile circle overlaps the cover by **about 40 px on mobile**;
and **PNG beats JPG** when the picture carries a logo or text. Meta's page contradicts itself — it gives two
ratios and then recommends one 2,70:1 file for both — so the figures below are kept as *ours*, not as Meta's.
The second-hand figures this section used to carry (cover shown **820 x 312** on computers, **640 x 360** on
phones, profile circle over the cover at 16 px / 176 px and 24 px / 196 px; sources postfa.st, linearity.io,
fasturtle.com) appear **nowhere on Meta's page**; only the 176 px profile size matched. The mobile overlap we
assumed, 24 px, is smaller than the ~40 px Meta states.
What we build is unchanged and still safe: the cover at 2 x, **1640 x 624**, well above both stated minimums, as
PNG; the profile picture 932 x 932, larger than Meta's 320 x 320 recommendation and therefore downscaled, not
enlarged. **MEASURED on the live Page 2026-10-08** at a 1435 px viewport: the cover renders whole — no crop, no
distortion — and the profile circle sits 16 px below the cover, so it covers no cover text. The phone rendering
was **not** measured (R-918); the same audit explains why a narrowed desktop browser cannot show it.
Page `about` = 100 characters: developers.facebook.com/docs/graph-api/reference/page/ (Meta, first-hand). The
Page's own „Bemutatkozás" editor counts to **255** (seen on screen 2026-10-08); §1 is 99 characters, so neither
limit bites.
## The logo master ## The logo master