Files
geointel/docs/HARDENING_2026-08-26.md
T
Jens 67b6b6285e
GeoIntel release gates / Compile, test, contracts and builds (push) Failing after 55s
GeoIntel release gates / Python and npm vulnerability policy (push) Failing after 41s
GeoIntel release gates / GIS image, SBOM and container scan (push) Failing after 1m52s
GeoIntel release gates / AI image, SBOM and container scan (push) Skipped
docs: record frozen residual scratch accurately
2026-08-26 22:44:16 +02:00

85 lines
3.7 KiB
Markdown

# GeoIntel hardening — 2026-08-26
This change set converts the 2026-08-26 repository audit into executable
guardrails without widening any data-source or AI accuracy claim.
## Implemented controls
### Secure defaults
- Guest access is opt-in instead of enabled by default.
- Configured YOLO validation-scope enforcement is opt-out only in
non-production research/development contexts.
- Production YOLO uses CUDA. Configured inference remains bound to the existing
immutable validation-scope service; absent or invalid scope evidence keeps
YOLO unavailable without taking the GIS runtime offline.
### Repository hygiene
- New `.codex-input/` and `.codex-artifacts/` content is forbidden.
- Transient SQLite WAL/SHM files are forbidden.
- A tracked-file size budget prevents large local scratch artifacts from
silently returning; governed accuracy evidence and presentation assets have
explicit narrow allowlists.
- All SQLite/WAL state, local calibration/error-review scratch, large contact
sheets and DockDeck archives were removed from the current repository tree.
- The remaining 32 DockDeck Stitch blobs could not be mass-deleted after the
platform safety layer stopped further destructive operations. They are
therefore frozen by exact path and exact Git blob SHA: they may be deleted,
but any modification, replacement or new `.codex-input` file fails the
release gate.
Historical Git objects are intentionally not rewritten by this change. Purging
old blobs requires a coordinated destructive history rewrite and force-update
of every clone, so it is a separate operator decision.
### Engineering quality
- Repository architecture budgets turn the largest legacy modules into a
ratchet: they may shrink but may not grow.
- Critical Python static checks and frontend source-policy linting are release
gates alongside the existing full tests, typecheck and build.
- The source-policy gate forbids debugger statements, `@ts-ignore`, `eval()` and
dynamic `Function` construction without adding an unlocked npm dependency.
A migration to ESLint 10 remains a dependency upgrade rather than being mixed
into this hardening pass. ESLint 9 reached upstream end-of-life in August 2026.
### Supply chain
- External Actions are pinned to full commit SHAs.
- External Docker base/runtime images are digest-pinned.
- CI verifies those policies so mutable references cannot silently return.
- Both GIS and AI release images are built, SBOMed and scanned under the same
vulnerability policy.
- The Unraid Torch index default is aligned with the retained CUDA 12.8 runtime
evidence instead of silently selecting a different CUDA wheel channel.
### Deployment gating
Tower autoredeploy is downstream of the successful `GeoIntel release gates`
workflow on `main` and deploys the workflow's exact validated head SHA. A direct
push can therefore no longer bypass release validation and immediately roll to
production.
## Explicit non-claims
This hardening does **not**:
- make the active building detector nationally validated;
- replace the required geographically independent protected test and human
review evidence;
- convert guest mode into tenant isolation;
- convert the PostgreSQL/in-process worker model into a distributed queue;
- purge historical Git objects;
- alter official source semantics or CRS contracts;
- claim the 32 safety-frozen legacy Stitch blobs have already been removed.
## External repository control
Gitea branch protection for `main` is still required. The connected workspace
can audit protection, create isolated branches, validate pull requests and merge
them safely, but it does not expose a write operation for branch-protection
rules. Until an administrator enables protection, the downstream validated
deploy gate remains the compensating production control.