From 67de46dfb95d73ab6698240acc5515163f2c524e Mon Sep 17 00:00:00 2001 From: cproudlock Date: Mon, 27 Jul 2026 14:54:13 -0400 Subject: [PATCH] geenforce: import-share recognizes the display scope folder discover_share only matched 'common' and 'gea-shopfloor-*', so a display/ manifest.json on the share was silently skipped and 'flask geenforce publish display' failed with 'No scope display/runtime'. The display scope is a first-class HTTPS-pull target (kiosks fetch pctype=display), so accept it. --- plugins/geenforce/importer.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/plugins/geenforce/importer.py b/plugins/geenforce/importer.py index 67588d6..3e50004 100644 --- a/plugins/geenforce/importer.py +++ b/plugins/geenforce/importer.py @@ -102,11 +102,13 @@ def build_scope(scopename, phase, manifest_dict, iscommon=False): def discover_share(shareroot): """Yield (scopename, phase, manifest_dict) for runtime manifests on a share. - Reads `common/manifest.json` and every `gea-shopfloor-*/manifest.json`. - Skips `.bak` / `.pre-*.bak` variants (only the exact `manifest.json`). + Reads `common/manifest.json`, `display/manifest.json`, and every + `gea-shopfloor-*/manifest.json`. Skips `.bak` / `.pre-*.bak` variants + (only the exact `manifest.json`). """ for name in sorted(os.listdir(shareroot)): - if name != 'common' and not name.startswith('gea-shopfloor-'): + if name not in ('common', 'display') \ + and not name.startswith('gea-shopfloor-'): continue path = os.path.join(shareroot, name, 'manifest.json') if not os.path.isfile(path):