Research Labs

2026-09-17 19:46 UTCopen field data · live

Code

The Research Labs platform as it runs, shown for scrutiny: every file that reads an instrument, computes a stream, aggregates, checks provenance or renders a page, with a checksum per file. A reader of any published number can open the code that produced it.

Version stamp

2026.09.17-a2894de
current snapshot · written 2026-09-17 18:03:14 UTC · 50 files · commit: not from git
tree SHA-256 a2894de5492ffc83982e18a22eb6aae1038ddbf0b348af1d802ce00ae6bbe1bb
manifest SHA-256 94a349346e510fcd873ddf9b4fb65c69b42239205a2f854c4786df0e23df5429 · code-manifest.json (also printed on the Raw Vault)
redaction: ran, 0 e-mail addresses redacted, secret scan passed
How this platform is built

Stack. PHP 8 and MySQL 8 behind Apache, written for this platform without a framework. Charts are dependency-free SVG drawn by assets/app.js. No third-party library is part of the tree; the one outside service is the Anthropic API, called from inc/ai.php for the Ask Grímnir page with a key held in the excluded configuration file.

From instrument to published table. cron/poll_all.php runs on a schedule and calls one client per instrument family under cron/clients/ (weather station, water-quality sonde, aquifer logger, sky quality meter, footfall counters, acoustic recorders). Each pull is stored as a raw file, checksummed and listed in files_raw (the Raw Vault), then parsed into readings rows: stream, timestamp, value, and a placeholder flag. Every stream starts in placeholder mode and flips to live with its first real reading; cron/health_check.php watches freshness and completeness. Pages under pages/ render the readings through inc/streampage.php and inc/helpers.php (series, latest, mode badges); api.php serves the same readings to keyed clients. schema.sql defines the tables.

Excluded, and why. config.php and its template (credentials); data/ (raw files, uploads, media); logs; admin/ (the write path, no part of how a published number is produced); diagnose.php (server layout); the snapshots themselves. Paths are shown relative to the application root. E-mail addresses other than the company's are redacted at snapshot time, and a scan for secret-like strings refuses to publish a snapshot that contains one; the allowlist and the snapshot script are in the tree (inc/code-allowlist.php, inc/code-snapshot.php).

Versions. A snapshot is written at each deploy. The version is the UTC date plus seven characters of the tree's SHA-256, so an unchanged tree keeps its version and a changed one cannot hide. Every version stays reachable by its stamp, every page footer prints the version that rendered it, and a citation reads: file, lines, platform code version.

Source shown for scrutiny of the research platform. All rights reserved. Not offered as installable software.

application root

FileLinesBytesSHA-256
README.md331,8228c157bc61176c038…
api.php 1 function402,029951a77bb8329fbfa…
index.php72170ccd650e261b5d89…
schema.sql1033,522a37fdb7f11822047…

assets/

FileLinesBytesSHA-256
app.js654,037b56d9cacf29ef638…
style.css20022,30106f676d327a4f435…

cron/

FileLinesBytesSHA-256
README.md41488e063a214a22e639…
health_check.php351,9943d95f0ba6d5dab78…
poll_all.php10488698b864077e27e8f…

cron/clients/

FileLinesBytesSHA-256
_base.php 1 function211,233257302304e0e6b90…
bugg.php115166f1b72c80b2440ca…
ecocounter.php115257451b16e1de4d34d…
hydrovu.php115333e02364b1a3c4fb3…
sqm.php11500b6cf017d0dc3d309…
weatherlink.php115483a1d3cd46e1a4dfa…

docs/

FileLinesBytesSHA-256
schema.sql943,270a0979cb34aff4cfc…

inc/

FileLinesBytesSHA-256
ai.php 8 functions1177,5758903577c20328e7a…
code-allowlist.php241,999f2fc55c2c617ec89…
code-snapshot.php1308,5083022420d25260e3d…
db.php 2 functions2180762d133f26334fc0d…
defaults.php311,431ff9c255ceb0dd472…
helpers.php 9 functions542,944287c881d9ae5317f…
layout.php 4 functions726,690528ddb80bc30a1b4…
streampage.php 1 function302,223aa298edcdb72d00b…

pages/

FileLinesBytesSHA-256
about.php163,422614c25276f517543…
apidocs.php151,55478e7451b8aa1f7e9…
aquifer.php43401c483f224713e3d9…
ask.php363,977924c25fc6943c4f6…
birds.php252,226d6445399959599d8…
cameras.php201,7324281fc8bfd7d7b7a…
code.php 4 functions14714,856f777036a4c1aa44d…
construction.php1189578a18e521088659c…
control.php212,687ae867741b2799b0f…
correlate.php493,7073da5d4344f22d0eb…
darksky.php433934e971e8afe2c3bd…
faults.php13916c3318131fa64f493…
footfall.php4345f962b67c63247d22…
health.php272,545a2a14e6519d2740f…
heritage.php191,695cebd2619e584d188…
live.php453,7489bfde60e9dab4a84…
log.php10593d2dcca3ce3f704a3…
marine.php4366c0d0cca8e5079321…
methods.php141,451b79278d6d77507c7…
resources.php4408d99155f4637d0e3b…
species.php 5 functions43532,793dfa4a48f1e0915d5…
vault.php171,8221163203674475518…
water.php4405241bf838d93e3180…
weather.php43767000dfe6caafed1d…
wellbeing.php132,58639d1ef9570fbb22c…
wellness.php 1 function9412,407dc992921b27b6019…

Source shown for scrutiny of the research platform. All rights reserved. Not offered as installable software. To verify a file: download it as plain text, compute its SHA-256, compare with the manifest.