masterplan-lock / check (pull_request) Successful in 4s
masterplan-lock / check (push) Successful in 9s
CI (SIAX Cloud) / security (push) Successful in 15s
CI (SIAX Cloud) / security (pull_request) Successful in 17s
Security Scan (SIAX Cloud) / security (push) Successful in 18s
CI (SIAX Cloud) / integration (push) Successful in 26s
CI (SIAX Cloud) / quality (push) Successful in 35s
CI (SIAX Cloud) / quality (pull_request) Successful in 34s
Security Scan (SIAX Cloud) / security (pull_request) Successful in 40s
CI (SIAX Cloud) / integration (pull_request) Successful in 48s
52 lines
3.2 KiB
JSON
52 lines
3.2 KiB
JSON
{
|
|
"$comment": [
|
|
"GOV-06 substantiation record for siax.repo.json's `operationalState`.",
|
|
"",
|
|
"WHY THIS FILE EXISTS: `operationalState` is a claim about the world, and",
|
|
"scripts/siax-doctor.mjs cannot check the world from CI (no network, and a",
|
|
"check that needs the internet is a check that goes red for the wrong",
|
|
"reason). What the doctor CAN do offline is refuse to accept the claim",
|
|
"unless it is backed by a dated, machine-readable probe result that agrees",
|
|
"with it. That is this file. Setting operationalState to \"running\" while",
|
|
"the probes below say 402/404 now fails `pnpm siax:doctor`.",
|
|
"",
|
|
"HOW TO REFRESH: `node scripts/siax-doctor.mjs --live --write-evidence`",
|
|
"(opt-in, needs network). Or edit by hand from a real probe -- but the",
|
|
"doctor cross-checks `ok` against `httpStatus`, so a hand-written",
|
|
"`ok: true` next to a 402 is itself a failure."
|
|
],
|
|
"control": "GOV-06",
|
|
"operationalState": "down",
|
|
"checkedAt": "2026-09-15T01:13:00Z",
|
|
"method": "curl -sS -o /dev/null -D - --max-time 20 <url>, from the public internet (not the tailnet)",
|
|
"probes": [
|
|
{
|
|
"fqdn": "0pt.app",
|
|
"env": "prod",
|
|
"url": "https://0pt.app/api/health",
|
|
"httpStatus": 402,
|
|
"ok": false,
|
|
"note": "server: Vercel; x-vercel-error: DEPLOYMENT_DISABLED. DNS pekar fortfarande pa Vercel (216.150.1.1/216.150.1.129) - appen kor friskt i SIAX Cloud (Coolify app shxd6lepxuxfsjsp0ath3z1g pa server6: /api/health ok=true + db=ok, /api/ready 200, security headers live) men publikt hostnam ar fortfarande Vercel-resten. DNS-cutover 0pt.app -> 65.109.19.146 ar SIMON-PUNKT (stoppunkt enligt AGENTS.md)."
|
|
},
|
|
{
|
|
"fqdn": "api.0pt.app",
|
|
"env": "prod",
|
|
"url": "https://api.0pt.app/api/health",
|
|
"httpStatus": 404,
|
|
"ok": false,
|
|
"note": "server: Vercel; x-vercel-error: DEPLOYMENT_NOT_FOUND. Contract-first target host (contracts/openapi.yaml servers), aldrig deployad. Samma 404 pa / och /api/health."
|
|
}
|
|
],
|
|
"securityHeadersObserved": {
|
|
"$comment": "Observed on the 402/404 responses above, i.e. served by Vercel's edge, NOT by this app. Sedan 2026-09-15 satter APPEN sjalv fulla security headers (next.config.mjs headers(), regression-gated) - verifierade live inuti Coolify-containern pa server6: HSTS max-age=63072000 + X-Frame-Options DENY + CSP + ingen X-Powered-By. Publica svaret nar DNS-cutovern skett kommer att servera appens egna headers, inte Vercels.",
|
|
"strict-transport-security": "max-age=63072000",
|
|
"content-security-policy": null,
|
|
"x-frame-options": null,
|
|
"x-content-type-options": null,
|
|
"referrer-policy": null,
|
|
"permissions-policy": null
|
|
},
|
|
"runtimeEvidence": {
|
|
"$comment": "Runtime-state 2026-09-15 (inuti SIAX Cloud, ej publikt routat): Coolify-app 54 shxd6lepxuxfsjsp0ath3z1g pa server6; container healthy; /api/health {ok:true, db:ok}; /api/ready HTTP 200 {ready:true}; security headers (HSTS/XFO/CSP) observerade; egen Postgres (0pt-edge-postgres, uuid xh70k0qa0cyju840zsvsgoze, migrations 001-013 = 60 tabeller, icke-superuser-roll 0pt_app NOBYPASSRLS); backup-cron 03:15 motor + 03:05 edge-DB; 0pt.app-DNS-cutover kvar hos Simon."
|
|
}
|
|
} |