Files
felhom.eu/documentation/audits/facebook-page-details-2026-10-09
admin de52bcbdc8
gates / gates (push) Successful in 5m47s
facebook: the Meta app is LIVE (R-915 closed); website lockup entry
R-915 closed and moved to CLOSED-ITEMS in the same commit. What it had waited
on was R-813's Terms of Service URL, which did not exist until the closed-test
legal set went live this morning.

Filled in the app's Basic settings and verified they persisted across a full
reload (not from the save toast):
  Privacy policy URL              https://felhom.eu/adatkezeles
  Terms of Service URL            https://felhom.eu/feltetelek
  Data deletion instructions URL  https://felhom.eu/adatkezeles
  Category                        "Vallalkozasok es oldalak"

THE APP ICON WAS NOT REQUIRED. The original row listed it among the Live
blockers; Meta answered "All required app settings are complete" with it still
empty. Recorded so the next session does not go hunting for one -- and it
could not be uploaded from here anyway: the icon control creates its file
input only on click, and clicking opens a native dialog the browser tooling
cannot drive.

Published, and READ BACK FROM A FULL PAGE RELOAD rather than the success
toast, because Meta's toasts have lied on this Page before: the badge reads
Published, the string Unpublished is gone, and the page now offers Unpublish.

Nothing was granted. No permission added, no use case changed; the scopes stay
"Ready for testing", which is all a system user needs for the business's own
Page. Going Live changes WHO CAN SEE what the app posts, not what it may do.

R-917 and R-920 are unblocked by this -- both were waiting on posting starting.
R-813's next action (a) is spent.

Also carries the marketing CHANGELOG entry for the header/footer change pushed
in 625d38645c.

CI for the three commits before this one: #875 SUCCESS (after a re-run -- the
first attempt was R-887's lost-job flake, "Set up job" 11m48s then every step
0s), #876 SUCCESS, #877 SUCCESS.
2026-10-09 14:06:35 +02:00
..

Facebook Page details — contact, place, categories, hours, Messenger FAQ, link preview (2026-10-09)

Operator's Windows workstation, his own Chrome (Claude in Chrome), plus a read-only Graph probe and a cookie-free fetch, both run from DooPlex. Page 1360018983863273, facebook.com/felhom.eu. Baseline 9a55f0bbc7. Full narrative: REPORT-facebook-page-details.md at the repo root.

The three channels, and what each can actually prove

Meta's toasts are not proof (2026-10-08: „A módosítás nincs mentve" came with a partial save), so every edit is read back from a channel other than the one that made it.

channel where it runs proves
Business Suite / Page UI operator's Chrome, signed in makes the edits; shows the admin-side state
Graph probe (fb_probe.py read) DooPlex, system-user token emails, phone, category_list, location, single_line_address; hours is never returned
cookie-free HTML DooPlex, curl, no session the logged-out server response — but see the limit below

The cookie-free channel's limit, recorded because I first misread it. A bare user agent gets HTTP 400; the header set that earns a 200 is in the report. The markers I first took for a positive control are not rendered page text — Budapest matched an og:url meta and Information Technology sits inside an embedded JSON blob (delegate_page.category_name). The visible details box is rendered by JavaScript and is absent from this HTML altogether, so the absence of „Zárva"/„Nyitva" here proves nothing about the hours label. That is written out in logged-out/logged-out-before.txt rather than quietly dropped.

So the hours read-back is the rendered page, measured with controls — see below.

The probe change

scripts/facebook/fb_probe.py now also asks for emails, phone, category_list, location, single_line_address, hours, one field per Graph call. One per call on purpose: Graph fails a whole fields= list when any single member is unreadable, so a batch would let one refused field hide the other five (the same reason INSIGHT_METRICS is already called one at a time). A refusal is recorded with Meta's error verbatim and never retried — a retry would turn „Meta refuses this field" into „the field is empty", a different fact. null and „not returned" are logged apart.

What each edit did

# outcome read-back
B1 contact already correct before this run — the operator had set both Graph emails=["info@felhom.eu"], phone="+36702378499"; Page UI „Elérhetőségek" shows the same
B2 place already as chosen (city only, no street). Service area refused Graph location={city: Budapest, country: Hungary}
B3 categories done — added two Graph category_list = IT Company, Internet Company, Software Company
B4 hours cannot be set, and does not need to be rendered page: zero hours labels, controls pass
B5 Messenger FAQ refused — the feature does not exist here template catalogue holds exactly three

B4 — the hours measurement, with its controls

Facebook greys the hours row out and says: „A nyitvatartási idő megadása előtt add meg előbb a vállalkozásod címét." Hours need a street address; the fence forbids entering one. There is therefore no „no hours" option to pick — and none is needed, because with no hours set Facebook shows no hours label at all. Measured on the rendered Page rather than assumed:

POSITIVE CONTROLS  Budapest 1 · Informatikai vállalat 1 · felhom.eu 1   <- the details box IS being read
HOURS LABELS       Zárva 0 · Nyitva 0 · Nyitvatartás 0 · nyitvatart 0

The controls are the point: an absent string is only evidence when something that must be present is present in the same read. B4-hours-needs-address.jpg shows the disabled row.

B5 — why „Gyakori kérdések" is a refusal and not a miss

Searched for, not assumed absent:

  • The create-automation catalogue („Az összes automatizálás") holds exactly three templates: Automatikus válasz, Távolléti üzenet, A megválaszolatlan üzenetek azonosítása (B5-no-faq-template-all-three.jpg).
  • Template search for „kérdés" → „Nincs a keresésnek megfelelő automatizálási sablon." Positive control: „üzenet" → two templates. So the search works and the term genuinely misses.
  • The existing instant-reply automation has only channel, message and media — no FAQ, no quick replies.
  • Business-portfolio settings carry no messaging/FAQ entry.

The four questions and answers are written and committed as marketing/facebook/COPY.md §5, ready to paste the day the feature appears. Same shape as R-917: copy with nowhere to go.

Verified anyway. The task wanted a hex compare between the pasted text and §5; with nothing pasted, the checkable half was checked — all four questions are byte-identical to gyik.html (hex equal, lengths 45/27/29/24), and each answer holds to its rule: at most three sentences (2/3/3/3) and ending in the gyik.html link. The numbers are in the report.

B3 — the categories, and why these two

Facebook's Hungarian list has no IT-support, IT-consulting or cloud category. Eleven terms were searched: informatikai, informatikai szolgáltatás, szoftver, internet, számítógép, felhő, adat, adattárol, technológ, szolgáltatás, tanácsad. The only true IT-support match is Számítógépszerviz, which the fence rules out (a repair counter). Chosen: Internetes cég and Szoftvercég — the latter is accurate, Felhom writes the hub, the agent and the controller. „Informatikai vállalat" stays first, which is the one Facebook shows; the other two are for search only and correctly do not appear on the Page.

Both pages scraped again once. Preview correct on both, the only warning the expected missing fb:app_id (deliberately not added). Response Code 206, not 200, on both — noted in the report; a plain curl from DooPlex gets 200, so it is Facebook's scraper, and the preview is complete.

Secret scan

FACEBOOK_API is read on DooPlex by read_credential.py and never printed, never copied to Windows. The probe strips access_token from the recorded response before writing it (verified: the me/accounts evidence carries id, name, tasks and no token). The probe's stdout does print key FACEBOOK_API: 201 chars, starts EAA — so no run.log is committed from this run; that line was what had to be redacted in the 2026-10-08 evidence.

Planted decoy, grepped, deleted, grepped again — --exclude=README.md because this file quotes the search strings:

plant EAAfakeprobe        -> grep -r EAA --exclude=README.md  = 1
delete                    -> grep -r EAA --exclude=README.md  = 0

Counts are in the report.

Files

  • probe-before/, probe-after/ — 16 Graph call records each, one JSON per call.
  • logged-out/ — the cookie-free before and after extracts, each carrying its own limits.
  • A1 page before · A2 contact already set · B3 categories after · B4 hours disabled · B5 the three templates · C1/C2 sharing debugger HU/EN · D1 page after, computer width.

Teardown

Nothing posted, no story, no reel, no comment, no message sent, no invite. No money, no Boost, no Ads Manager, no Meta Verified. No change to the Meta app (still development mode), the business portfolio, Page roles, tokens or permissions. No pixel, no Conversions API, no Facebook script on the website. The website itself is unchanged. The DooPlex worktree used for the probe was removed.