TODOยถ
The container serves no HTML page:
files/Dockerfile:59startsflask_app:app, while upstreamโsProcfilestartsapp:app, and only upstreamโsapp.pyimports the modules that register the page routes (front page, documentation, sign-in chooser, user pages)./therefore answers with Werkzeugโs 404 without<head>or<body>, asfiles/playwright/playwright.spec.js:17and the twomatomo-trackexemptions inmeta/services.ymlalready state, and neither the corporate design nor any other injection has a document to attach to (read from the role and from upstream at commite7c6f80e35330c249e35205ce9e181ebc24531e2, not measured on a stack). Options: startapp:apptogether with the datastore emulator the README mentions andtemplates/compose.yml.j2does not declare; or declare the role as API-only and take it out of the web interface scope.templates/env.j2:7-10rendersBRIDGY_APPVIEW_HOST,BRIDGY_PLC_HOST,BRIDGY_BGS_HOSTandBRIDGY_PDS_HOST, while upstream readsAPPVIEW_HOST,PLC_HOST,BGS_HOSTandPDS_HOST(config.py:116-118,hub.py:201-203), so the rendered values reach no code path (read from both sources, not measured). Options: render the names upstream reads; or drop the four lines.Upstreamโs
config.py:39-47takes itsSECRET_KEYfrom a debug branch wheneverappengine_info.DEBUGis set, and that value is a constant published in the upstream repository (read; how the flag is derived outside Googleโs runtimes and what the container resolves it to was not measured). Today no served route uses a session. Onceapp:appserves pages, sessions and the administration endpoints would be signed with a public key. Options: make the container leave the debug branch and provide a generated key the way the other branch reads it, before the entry point changes.Upstreamโs sign-in chooser opens its provider fields through inline event handlers, and
meta/csp.ymlgrants no flag for them (read from upstreamโs templates and the role file, not measured). This only matters once the pages are served. Options: grantscript-src-attrwhat the handlers need, with the reason next to it; or keep the chooser out of scope.