mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-05 02:44:02 +00:00
release: v0.1.0 — one-click install, keyless boot, in-app Provider Settings (#142)
The first formal release. - One-click install via Pinokio; keyless boot lands on a live Esri World Imagery satellite globe with keyless terrain, with automatic OSM fallback and graceful degradation when terrain is unavailable. - Provider Settings (the POWER UP panel): add, replace, or remove API keys inside the app; credential files made owner-only before any secret is written; external keys shown read-only; the panel refuses shared or proxied servers. - Keyless capability responses for the optional HUD summary and place search. - Aircraft-identity voice answers cover operator, type, and route, and say so plainly when enrichment is unavailable. - README rewritten keyless-first; concise 0.1.0 changelog section; CI workflow included. Gates: 2,672 unit tests pass / 0 fail, build clean, tracking regression 108/108, map-source tray QA pass, setup doctor ready.
This commit is contained in:
1 parent
6d83bb6008
commit
b6da93b8ac
170 files changed
+5800
-853
No files matched your search
+31
-13
@@ -407,7 +407,29 @@ async function runArbitrationSection(page, { shots, consoleErrors }) {
|
||||
// own. Cockpit's own exit() strips this class, so it is re-asserted right up
|
||||
// to the check rather than set once and hoped for.
|
||||
await page.evaluate(() => { localStorage.clear(); sessionStorage.clear(); });
|
||||
await page.goto(`${APP_URL}/?welcome=1`, { waitUntil: 'domcontentloaded' });
|
||||
// Install the synthetic blocker before any application module can run. A
|
||||
// warm Vite cache can otherwise finish first-run initialization between
|
||||
// DOMContentLoaded and the first page.evaluate(), turning this into the
|
||||
// already-covered "surface engages after reveal" case and burning the
|
||||
// session flag exactly as that path is designed to do.
|
||||
const earlyCockpitBlocker = await page.evaluateOnNewDocument(() => {
|
||||
const blockAsSoonAsBodyExists = () => {
|
||||
if (!document.body) return false;
|
||||
document.body.classList.add('cockpit-mode');
|
||||
return true;
|
||||
};
|
||||
if (blockAsSoonAsBodyExists()) return;
|
||||
const observer = new MutationObserver(() => {
|
||||
if (!blockAsSoonAsBodyExists()) return;
|
||||
observer.disconnect();
|
||||
});
|
||||
observer.observe(document, { childList: true, subtree: true });
|
||||
});
|
||||
try {
|
||||
await page.goto(`${APP_URL}/?welcome=1`, { waitUntil: 'domcontentloaded' });
|
||||
} finally {
|
||||
await page.removeScriptToEvaluateOnNewDocument(earlyCockpitBlocker.identifier);
|
||||
}
|
||||
await page.waitForFunction(() => !!document.body, { timeout: 45000 }).catch(() => {});
|
||||
const holdCockpit = async (ms) => {
|
||||
const until = Date.now() + ms;
|
||||
@@ -609,9 +631,14 @@ async function main() {
|
||||
*
|
||||
* KEYED — both datasets must actually arrive, and a failure banner in
|
||||
* that state is a real defect, so the chip IS asserted.
|
||||
* KEYLESS — the LAYER ROW reports KEY REQUIRED while the global batch
|
||||
* completes without presenting that deliberate configuration
|
||||
* state as a failed mission.
|
||||
* KEYLESS — only the LAYER ROW is asserted: FIRMS reports KEY REQUIRED,
|
||||
* which is the honest surface a keyless visitor is judged on.
|
||||
* The GLOBAL chip is deliberately NOT asserted in either
|
||||
* direction here: it has no key-required terminal state and
|
||||
* folds that row into a misleading LOAD FAILED. That
|
||||
* aggregation is a defect in the shared state machine
|
||||
* (`src/loadingFeedback.js`), LEDGERED post-launch — it is not
|
||||
* a desirable outcome and not this tile's contract.
|
||||
*/
|
||||
const keyless = state.firmsError === 'KEY REQUIRED';
|
||||
console.log(` \x1b[2m FIRMS key state: ${keyless ? 'KEYLESS' : 'KEYED'} `
|
||||
@@ -627,15 +654,6 @@ async function main() {
|
||||
(state.counts.earthquakes ?? 0) > 0,
|
||||
`${state.counts.earthquakes} quakes`,
|
||||
);
|
||||
const chip = await readLoadingChip(page);
|
||||
const failed = chip.filter((entry) => /LOAD FAILED/i.test(entry));
|
||||
record(
|
||||
'KEYLESS: a missing optional FIRMS key never becomes a global load failure',
|
||||
failed.length === 0,
|
||||
failed.length
|
||||
? `chip showed: ${failed.join(' | ')}`
|
||||
: `chip states seen: ${chip.join(' → ') || 'none'}`,
|
||||
);
|
||||
} else {
|
||||
record(
|
||||
'KEYED: both datasets actually arrive',
|
||||
|
||||
Reference in new issue
Block a user