{
 "version": "kolaboro-data-catalog-1",
 "generated_at": "2026-11-05T07:24:04Z",
 "run_url": "https://github.com/calory89/webs-estaticas/actions/runs/41986933719",
 "base": "https://kolaboro.com",
 "licence_default": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
 "summary": {
  "datasets": 54,
  "files": 110,
  "bytes": 12800151,
  "contracts_pass": 67,
  "contracts_fail": 0,
  "api_operations": 65,
  "api_checks_pass": 65,
  "api_checks_fail": 0,
  "spec_valid": true,
  "fresh_ok": 40,
  "fresh_late": 1,
  "fresh_no_target": 13,
  "undescribed": 2,
  "missing": [
   "market-points",
   "changes",
   "digest"
  ]
 },
 "rules": {
  "freshness": "Target = twice the run interval of the workflow that writes the file when it runs daily or more often, the interval plus 2 days when it runs weekly or monthly, plus 1 day when the file states only a date (counted from 00:00 UTC). Age = now minus the timestamp the file itself states (or, without one, the time of the last commit that published it). No target for files written by hand, on demand or after events. The Parquet files also count as fresh while they were built from the current bali-cases.json.",
  "contracts": "Each JSON file is validated against its JSON Schema (2020-12) in /data/schemas/kolaboro-data.schema.json. The contracts were written from the files as published on 5 Nov 2026: every top-level key is required with its type, items of top-level lists and maps must keep the keys every item had, numbers are \"number\", deeper optional values may be null. Parquet files are checked against the columns and row count in kolaboro.parquet.json, tiles and screenshots against their binary headers. API answers are validated against the response schemas in /docs/api/openapi.json, which were inferred from live responses.",
  "sizes_hashes": "Bytes and SHA-256 are of the exact bytes https://kolaboro.com/data/ served to the job. A tile set has one SHA-256 over the sorted \"sha256  path\" lines of its files."
 },
 "links": {
  "page": "https://kolaboro.com/data/",
  "dcat": "https://kolaboro.com/data/catalog.jsonld",
  "contracts": "https://kolaboro.com/data/contracts.json",
  "schemas": "https://kolaboro.com/data/schemas/kolaboro-data.schema.json",
  "freshness_api": "https://kolaboro.com/api/x/data/freshness",
  "openapi": "https://kolaboro.com/docs/api/openapi.json",
  "explorer": "https://kolaboro.com/docs/api/explorer/",
  "llms_full": "https://kolaboro.com/llms-full.txt"
 },
 "datasets": [
  {
   "id": "bali-cases",
   "title": "Tracked off-plan projects (anonymous)",
   "description": "Every off-plan project Kolaboro tracks, one record per anonymous project id: market, country, stage, price band, promised handover year, the six public checks (permit, deposit protection, progress, plans, track record, no guaranteed returns), how far each is confirmed, claims tested, flags and the change history. Advertised claims, not verified facts. The same data is served filtered by /api/open/projects.",
   "kind": "data",
   "workflow": "kolaboro-agent.yml",
   "schedule": "weekly research run (Monday 06:17 UTC) and every time the research files change",
   "interval_hours": 168,
   "keywords": [
    "off-plan",
    "property",
    "due diligence",
    "developers",
    "transparency"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 1531261,
   "url": "https://kolaboro.com/data/bali-cases.json",
   "sha256": "4c5a0a28b628fa6f33f3db3a3e3d074485a7396cf5b1b0980c6db04bb3aa1e25",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/bali-cases.json",
   "rows": 1011,
   "rows_unit": "projects",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-04",
    "date_only": true,
    "published_at": "2026-11-05T02:28:27Z",
    "data_as_of": "2026-11-04T00:00:00Z",
    "target_hours": 240,
    "age_hours": 31.4,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T00:00:00Z",
   "frequency": "WEEKLY"
  },
  {
   "id": "world-claims",
   "title": "What developers advertise, by market",
   "description": "Per market: how many tracked projects, title and lease terms advertised, guaranteed-return language, permit claims, permit numbers and plans published, and advertised USD prices. Aggregates only.",
   "kind": "data",
   "workflow": "kolaboro-agent.yml",
   "schedule": "weekly research run (Monday 06:17 UTC) and every time the research files change",
   "interval_hours": 168,
   "keywords": [
    "advertising",
    "claims",
    "markets"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 406528,
   "url": "https://kolaboro.com/data/world-claims.json",
   "sha256": "5741b570b2443c2160203e7f883fd91340b33498b223e7405f6ca505ef23f346",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/world-claims.json",
   "rows": 170,
   "rows_unit": "markets",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-04",
    "date_only": true,
    "published_at": "2026-11-05T02:28:27Z",
    "data_as_of": "2026-11-04T00:00:00Z",
    "target_hours": 240,
    "age_hours": 31.4,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T00:00:00Z",
   "frequency": "WEEKLY"
  },
  {
   "id": "bali-claims",
   "title": "What developers advertise in Bali",
   "description": "The same aggregate as world-claims for the Bali market alone: title and lease terms, guaranteed-return language, permit claims and numbers, plans and advertised prices.",
   "kind": "data",
   "workflow": "kolaboro-agent.yml",
   "schedule": "weekly research run (Monday 06:17 UTC) and every time the research files change",
   "interval_hours": 168,
   "keywords": [
    "Bali",
    "advertising",
    "claims"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 2177,
   "url": "https://kolaboro.com/data/bali-claims.json",
   "sha256": "ce806d6296cb065a2e6f8aa87bc99835c182fed5069794832f3c246c68359563",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/bali-claims.json",
   "rows": null,
   "rows_unit": null,
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-04",
    "date_only": true,
    "published_at": "2026-11-05T02:28:27Z",
    "data_as_of": "2026-11-04T00:00:00Z",
    "target_hours": 240,
    "age_hours": 31.4,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T00:00:00Z",
   "frequency": "WEEKLY"
  },
  {
   "id": "kolaboro-parquet",
   "title": "Projects table (Parquet)",
   "description": "One row per tracked project, built from bali-cases.json: checks, confirmation levels, claims, delay, satellite status and page fingerprint, in Apache Parquet for DuckDB, pandas or Spark. Columns and row count are listed in kolaboro.parquet.json.",
   "kind": "data",
   "workflow": "kolaboro-parquet.yml",
   "schedule": "daily 07:43 UTC and after each research run; rewritten only when the source changed",
   "interval_hours": 24,
   "keywords": [
    "parquet",
    "duckdb",
    "projects"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 68950,
   "url": "https://kolaboro.com/data/kolaboro.parquet",
   "sha256": "7f5ecec0b55242a18ec866676f03334b41f01f313e27f3f17440cdb2df6137f2",
   "http": 200,
   "media_type": "application/vnd.apache.parquet",
   "format": "parquet",
   "contract": "pass",
   "schema_url": null,
   "rows": 1011,
   "rows_unit": "projects",
   "freshness": {
    "stamp_key": "generated",
    "stamp": "2026-11-04T10:24:41Z",
    "date_only": false,
    "published_at": "2026-11-04T10:25:45Z",
    "data_as_of": "2026-11-04T10:24:41Z",
    "target_hours": 48,
    "age_hours": 20.99,
    "event_driven": false,
    "probe_file": "kolaboro.parquet.json",
    "probe": true,
    "source_sha256": "4c5a0a28b628fa6f33f3db3a3e3d074485a7396cf5b1b0980c6db04bb3aa1e25",
    "source_now_sha256": "4c5a0a28b628fa6f33f3db3a3e3d074485a7396cf5b1b0980c6db04bb3aa1e25",
    "in_sync": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T10:24:41Z",
   "frequency": "DAILY"
  },
  {
   "id": "kolaboro-markets-parquet",
   "title": "Markets table (Parquet)",
   "description": "One row per market with the same method as /api/open/markets: projects, average public and confirmed checks, permit and deposit-protection shares, flags and the transparency index.",
   "kind": "data",
   "workflow": "kolaboro-parquet.yml",
   "schedule": "daily 07:43 UTC and after each research run; rewritten only when the source changed",
   "interval_hours": 24,
   "keywords": [
    "parquet",
    "markets",
    "transparency index"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 7695,
   "url": "https://kolaboro.com/data/kolaboro-markets.parquet",
   "sha256": "af777905ad06a0cd7f5eeb2dafcc46830bbffc5dccacd24f0c0c29fdf62dbb19",
   "http": 200,
   "media_type": "application/vnd.apache.parquet",
   "format": "parquet",
   "contract": "pass",
   "schema_url": null,
   "rows": 170,
   "rows_unit": "markets",
   "freshness": {
    "stamp_key": "generated",
    "stamp": "2026-11-04T10:24:41Z",
    "date_only": false,
    "published_at": "2026-11-04T10:25:45Z",
    "data_as_of": "2026-11-04T10:24:41Z",
    "target_hours": 48,
    "age_hours": 20.99,
    "event_driven": false,
    "probe_file": "kolaboro.parquet.json",
    "probe": true,
    "source_sha256": "4c5a0a28b628fa6f33f3db3a3e3d074485a7396cf5b1b0980c6db04bb3aa1e25",
    "source_now_sha256": "4c5a0a28b628fa6f33f3db3a3e3d074485a7396cf5b1b0980c6db04bb3aa1e25",
    "in_sync": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T10:24:41Z",
   "frequency": "DAILY"
  },
  {
   "id": "kolaboro-parquet-manifest",
   "title": "Parquet export manifest",
   "description": "Columns, row counts, sizes and SHA-256 of the two Parquet files and the SHA-256 of the bali-cases.json they were built from. A signed copy is served by /api/x/e/parquet-manifest.",
   "kind": "data",
   "workflow": "kolaboro-parquet.yml",
   "schedule": "daily 07:43 UTC and after each research run; rewritten only when the source changed",
   "interval_hours": 24,
   "keywords": [
    "parquet",
    "manifest"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 4565,
   "url": "https://kolaboro.com/data/kolaboro.parquet.json",
   "sha256": "64800772a5ffb0ee8c778c45391c09fa6c17e2cb163545b2fbe047dd68eca56c",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/kolaboro-parquet-manifest.json",
   "rows": 2,
   "rows_unit": "files",
   "freshness": {
    "stamp_key": "generated",
    "stamp": "2026-11-04T10:24:41Z",
    "date_only": false,
    "published_at": "2026-11-04T10:25:45Z",
    "data_as_of": "2026-11-04T10:24:41Z",
    "target_hours": 48,
    "age_hours": 20.99,
    "event_driven": false,
    "probe": true,
    "source_sha256": "4c5a0a28b628fa6f33f3db3a3e3d074485a7396cf5b1b0980c6db04bb3aa1e25",
    "source_now_sha256": "4c5a0a28b628fa6f33f3db3a3e3d074485a7396cf5b1b0980c6db04bb3aa1e25",
    "in_sync": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T10:24:41Z",
   "frequency": "DAILY"
  },
  {
   "id": "promises",
   "title": "Dated developer promises",
   "description": "Every dated promise a developer made about a tracked project (handover, construction start, structure, other milestones, permits, rental programme), read from the research records, with its status today. Per project and per market.",
   "kind": "data",
   "workflow": "kolaboro-followup.yml",
   "schedule": "daily 11:23 UTC and after each research run",
   "interval_hours": 24,
   "keywords": [
    "promises",
    "handover",
    "milestones"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 370071,
   "url": "https://kolaboro.com/data/promises.json",
   "sha256": "d5d933e496d87f92a8c6f05299d1085ba1e3e188d7201e2c1bd7767341bd9729",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/promises.json",
   "rows": 850,
   "rows_unit": "projects",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-04",
    "date_only": true,
    "published_at": "2026-11-05T07:15:05Z",
    "data_as_of": "2026-11-04T00:00:00Z",
    "target_hours": 72,
    "age_hours": 31.4,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T00:00:00Z",
   "frequency": "DAILY"
  },
  {
   "id": "promise-drift",
   "title": "Promise drift on developer pages",
   "description": "Day by day, which advertised values changed on each tracked developer page (handover date, prices, units and other fields), from fingerprinted page text. No URLs or names.",
   "kind": "data",
   "workflow": "kolaboro-devintel.yml",
   "schedule": "daily 09:43 UTC and after each research run",
   "interval_hours": 24,
   "keywords": [
    "changes",
    "developer pages"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 162983,
   "url": "https://kolaboro.com/data/promise-drift.json",
   "sha256": "d866591eaf055762f57639a1caa844a66e50c08cdec8ade528d9d0508c0ca6a4",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/promise-drift.json",
   "rows": 821,
   "rows_unit": "projects",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-04",
    "date_only": true,
    "published_at": "2026-11-04T10:46:03Z",
    "data_as_of": "2026-11-04T00:00:00Z",
    "target_hours": 72,
    "age_hours": 31.4,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T00:00:00Z",
   "frequency": "DAILY"
  },
  {
   "id": "domain-age",
   "title": "Website age of project pages",
   "description": "For each project whose page is on its own website: domain registration date (RDAP) and earliest TLS certificate (Certificate Transparency), at month precision. No domains are published.",
   "kind": "data",
   "workflow": "kolaboro-devintel.yml",
   "schedule": "daily 09:43 UTC and after each research run",
   "interval_hours": 24,
   "keywords": [
    "RDAP",
    "certificate transparency",
    "domain age"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 62869,
   "url": "https://kolaboro.com/data/domain-age.json",
   "sha256": "ad0a34ff752cf81fd08a15c3c72b3d6b419446149e3243191fbe8b407b67a7ac",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/domain-age.json",
   "rows": 1011,
   "rows_unit": "projects",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-04",
    "date_only": true,
    "published_at": "2026-11-04T17:51:31Z",
    "data_as_of": "2026-11-04T00:00:00Z",
    "target_hours": 72,
    "age_hours": 31.4,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T00:00:00Z",
   "frequency": "DAILY"
  },
  {
   "id": "delay-index",
   "title": "Delivery delay index",
   "description": "How far tracked off-plan projects are behind the first handover date on record, by market, with rules, caveats and monthly history.",
   "kind": "data",
   "workflow": "kolaboro-delay-index.yml",
   "schedule": "daily 16:37 UTC, monthly snapshot on the 1st, and after each research run",
   "interval_hours": 24,
   "keywords": [
    "delays",
    "handover",
    "index"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 44228,
   "url": "https://kolaboro.com/data/delay-index.json",
   "sha256": "75f14131a5ce063cbc347fd7d6c1195536ef4cdc2f9f0e7f856cfe7d35ecc007",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/delay-index.json",
   "rows": 170,
   "rows_unit": "markets",
   "freshness": {
    "stamp_key": "generated",
    "stamp": "2026-11-04",
    "date_only": true,
    "published_at": "2026-11-04T10:28:44Z",
    "data_as_of": "2026-11-04T00:00:00Z",
    "target_hours": 72,
    "age_hours": 31.4,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T00:00:00Z",
   "frequency": "DAILY"
  },
  {
   "id": "on-time",
   "title": "On-time handover odds",
   "description": "For each project: will it hand over within 6 months of the first date on record? Estimated from closed comparable projects with a 95% interval, plus validation and the bias of the sample.",
   "kind": "data",
   "workflow": "kolaboro-delay-index.yml",
   "schedule": "daily 16:37 UTC, monthly snapshot on the 1st, and after each research run",
   "interval_hours": 24,
   "keywords": [
    "handover",
    "probability"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 148353,
   "url": "https://kolaboro.com/data/on-time.json",
   "sha256": "da63b68cfdc7f31c722cf3dadeacf4c7866c476253cdf8654a9cb742f0da0e6a",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/on-time.json",
   "rows": 1011,
   "rows_unit": "projects",
   "freshness": {
    "stamp_key": "generated",
    "stamp": "2026-11-04",
    "date_only": true,
    "published_at": "2026-11-04T10:28:44Z",
    "data_as_of": "2026-11-04T00:00:00Z",
    "target_hours": 72,
    "age_hours": 31.4,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T00:00:00Z",
   "frequency": "DAILY"
  },
  {
   "id": "price-index",
   "title": "Asking-price index",
   "description": "Chained index of advertised asking prices (\"from\" prices on developer and listing pages) per market, with daily snapshots, rules and caveats. Not transaction prices.",
   "kind": "data",
   "workflow": "kolaboro-price-index.yml",
   "schedule": "daily 14:41 UTC and after each research run",
   "interval_hours": 24,
   "keywords": [
    "prices",
    "index"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 138974,
   "url": "https://kolaboro.com/data/price-index.json",
   "sha256": "f037c6a8145ea64831217803f8425d51aa0707b77d0f698558cffe6d8b52aef3",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/price-index.json",
   "rows": 107,
   "rows_unit": "markets",
   "freshness": {
    "stamp_key": "generated",
    "stamp": "2026-11-04",
    "date_only": true,
    "published_at": "2026-11-04T10:26:09Z",
    "data_as_of": "2026-11-04T00:00:00Z",
    "target_hours": 72,
    "age_hours": 31.4,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T00:00:00Z",
   "frequency": "DAILY"
  },
  {
   "id": "price-reality",
   "title": "Advertised versus registered prices",
   "description": "Advertised starting prices compared with officially registered sales where a government publishes them: counts, quartiles and medians only, converted to USD at a cited rate. Lists the markets not covered.",
   "kind": "data",
   "workflow": "kolaboro-market-truth.yml",
   "schedule": "weekly, Monday 04:17 UTC",
   "interval_hours": 168,
   "keywords": [
    "prices",
    "official data"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 85063,
   "url": "https://kolaboro.com/data/price-reality.json",
   "sha256": "ffdee2e15e9f51758803ce8baeb9749a7971c5d378aebf2a86f310a424e4aab6",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/price-reality.json",
   "rows": 7,
   "rows_unit": "markets",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-04",
    "date_only": true,
    "published_at": "2026-11-04T06:08:46Z",
    "data_as_of": "2026-11-04T00:00:00Z",
    "target_hours": 240,
    "age_hours": 31.4,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T00:00:00Z",
   "frequency": "WEEKLY"
  },
  {
   "id": "risk",
   "title": "Risk patterns",
   "description": "Which tracked projects look unusual on public warning signs compared with all others, and why, with a model card. It ranks; it does not predict. No project has a confirmed outcome to train on.",
   "kind": "data",
   "workflow": "kolaboro-market-truth.yml",
   "schedule": "weekly, Monday 04:17 UTC",
   "interval_hours": 168,
   "keywords": [
    "risk",
    "anomaly",
    "model card"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 166187,
   "url": "https://kolaboro.com/data/risk.json",
   "sha256": "8b1481584a5380cf797f9969a14910df229ea2fe8f2b83f12104da14f8ae905b",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/risk.json",
   "rows": 896,
   "rows_unit": "projects",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-04",
    "date_only": true,
    "published_at": "2026-11-04T06:08:46Z",
    "data_as_of": "2026-11-04T00:00:00Z",
    "target_hours": 240,
    "age_hours": 31.4,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T00:00:00Z",
   "frequency": "WEEKLY"
  },
  {
   "id": "register-checks",
   "title": "Official register checks",
   "description": "Every official register linked on /registers/: whether our checker could read it (time, HTTP status, size and SHA-256 of the bytes received), and per project the register result, with a hash-chained lookup archive.",
   "kind": "data",
   "workflow": "kolaboro-market-truth.yml",
   "schedule": "weekly, Monday 04:17 UTC",
   "interval_hours": 168,
   "keywords": [
    "registers",
    "permits"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 46964,
   "url": "https://kolaboro.com/data/register-checks.json",
   "sha256": "ab6c797fd5f234ff49758e271b9315ab89377972d87990fb55b1c6dc83ced181",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/register-checks.json",
   "rows": 53,
   "rows_unit": "registers",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-04",
    "date_only": true,
    "published_at": "2026-11-04T06:08:46Z",
    "data_as_of": "2026-11-04T00:00:00Z",
    "target_hours": 240,
    "age_hours": 31.4,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T00:00:00Z",
   "frequency": "WEEKLY"
  },
  {
   "id": "company-graph",
   "title": "Company and director graph (UK)",
   "description": "Anonymised company and director graph for tracked projects whose developer is a UK company found on Companies House by exact name. Counts and anonymised nodes only.",
   "kind": "data",
   "workflow": "kolaboro-company-graph.yml",
   "schedule": "weekly, Wednesday 05:41 UTC",
   "interval_hours": 168,
   "keywords": [
    "companies house",
    "directors"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 94647,
   "url": "https://kolaboro.com/data/company-graph.json",
   "sha256": "a15ecdfdb67acc75cdb08802a2eea381020b51c95613dd05306ead15e0ed37f2",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/company-graph.json",
   "rows": 25,
   "rows_unit": "projects",
   "freshness": {
    "stamp_key": "generated_at",
    "stamp": "2026-11-04T13:15:03Z",
    "date_only": false,
    "published_at": "2026-11-04T13:32:14Z",
    "data_as_of": "2026-11-04T13:15:03Z",
    "target_hours": 216,
    "age_hours": 18.15,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T13:15:03Z",
   "frequency": "WEEKLY"
  },
  {
   "id": "company-graph-global",
   "title": "Global company graph (GLEIF)",
   "description": "For each tracked project: whether the companies named as developer have a Legal Entity Identifier, their parents and countries, as counts and booleans only. Source GLEIF (CC0).",
   "kind": "data",
   "workflow": "kolaboro-gleif-graph.yml",
   "schedule": "weekly, Tuesday 04:17 UTC",
   "interval_hours": 168,
   "keywords": [
    "GLEIF",
    "LEI",
    "companies"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 289665,
   "url": "https://kolaboro.com/data/company-graph-global.json",
   "sha256": "c2723170643836f10f71d18a2e0f87b77f2625b506f84c6029376a3d11fe67a6",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/company-graph-global.json",
   "rows": 1011,
   "rows_unit": "projects",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-04T09:36:15Z",
    "date_only": false,
    "published_at": "2026-11-04T10:11:41Z",
    "data_as_of": "2026-11-04T09:36:15Z",
    "target_hours": 216,
    "age_hours": 21.8,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T09:36:15Z",
   "frequency": "WEEKLY"
  },
  {
   "id": "insolvency-watch",
   "title": "Insolvency watch",
   "description": "Daily check of UK and Spanish developer companies against insolvency notices (The Gazette, BORME). Each hit is reduced to date, source and type of notice; no company names.",
   "kind": "data",
   "workflow": "kolaboro-insolvency-watch.yml",
   "schedule": "daily 07:23 UTC",
   "interval_hours": 24,
   "keywords": [
    "insolvency",
    "BORME",
    "Gazette"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 9258,
   "url": "https://kolaboro.com/data/insolvency-watch.json",
   "sha256": "9433114442fcec4706d0a79f317c4746e5956e0d2e98e6e7cb28059149af2956",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/insolvency-watch.json",
   "rows": 73,
   "rows_unit": "projects",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-04T09:02:42Z",
    "date_only": false,
    "published_at": "2026-11-04T10:18:26Z",
    "data_as_of": "2026-11-04T09:02:42Z",
    "target_hours": 48,
    "age_hours": 22.36,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T09:02:42Z",
   "frequency": "DAILY"
  },
  {
   "id": "insolvency-es-index",
   "title": "Spanish insolvency index (hashed)",
   "description": "Insolvency acts published in BORME Section One, keyed by a truncated SHA-256 of the normalised company name so the file is not a readable list of companies; anyone can test a name against it. Source BOE, reuse with attribution.",
   "kind": "data",
   "workflow": "kolaboro-insolvency-watch.yml",
   "schedule": "daily 07:23 UTC",
   "interval_hours": 24,
   "keywords": [
    "BORME",
    "insolvency",
    "Spain"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 655810,
   "url": "https://kolaboro.com/data/insolvency-es-index.json",
   "sha256": "128397463188d3db1961aa527756bdf58fe03223680b31b79fc8b1a5cd4a8cce",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/insolvency-es-index.json",
   "rows": 2702,
   "rows_unit": "companies",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-04T09:02:42Z",
    "date_only": false,
    "published_at": "2026-11-04T10:18:26Z",
    "data_as_of": "2026-11-04T09:02:42Z",
    "target_hours": 48,
    "age_hours": 22.36,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T09:02:42Z",
   "frequency": "DAILY"
  },
  {
   "id": "hazards",
   "title": "Natural hazards at tracked projects",
   "description": "Elevation, flood depth, earthquakes, tsunamis, volcanoes and coastline distance for tracked projects with coordinates and watched areas, rounded so they cannot pinpoint a plot. Sources listed in the file.",
   "kind": "data",
   "workflow": "kolaboro-hazards.yml",
   "schedule": "monthly, on the 9th at 03:17 UTC",
   "interval_hours": 744,
   "keywords": [
    "hazards",
    "flood",
    "earthquake"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 49805,
   "url": "https://kolaboro.com/data/hazards.json",
   "sha256": "add6472b886f9924fccaebfce6a3b7a02dad83564acd59b4a03ae213d90e2b28",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/hazards.json",
   "rows": 168,
   "rows_unit": "projects",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-04",
    "date_only": true,
    "published_at": "2026-11-04T07:28:02Z",
    "data_as_of": "2026-11-04T00:00:00Z",
    "target_hours": 816,
    "age_hours": 31.4,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T00:00:00Z",
   "frequency": "MONTHLY"
  },
  {
   "id": "satellite",
   "title": "Satellite watch (Sentinel-2 and Sentinel-1)",
   "description": "Sentinel-2 vegetation and clearing per season and Sentinel-1 radar backscatter change for every watched site and area (boxes of about 1 km). Contains modified Copernicus Sentinel data.",
   "kind": "data",
   "workflow": "kolaboro-satellite.yml",
   "schedule": "weekly, Monday 07:41 UTC",
   "interval_hours": 168,
   "keywords": [
    "satellite",
    "Sentinel-2",
    "Copernicus"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 74107,
   "url": "https://kolaboro.com/data/satellite.json",
   "sha256": "267208f633cb62714f6416b0c0f2246e20403a5326f86edfec14af78ac1f5add",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/satellite.json",
   "rows": 27,
   "rows_unit": "sites",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-03",
    "date_only": true,
    "published_at": "2026-11-03T10:05:56Z",
    "data_as_of": "2026-11-03T00:00:00Z",
    "target_hours": 240,
    "age_hours": 55.4,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-03T00:00:00Z",
   "frequency": "WEEKLY"
  },
  {
   "id": "satellite-optical",
   "title": "Monthly optical progress series",
   "description": "Per watched site and month from January 2023: cloud-masked Sentinel-2 median, built_pct (built-up or bare ground, which look alike at 10 m) and new built-up since the baseline month. Contains modified Copernicus Sentinel data.",
   "kind": "data",
   "workflow": "kolaboro-satellite-optical.yml",
   "schedule": "weekly, Tuesday 09:17 UTC",
   "interval_hours": 168,
   "keywords": [
    "satellite",
    "construction progress"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 422365,
   "url": "https://kolaboro.com/data/satellite-optical.json",
   "sha256": "be4bf0438a9e374420959366bc30ed302e85730e2ed841afb950c7167587487e",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/satellite-optical.json",
   "rows": 27,
   "rows_unit": "sites",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-03",
    "date_only": true,
    "published_at": "2026-11-03T13:55:58Z",
    "data_as_of": "2026-11-03T00:00:00Z",
    "target_hours": 240,
    "age_hours": 55.4,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-03T00:00:00Z",
   "frequency": "WEEKLY"
  },
  {
   "id": "stalled-sites",
   "title": "Stalled construction sites",
   "description": "Sentinel-2 change between clear quarters in a 150 m window around every project with coordinates, and which sites show almost no change.",
   "kind": "data",
   "workflow": "kolaboro-landwatch.yml",
   "schedule": "weekly, Wednesday 04:41 UTC",
   "interval_hours": 168,
   "keywords": [
    "satellite",
    "stalled"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 135819,
   "url": "https://kolaboro.com/data/stalled-sites.json",
   "sha256": "9e647f9fb7e5b4238b05801213d45056b31c0139fa8d547f1a41eb98ebd13625",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/stalled-sites.json",
   "rows": 168,
   "rows_unit": "projects",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-04",
    "date_only": true,
    "published_at": "2026-11-04T09:15:38Z",
    "data_as_of": "2026-11-04T00:00:00Z",
    "target_hours": 240,
    "age_hours": 31.4,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T00:00:00Z",
   "frequency": "WEEKLY"
  },
  {
   "id": "night-lights",
   "title": "Night lights at finished projects",
   "description": "NASA Black Marble night-time light at projects that should be finished, compared with the surrounding ring, monthly for 36 months. Light is a proxy, not proof of occupancy.",
   "kind": "data",
   "workflow": "kolaboro-landwatch.yml",
   "schedule": "weekly, Wednesday 04:41 UTC",
   "interval_hours": 168,
   "keywords": [
    "night lights",
    "VIIRS"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 4916,
   "url": "https://kolaboro.com/data/night-lights.json",
   "sha256": "50839058f887712e7f0e44401e4e1242383e2fd912bb17298db64c28bce6e06f",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/night-lights.json",
   "rows": 5,
   "rows_unit": "projects",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-04",
    "date_only": true,
    "published_at": "2026-11-04T09:09:16Z",
    "data_as_of": "2026-11-04T00:00:00Z",
    "target_hours": 240,
    "age_hours": 31.4,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T00:00:00Z",
   "frequency": "WEEKLY"
  },
  {
   "id": "visual-diff",
   "title": "Visual changes on developer pages",
   "description": "Where the pages of tracked developer websites visibly changed, as page geometry only. No screenshots are published because they would identify anonymous projects.",
   "kind": "data",
   "workflow": "kolaboro-visual.yml",
   "schedule": "daily 15:23 UTC",
   "interval_hours": 24,
   "keywords": [
    "visual diff",
    "developer pages"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 33202,
   "url": "https://kolaboro.com/data/visual-diff.json",
   "sha256": "de53512c756421a1fb37848e4ae481f6045d70578d022cacf393f4f2c00d5275",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/visual-diff.json",
   "rows": 292,
   "rows_unit": "projects",
   "freshness": {
    "stamp_key": "generated",
    "stamp": "2026-11-04",
    "date_only": true,
    "published_at": "2026-11-04T21:44:10Z",
    "data_as_of": "2026-11-04T00:00:00Z",
    "target_hours": 72,
    "age_hours": 31.4,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T00:00:00Z",
   "frequency": "DAILY"
  },
  {
   "id": "render-reuse",
   "title": "Reused renders across projects",
   "description": "Pairs of images that appear on the pages of two different tracked projects on different domains (CLIP image embeddings, cosine 0.85 or more, confirmed by feature matching), with what was excluded and why.",
   "kind": "data",
   "workflow": "kolaboro-render-reuse.yml",
   "schedule": "weekly, Sunday 06:37 UTC",
   "interval_hours": 168,
   "keywords": [
    "images",
    "reuse"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 2512,
   "url": "https://kolaboro.com/data/render-reuse.json",
   "sha256": "c3147d4a308d7bdf7b434159d0b89b795ca17bbb6866c9b6b6352f3c4170dd07",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/render-reuse.json",
   "rows": 0,
   "rows_unit": "pairs",
   "freshness": {
    "stamp_key": "generated",
    "stamp": "2026-11-03T13:07:24Z",
    "date_only": false,
    "published_at": "2026-11-03T13:08:04Z",
    "data_as_of": "2026-11-03T13:07:24Z",
    "target_hours": 216,
    "age_hours": 42.28,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-03T13:07:24Z",
   "frequency": "WEEKLY"
  },
  {
   "id": "image-hashes",
   "title": "Perceptual image hashes",
   "description": "64-bit difference hashes of the images kept by the weekly render-reuse run, so anyone can check whether a picture appears on a tracked project page.",
   "kind": "data",
   "workflow": "kolaboro-render-reuse.yml",
   "schedule": "weekly, Sunday 06:37 UTC",
   "interval_hours": 168,
   "keywords": [
    "images",
    "hashes"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 1241121,
   "url": "https://kolaboro.com/data/image-hashes.json",
   "sha256": "4c5c50f94bb8b4bbed39fdb1753f63b885e9856c1d45d120756da42357c168de",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/image-hashes.json",
   "rows": 7963,
   "rows_unit": "images",
   "freshness": {
    "stamp_key": "generated",
    "stamp": "2026-11-03T13:05:56Z",
    "date_only": false,
    "published_at": "2026-11-03T13:08:04Z",
    "data_as_of": "2026-11-03T13:05:56Z",
    "target_hours": 216,
    "age_hours": 42.3,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-03T13:05:56Z",
   "frequency": "WEEKLY"
  },
  {
   "id": "image-index",
   "title": "Render index",
   "description": "Perceptual hashes of images found on the websites the research agent reads, used to check whether a picture a buyer was sent also appears elsewhere.",
   "kind": "data",
   "workflow": "kolaboro-images.yml",
   "schedule": "weekly, Sunday 04:51 UTC",
   "interval_hours": 168,
   "keywords": [
    "images",
    "hashes"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 464446,
   "url": "https://kolaboro.com/data/image-index.json",
   "sha256": "c2264bac641f349466121b0f2b35a7db34255cd242091abc71d5cc5713c9e301",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/image-index.json",
   "rows": 4915,
   "rows_unit": "images",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-01",
    "date_only": true,
    "published_at": "2026-11-01T11:39:02Z",
    "data_as_of": "2026-11-01T00:00:00Z",
    "target_hours": 240,
    "age_hours": 103.4,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-01T00:00:00Z",
   "frequency": "WEEKLY"
  },
  {
   "id": "similar",
   "title": "Similar projects",
   "description": "For every public project, the 5 most similar other public projects: ids and rounded scores only (text similarity from an open sentence-embedding model run on the GitHub runner, plus structured similarity). Input is only the public bali-cases.json.",
   "kind": "data",
   "workflow": "kolaboro-discovery.yml",
   "schedule": "daily 02:23 UTC and after each research run",
   "interval_hours": 24,
   "keywords": [
    "similarity",
    "embeddings"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 0,
   "url": "https://kolaboro.com/data/similar.json",
   "sha256": null,
   "http": 404,
   "media_type": "application/json",
   "format": "json",
   "contract": "not_live",
   "schema_url": "https://kolaboro.com/api/x/data/schema/similar.json",
   "rows": null,
   "rows_unit": "projects",
   "freshness": {
    "stamp_key": null,
    "stamp": null,
    "date_only": null,
    "published_at": "2026-11-05T07:22:38Z",
    "data_as_of": "2026-11-05T07:22:38Z",
    "target_hours": 48,
    "age_hours": 0.02,
    "event_driven": false,
    "status": "ok"
   },
   "last_updated": "2026-11-05T07:22:38Z",
   "frequency": "DAILY"
  },
  {
   "id": "market-points",
   "path": "market-points.json",
   "title": "Market points for the map",
   "kind": "data",
   "description": "One public point per market (not per project), from Natural Earth and GeoNames, used to place anonymous projects on the map. Private per-project coordinates are never used.",
   "workflow": "kolaboro-discovery.yml",
   "schedule": "daily 02:23 UTC and after each research run",
   "interval_hours": 24,
   "stamp": "generated",
   "rows": {
    "key": "markets",
    "unit": "markets"
   },
   "keywords": [
    "map",
    "markets",
    "Natural Earth",
    "GeoNames"
   ],
   "missing": true
  },
  {
   "id": "changes",
   "path": "changes.json",
   "title": "Change heatmap",
   "kind": "data",
   "description": "Day by day, the last published bali-cases.json of each day compared with the previous day's copy: new projects, page edits (page fingerprint changed), price band moves, date moves and register changes, counted per market over rolling windows. A project counts once per kind and market in a window.",
   "workflow": "kolaboro-digest.yml",
   "schedule": "weekly, Monday 06:23 UTC, and when the digest code changes",
   "interval_hours": 168,
   "stamp": "generated",
   "rows": {
    "key": "days_compared",
    "unit": "days compared"
   },
   "keywords": [
    "changes",
    "heatmap"
   ],
   "missing": true
  },
  {
   "id": "digest",
   "path": "digest.json",
   "title": "Weekly market digest",
   "kind": "data",
   "description": "Per ISO week: new projects, changes and alerts by market, built from the public bali-cases, promises, register-checks and stalled-sites files. An AI model may draft only the intro paragraph, and code checks every number in it.",
   "workflow": "kolaboro-digest.yml",
   "schedule": "weekly, Monday 06:23 UTC, and when the digest code changes",
   "interval_hours": 168,
   "stamp": "generated",
   "rows": {
    "key": "weeks",
    "unit": "weeks"
   },
   "keywords": [
    "digest",
    "weekly"
   ],
   "missing": true
  },
  {
   "id": "mystery-shopper",
   "title": "Mystery shopper programme",
   "description": "Questionnaire, measurement rules and status of the mystery shopper programme. It has not started; the file says why.",
   "kind": "data",
   "workflow": null,
   "schedule": "edited by hand",
   "interval_hours": null,
   "keywords": [
    "mystery shopper"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 4725,
   "url": "https://kolaboro.com/data/mystery-shopper.json",
   "sha256": "314c223e0d207569eff86651baeefddcad15071b5bdb3826b5487ed27aaa9e90",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/mystery-shopper.json",
   "rows": 6,
   "rows_unit": "questions",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-03",
    "date_only": true,
    "published_at": "2026-11-03T22:31:40Z",
    "data_as_of": "2026-11-03T00:00:00Z",
    "target_hours": null,
    "age_hours": 55.4,
    "event_driven": false,
    "probe": true,
    "status": "no_target"
   },
   "last_updated": "2026-11-03T00:00:00Z",
   "frequency": "IRREG"
  },
  {
   "id": "roadmap",
   "title": "Product roadmap",
   "description": "The public product roadmap: each item with its number, theme, title, short description and status.",
   "kind": "data",
   "workflow": null,
   "schedule": "edited by hand",
   "interval_hours": null,
   "keywords": [
    "roadmap"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 18898,
   "url": "https://kolaboro.com/data/roadmap.json",
   "sha256": "362335ca86f767b7d51f05c65cfa85494eaf25752adfd48b3675a154bedea85a",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/roadmap.json",
   "rows": 100,
   "rows_unit": "items",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-01",
    "date_only": true,
    "published_at": "2026-11-01T17:57:35Z",
    "data_as_of": "2026-11-01T00:00:00Z",
    "target_hours": null,
    "age_hours": 103.4,
    "event_driven": false,
    "probe": true,
    "status": "no_target"
   },
   "last_updated": "2026-11-01T00:00:00Z",
   "frequency": "IRREG"
  },
  {
   "id": "projects-sample",
   "title": "Fictional sample score",
   "description": "One fictional project (marked fictional: true) used to demonstrate the score page. Not real data.",
   "kind": "sample",
   "workflow": null,
   "schedule": "static sample",
   "interval_hours": null,
   "keywords": [
    "sample"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 2435,
   "url": "https://kolaboro.com/data/projects.json",
   "sha256": "95dd75a834bbfe3db7f68f382e31caa5769d30d6276fb2e9be13a451dc2041d8",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/projects-sample.json",
   "rows": 1,
   "rows_unit": "projects",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-10-27",
    "date_only": true,
    "published_at": "2026-10-27T21:21:12Z",
    "data_as_of": "2026-10-27T00:00:00Z",
    "target_hours": null,
    "age_hours": 223.4,
    "event_driven": false,
    "probe": true,
    "status": "no_target"
   },
   "last_updated": "2026-10-27T00:00:00Z",
   "frequency": "NEVER"
  },
  {
   "id": "progress-sample",
   "title": "Sample photo progress analysis",
   "description": "One stored example answer of the photo progress check, used on the demo page.",
   "kind": "sample",
   "workflow": null,
   "schedule": "static sample",
   "interval_hours": null,
   "keywords": [
    "sample"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 2763,
   "url": "https://kolaboro.com/data/progress-sample.json",
   "sha256": "b620feddaa71a2374e04ae7c83077c73c416a9674b39f2d78940eff62382c239",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/progress-sample.json",
   "rows": null,
   "rows_unit": null,
   "freshness": {
    "stamp_key": "analysed",
    "stamp": "2026-10-29T20:41:55.904Z",
    "date_only": false,
    "published_at": "2026-10-29T20:54:33Z",
    "data_as_of": "2026-10-29T20:41:55Z",
    "target_hours": null,
    "age_hours": 154.7,
    "event_driven": false,
    "probe": true,
    "status": "no_target"
   },
   "last_updated": "2026-10-29T20:41:55Z",
   "frequency": "NEVER"
  },
  {
   "id": "coast-tiles",
   "title": "Coastline outline tiles",
   "description": "Natural Earth 1:10m land outline (public domain, via world-atlas 2.0.2) cut into 10 degree tiles (published as one file per 10 degree column of longitude), quantised and delta-encoded, used by the hazards check only when no OpenStreetMap server answers. Every tile exists; open-ocean tiles are empty.",
   "kind": "tiles",
   "workflow": null,
   "schedule": "static, built once",
   "interval_hours": null,
   "keywords": [
    "coastline",
    "Natural Earth"
   ],
   "licence": "Public domain (Natural Earth)",
   "described": true,
   "bytes": 0,
   "url": "https://kolaboro.com/data/coast/",
   "file_count": 36,
   "sha256": "31364073345c9ad1a97b158dd6482199b5fde71da754a574e4d64ec1632381ee",
   "sha256_of": "the sorted list of \"sha256  path\" lines, one per file (sha256sum format)",
   "format": "json-tiles",
   "media_type": "application/json",
   "files": null,
   "download_hint": "One file per tile: coast/-10.json, coast/-100.json, coast/-110.json ...",
   "contract": "not_live",
   "schema_url": "https://kolaboro.com/api/x/data/schema/coast-tiles.json",
   "rows": 36,
   "rows_unit": "tiles",
   "freshness": {
    "stamp_key": null,
    "stamp": null,
    "date_only": null,
    "published_at": "2026-11-05T07:18:43Z",
    "data_as_of": "2026-11-05T07:18:43Z",
    "target_hours": null,
    "age_hours": 0.09,
    "event_driven": false,
    "status": "no_target"
   },
   "last_updated": "2026-11-05T07:18:43Z",
   "frequency": "NEVER"
  },
  {
   "id": "mangrove-tiles",
   "title": "Mangrove index tiles",
   "description": "Global Mangrove Watch v3 (2020) reduced to cells of about 220 m that contain any mangrove pixel, in binary 45 degree blocks (format GMW1, see the file header description in the protected-land endpoint). Source CC BY 4.0, Bunting et al. 2022.",
   "kind": "tiles",
   "workflow": null,
   "schedule": "static, rebuilt once per Global Mangrove Watch release",
   "interval_hours": null,
   "keywords": [
    "mangroves",
    "Global Mangrove Watch"
   ],
   "licence": "CC BY 4.0 (Global Mangrove Watch v3, Bunting et al. 2022; credit Kolaboro for the reduction)",
   "described": true,
   "bytes": 5523997,
   "url": "https://kolaboro.com/data/mangroves/",
   "file_count": 16,
   "sha256": "f8bbf8d374c2f577e0ccdf8cf7a655ec4197bb5df06a6f82cf461593fd04274a",
   "sha256_of": "the sorted list of \"sha256  path\" lines, one per file (sha256sum format)",
   "format": "binary-tiles",
   "media_type": "application/octet-stream",
   "files": [
    {
     "path": "mangroves/-135_-45.bin",
     "url": "https://kolaboro.com/data/mangroves/-135_-45.bin",
     "http": 200,
     "bytes": 4245,
     "sha256": "87206272a5267d0eccf09b0d0472cb3ea67d01320b304eccce0dacab7e99604d"
    },
    {
     "path": "mangroves/-135_0.bin",
     "url": "https://kolaboro.com/data/mangroves/-135_0.bin",
     "http": 200,
     "bytes": 293270,
     "sha256": "3998ef148bf650a2295f099a8a6d03e699daa9ad60061953e1110c4c22d39fb7"
    },
    {
     "path": "mangroves/-180_-45.bin",
     "url": "https://kolaboro.com/data/mangroves/-180_-45.bin",
     "http": 200,
     "bytes": 3180,
     "sha256": "9fec7253410a396e72222f5f89e57aa72bf913455e7da71fed0e741361e7eb8f"
    },
    {
     "path": "mangroves/-180_0.bin",
     "url": "https://kolaboro.com/data/mangroves/-180_0.bin",
     "http": 200,
     "bytes": 848,
     "sha256": "6922ad094149cab83d75548d85e34b836043e688f7d0df5106d5fc708485cbfe"
    },
    {
     "path": "mangroves/-45_-45.bin",
     "url": "https://kolaboro.com/data/mangroves/-45_-45.bin",
     "http": 200,
     "bytes": 179889,
     "sha256": "2671ffd9bc5a818c671a1ed2f05a060422696fa12684a17f7161d9a81b59a6e8"
    },
    {
     "path": "mangroves/-45_0.bin",
     "url": "https://kolaboro.com/data/mangroves/-45_0.bin",
     "http": 200,
     "bytes": 311866,
     "sha256": "f34f06b2bd207effb32c5324f5dcdffc53161e4297fdbbc56e982ffc7a1a1855"
    },
    {
     "path": "mangroves/-90_-45.bin",
     "url": "https://kolaboro.com/data/mangroves/-90_-45.bin",
     "http": 200,
     "bytes": 199205,
     "sha256": "7f6f83b812bbdb53ba177189d907341e2a5c1f26f135420a86de2d6cb368873c"
    },
    {
     "path": "mangroves/-90_0.bin",
     "url": "https://kolaboro.com/data/mangroves/-90_0.bin",
     "http": 200,
     "bytes": 935575,
     "sha256": "0b16d2e49d1432a5bafe737480a7eee28da8e2d598e4516f011881b3a1c54c2c"
    },
    {
     "path": "mangroves/0_-45.bin",
     "url": "https://kolaboro.com/data/mangroves/0_-45.bin",
     "http": 200,
     "bytes": 270699,
     "sha256": "f4d7d97b86204583872c742f5e457ab928594651076a4284b5e92ff73bb0770c"
    },
    {
     "path": "mangroves/0_0.bin",
     "url": "https://kolaboro.com/data/mangroves/0_0.bin",
     "http": 200,
     "bytes": 356971,
     "sha256": "af778834662032daad636d921f002640daf85026423d13b4d943ac6748d7b663"
    },
    {
     "path": "mangroves/135_-45.bin",
     "url": "https://kolaboro.com/data/mangroves/135_-45.bin",
     "http": 200,
     "bytes": 759300,
     "sha256": "8a6e07a623bd0b8a9fb970fedd41d027dd45ccbdfffb68b05e6bc05a6749f4f3"
    },
    {
     "path": "mangroves/135_0.bin",
     "url": "https://kolaboro.com/data/mangroves/135_0.bin",
     "http": 200,
     "bytes": 4429,
     "sha256": "6825aee7d2d03f199e2b4ef620b5cb4a41219923cccfb618c4cfc29d5e9f4042"
    },
    {
     "path": "mangroves/45_-45.bin",
     "url": "https://kolaboro.com/data/mangroves/45_-45.bin",
     "http": 200,
     "bytes": 68591,
     "sha256": "71c67a0ee5450965a78283bd98e3b627bf24ae9cf3c54bdcc99a346e777c74f5"
    },
    {
     "path": "mangroves/45_0.bin",
     "url": "https://kolaboro.com/data/mangroves/45_0.bin",
     "http": 200,
     "bytes": 284164,
     "sha256": "41d321d6f05df15bdd2732158453727027ac85330d8a2dc5c2b3f734352592c5"
    },
    {
     "path": "mangroves/90_-45.bin",
     "url": "https://kolaboro.com/data/mangroves/90_-45.bin",
     "http": 200,
     "bytes": 822961,
     "sha256": "be81abf45d3680aac4ab5f24d5ec8a8b8ed21c5fc8a0b33ed6275eefe0ac832a"
    },
    {
     "path": "mangroves/90_0.bin",
     "url": "https://kolaboro.com/data/mangroves/90_0.bin",
     "http": 200,
     "bytes": 1028804,
     "sha256": "faf5b74f2cd1bb6041ddd6d627c485234b8f618db011176cd6c3c5f4446a714a"
    }
   ],
   "download_hint": "One file per tile: mangroves/-135_-45.bin, mangroves/-135_0.bin, mangroves/-180_-45.bin ...",
   "contract": "pass",
   "schema_url": null,
   "rows": 16,
   "rows_unit": "tiles",
   "freshness": {
    "stamp_key": null,
    "stamp": null,
    "date_only": null,
    "published_at": "2026-11-04T08:57:27Z",
    "data_as_of": "2026-11-04T08:57:27Z",
    "target_hours": null,
    "age_hours": 22.44,
    "event_driven": false,
    "status": "no_target"
   },
   "last_updated": "2026-11-04T08:57:27Z",
   "frequency": "NEVER"
  },
  {
   "id": "benchmark",
   "title": "AI desk review benchmark",
   "description": "Results of the desk review benchmark on fixed fictional cases, one file per model (Haiku, Sonnet), each case answer signed with the Kolaboro Ed25519 key.",
   "kind": "operations",
   "workflow": "kolaboro-benchmark.yml",
   "schedule": "on demand",
   "interval_hours": null,
   "keywords": [
    "AI",
    "benchmark"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 99204,
   "url": "https://kolaboro.com/data/benchmark/",
   "file_count": 2,
   "sha256": "a94237d9894f0ec53e52ee1283d4962c9464f877b5ceeb6e7fba7bb2cb95b33f",
   "sha256_of": "the sorted list of \"sha256  path\" lines, one per file (sha256sum format)",
   "format": "json",
   "media_type": "application/json",
   "files": [
    {
     "path": "benchmark/haiku.json",
     "url": "https://kolaboro.com/data/benchmark/haiku.json",
     "http": 200,
     "bytes": 52010,
     "sha256": "312e780ae2236dd4cc087b9018b9e7f5a3df8b9af1901f291b0c27232f9c86d6"
    },
    {
     "path": "benchmark/sonnet.json",
     "url": "https://kolaboro.com/data/benchmark/sonnet.json",
     "http": 200,
     "bytes": 47194,
     "sha256": "03598df3776484a426208369f4bf517d7fdd7b8585021b7ee2ee7dde6556c138"
    }
   ],
   "download_hint": "One file per tile: benchmark/haiku.json, benchmark/sonnet.json ...",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/benchmark.json",
   "rows": 36,
   "rows_unit": "cases",
   "freshness": {
    "stamp_key": "started",
    "stamp": "2026-11-03T22:59:11Z",
    "date_only": false,
    "published_at": "2026-11-03T23:02:30Z",
    "data_as_of": "2026-11-03T22:59:11Z",
    "target_hours": null,
    "age_hours": 32.41,
    "event_driven": false,
    "status": "no_target"
   },
   "last_updated": "2026-11-03T22:59:11Z",
   "frequency": "IRREG"
  },
  {
   "id": "a11y",
   "title": "Accessibility audit",
   "description": "axe-core audit of every page (WCAG 2.2 AA rules) with counts per rule and page and the run history.",
   "kind": "operations",
   "workflow": "kolaboro-a11y.yml",
   "schedule": "daily 02:47 UTC",
   "interval_hours": 24,
   "keywords": [
    "accessibility",
    "WCAG"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 21278,
   "url": "https://kolaboro.com/data/a11y.json",
   "sha256": "1cdc4aeb7cfd2591da9629775171fc830d09020979592f4c231fea847e354e0b",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/a11y.json",
   "rows": 190,
   "rows_unit": "pages",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-04T10:00:54.195Z",
    "date_only": false,
    "published_at": "2026-11-04T10:01:40Z",
    "data_as_of": "2026-11-04T10:00:54Z",
    "target_hours": 48,
    "age_hours": 21.39,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T10:00:54Z",
   "frequency": "DAILY"
  },
  {
   "id": "lighthouse",
   "title": "Lighthouse scores",
   "description": "Lighthouse runs per page and form factor with thresholds and flags.",
   "kind": "operations",
   "workflow": "kolaboro-lighthouse.yml",
   "schedule": "daily 04:23 UTC",
   "interval_hours": 24,
   "keywords": [
    "performance",
    "Lighthouse"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 16049,
   "url": "https://kolaboro.com/data/lighthouse.json",
   "sha256": "549c40edf1b007044bf8c4d78d964d11c24d818f38cf461d9709bea5ee6c1816",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/lighthouse.json",
   "rows": 40,
   "rows_unit": "runs",
   "freshness": {
    "stamp_key": "generated",
    "stamp": "2026-11-04T12:27:45.602Z",
    "date_only": false,
    "published_at": "2026-11-04T12:28:34Z",
    "data_as_of": "2026-11-04T12:27:45Z",
    "target_hours": 48,
    "age_hours": 18.94,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T12:27:45Z",
   "frequency": "DAILY"
  },
  {
   "id": "qa",
   "title": "Site QA crawl",
   "description": "Daily crawl of every page and link with the checks that ran and any problems found.",
   "kind": "operations",
   "workflow": "kolaboro-qa.yml",
   "schedule": "daily 05:23 UTC",
   "interval_hours": 24,
   "keywords": [
    "QA",
    "links"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 2845,
   "url": "https://kolaboro.com/data/qa.json",
   "sha256": "778625bcd6b30b763d6d7d2a63668ef23ade713ccaa4c5ae1c3d83bf4ac18aa4",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/qa.json",
   "rows": 18,
   "rows_unit": "checks",
   "freshness": {
    "stamp_key": "date",
    "stamp": "2026-11-04T13:22:49.956Z",
    "date_only": false,
    "published_at": "2026-11-04T13:23:48Z",
    "data_as_of": "2026-11-04T13:22:49Z",
    "target_hours": 48,
    "age_hours": 18.02,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T13:22:49Z",
   "frequency": "DAILY"
  },
  {
   "id": "journeys",
   "title": "Synthetic user journeys",
   "description": "A scripted buyer journey run in a real browser every hour: pass or fail per step, timings and the latest screenshots (journeys/1.webp to 5.webp).",
   "kind": "operations",
   "workflow": "kolaboro-journeys.yml",
   "schedule": "hourly at minute 41",
   "interval_hours": 1,
   "keywords": [
    "monitoring",
    "synthetic"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 87414,
   "url": "https://kolaboro.com/data/journeys.json",
   "sha256": "6cafdcac128456048867cc6930618b153564d903c2cf1fe3971ab3439d9f7056",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "extra_files": [
    {
     "path": "journeys/1.webp",
     "url": "https://kolaboro.com/data/journeys/1.webp",
     "http": 200,
     "bytes": 15556,
     "sha256": "96800ab20d546f88ea88fde7a201e643b06605b10ac27439b6a6faba8bd5495a"
    },
    {
     "path": "journeys/2.webp",
     "url": "https://kolaboro.com/data/journeys/2.webp",
     "http": 200,
     "bytes": 13476,
     "sha256": "3ad1955b45255094408e058cb701e0e5591a16cc19b93d2ef36da59d2ac40c54"
    },
    {
     "path": "journeys/3.webp",
     "url": "https://kolaboro.com/data/journeys/3.webp",
     "http": 200,
     "bytes": 16070,
     "sha256": "a97ab3f55bff1fe87452efe295b5ea120b769f5a8f0d926f20faa2cc425571e0"
    },
    {
     "path": "journeys/4.webp",
     "url": "https://kolaboro.com/data/journeys/4.webp",
     "http": 200,
     "bytes": 16246,
     "sha256": "d5653f6cad82a4cfe773e9b103f6480038242f89e0e522bb08960ba545d659d1"
    },
    {
     "path": "journeys/5.webp",
     "url": "https://kolaboro.com/data/journeys/5.webp",
     "http": 200,
     "bytes": 10742,
     "sha256": "b91e09166a7c8ebd2f92f044af5df3be32319251d8a3b6c0498173d43ec21578"
    }
   ],
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/journeys.json",
   "rows": 6,
   "rows_unit": "runs",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-04T16:33:11.061Z",
    "date_only": false,
    "published_at": "2026-11-05T02:45:32Z",
    "data_as_of": "2026-11-04T16:33:11Z",
    "target_hours": 2,
    "age_hours": 14.85,
    "event_driven": false,
    "probe": true,
    "status": "late"
   },
   "last_updated": "2026-11-04T16:33:11Z",
   "frequency": "HOURLY"
  },
  {
   "id": "verifiers",
   "title": "Independent verifier run",
   "description": "Three independent implementations (JavaScript, Python, Go) check the test vectors and the live log, checkpoint, proofs and signatures.",
   "kind": "operations",
   "workflow": "kolaboro-verifiers.yml",
   "schedule": "daily 08:41 UTC",
   "interval_hours": 24,
   "keywords": [
    "verification",
    "transparency log"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 1955,
   "url": "https://kolaboro.com/data/verifiers.json",
   "sha256": "03d176069cfb20dd9e1e43eeffabab77d4a421e47e3825dd17dc6dfeaa29c952",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/verifiers.json",
   "rows": null,
   "rows_unit": null,
   "freshness": {
    "stamp_key": "date",
    "stamp": "2026-11-04T16:36:29Z",
    "date_only": false,
    "published_at": "2026-11-04T16:39:54Z",
    "data_as_of": "2026-11-04T16:36:29Z",
    "target_hours": 48,
    "age_hours": 14.79,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T16:36:29Z",
   "frequency": "DAILY"
  },
  {
   "id": "chaos",
   "title": "Chaos drills",
   "description": "Weekly fault-injection drills of the desk review (for example the primary AI reader down): what was forced, what was expected, what happened, and what is not covered.",
   "kind": "operations",
   "workflow": "kolaboro-chaos.yml",
   "schedule": "weekly, Wednesday 05:11 UTC",
   "interval_hours": 168,
   "keywords": [
    "reliability",
    "chaos"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 13451,
   "url": "https://kolaboro.com/data/chaos.json",
   "sha256": "1cd846ff32bcffc80cc6e43ae0846247594a91c1e71243e09ce30e4d0bddfec1",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/chaos.json",
   "rows": 3,
   "rows_unit": "runs",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-04T13:00:06Z",
    "date_only": false,
    "published_at": "2026-11-04T13:02:12Z",
    "data_as_of": "2026-11-04T13:00:06Z",
    "target_hours": 216,
    "age_hours": 18.4,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-04T13:00:06Z",
   "frequency": "WEEKLY"
  },
  {
   "id": "security-scan",
   "title": "Security scan",
   "description": "OWASP ZAP baseline passive scan of kolaboro.com: alerts by risk.",
   "kind": "operations",
   "workflow": "kolaboro-security-scan.yml",
   "schedule": "weekly, Tuesday 04:29 UTC",
   "interval_hours": 168,
   "keywords": [
    "security",
    "ZAP"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 3348,
   "url": "https://kolaboro.com/data/security-scan.json",
   "sha256": "d26d8c3f172c1775b3cd64a97f4ed6ff0b7caae3b3f71ca33adc0c22ba996e19",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/security-scan.json",
   "rows": 22,
   "rows_unit": "alerts",
   "freshness": {
    "stamp_key": "date",
    "stamp": "2026-11-03T09:58:33Z",
    "date_only": false,
    "published_at": "2026-11-03T09:59:09Z",
    "data_as_of": "2026-11-03T09:58:33Z",
    "target_hours": 216,
    "age_hours": 45.43,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-03T09:58:33Z",
   "frequency": "WEEKLY"
  },
  {
   "id": "restore",
   "title": "Backup restore drill",
   "description": "Weekly drill: the latest database backup is restored into a clean PostgreSQL and checked table by table, and evidence files are re-hashed.",
   "kind": "operations",
   "workflow": "kolaboro-restore.yml",
   "schedule": "weekly, Monday 03:17 UTC",
   "interval_hours": 168,
   "keywords": [
    "backup",
    "restore"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 1267,
   "url": "https://kolaboro.com/data/restore.json",
   "sha256": "0724349dbf25e6b89705b97a26a35ede865513721832f2cbd5e3323470466bb5",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/restore.json",
   "rows": 14,
   "rows_unit": "tables",
   "freshness": {
    "stamp_key": "drill_at",
    "stamp": "2026-11-03T09:12:58Z",
    "date_only": false,
    "published_at": "2026-11-03T09:13:33Z",
    "data_as_of": "2026-11-03T09:12:58Z",
    "target_hours": 216,
    "age_hours": 46.19,
    "event_driven": false,
    "probe": true,
    "status": "ok"
   },
   "last_updated": "2026-11-03T09:12:58Z",
   "frequency": "WEEKLY"
  },
  {
   "id": "deploys",
   "title": "Deploy guard record",
   "description": "Each deploy of the site: smoke checks after it went live, and any automatic rollback.",
   "kind": "operations",
   "workflow": "kolaboro-deploy-guard.yml",
   "schedule": "after each site deploy (event driven, checked every 30 minutes)",
   "interval_hours": null,
   "keywords": [
    "deploys",
    "rollback"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 31819,
   "url": "https://kolaboro.com/data/deploys.json",
   "sha256": "78dcebe780b708254ee54ef03f7a30a8ea35b162c62c2fa9a306a80e52bc7b6e",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/deploys.json",
   "rows": 80,
   "rows_unit": "deploys",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-04T15:15:27Z",
    "date_only": false,
    "published_at": "2026-11-05T07:22:32Z",
    "data_as_of": "2026-11-04T15:15:27Z",
    "target_hours": null,
    "age_hours": 16.14,
    "event_driven": true,
    "probe": true,
    "status": "no_target"
   },
   "last_updated": "2026-11-04T15:15:27Z",
   "frequency": "IRREG"
  },
  {
   "id": "site-manifest",
   "title": "Site manifest",
   "description": "SHA-256 of every file published on kolaboro.com outside /data/, computed from the git commit the live site was serving.",
   "kind": "operations",
   "workflow": "kolaboro-manifest.yml",
   "schedule": "checked every 30 minutes, written when the live commit changes",
   "interval_hours": null,
   "keywords": [
    "integrity",
    "manifest"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 231941,
   "url": "https://kolaboro.com/data/site-manifest.json",
   "sha256": "7fed1a82c315b1e4061f0a2c14938e5820759e20b8b47d7f30ddad825e0b8a1a",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/site-manifest.json",
   "rows": 2172,
   "rows_unit": "files",
   "freshness": {
    "stamp_key": "generated_at",
    "stamp": "2026-11-04T18:02:39Z",
    "date_only": false,
    "published_at": "2026-11-04T18:02:46Z",
    "data_as_of": "2026-11-04T18:02:39Z",
    "target_hours": null,
    "age_hours": 13.36,
    "event_driven": true,
    "probe": true,
    "status": "no_target"
   },
   "last_updated": "2026-11-04T18:02:39Z",
   "frequency": "IRREG"
  },
  {
   "id": "builds",
   "title": "Reproducible worker builds",
   "description": "Deterministic bundle of the site worker for each worker source tree that went live, built twice in clean folders; reproduced says whether both builds were identical.",
   "kind": "operations",
   "workflow": "kolaboro-manifest.yml",
   "schedule": "checked every 30 minutes, written when the worker changes",
   "interval_hours": null,
   "keywords": [
    "reproducible builds"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 3537,
   "url": "https://kolaboro.com/data/builds.json",
   "sha256": "f8b938604cae769560870c136f4bb3caebbeb139d32fc872d7c1cd700256c5f2",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/builds.json",
   "rows": 6,
   "rows_unit": "builds",
   "freshness": {
    "stamp_key": "updated",
    "stamp": "2026-11-04T18:02:45Z",
    "date_only": false,
    "published_at": "2026-11-04T23:44:52Z",
    "data_as_of": "2026-11-04T18:02:45Z",
    "target_hours": null,
    "age_hours": 13.36,
    "event_driven": true,
    "probe": true,
    "status": "no_target"
   },
   "last_updated": "2026-11-04T18:02:45Z",
   "frequency": "IRREG"
  },
  {
   "id": "property-tests",
   "title": "Property-based tests of the scoring rules",
   "description": "Property-based tests and fuzzing of the open scoring rules, counted by the test run itself.",
   "kind": "operations",
   "workflow": null,
   "schedule": "published when the open-source test suite is run",
   "interval_hours": null,
   "keywords": [
    "tests",
    "fuzzing"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 8684,
   "url": "https://kolaboro.com/data/property-tests.json",
   "sha256": "a0134d50aaf7d8d75daf71d2fb0dd21a6d60d2d32cb7f360cf2ac89d9d81091a",
   "http": 200,
   "media_type": "application/json",
   "format": "json",
   "contract": "pass",
   "schema_url": "https://kolaboro.com/api/x/data/schema/property-tests.json",
   "rows": 22,
   "rows_unit": "properties",
   "freshness": {
    "stamp_key": "generated",
    "stamp": "2026-11-03T21:03:30Z",
    "date_only": false,
    "published_at": "2026-11-03T21:04:56Z",
    "data_as_of": "2026-11-03T21:03:30Z",
    "target_hours": null,
    "age_hours": 34.34,
    "event_driven": false,
    "probe": true,
    "status": "no_target"
   },
   "last_updated": "2026-11-03T21:03:30Z",
   "frequency": "IRREG"
  },
  {
   "id": "shipping",
   "title": "Shipping log",
   "description": "Ships (commits by people, or by Claude working for one) and data updates per UTC day from the git history of the live branch, streaks, engineering metrics and day summaries written by an AI model and checked in code.",
   "kind": "operations",
   "workflow": "kolaboro-shipping.yml",
   "schedule": "hourly at minute 19",
   "interval_hours": 1,
   "keywords": [
    "changelog",
    "shipping"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 0,
   "url": "https://kolaboro.com/data/shipping.json",
   "sha256": null,
   "http": 404,
   "media_type": "application/json",
   "format": "json",
   "contract": "not_live",
   "schema_url": "https://kolaboro.com/api/x/data/schema/shipping.json",
   "rows": null,
   "rows_unit": "days",
   "freshness": {
    "stamp_key": null,
    "stamp": null,
    "date_only": null,
    "published_at": "2026-11-05T07:19:47Z",
    "data_as_of": "2026-11-05T07:19:47Z",
    "target_hours": 2,
    "age_hours": 0.07,
    "event_driven": false,
    "status": "ok"
   },
   "last_updated": "2026-11-05T07:19:47Z",
   "frequency": "HOURLY"
  },
  {
   "id": "roadmap-sync",
   "title": "Roadmap items verified live",
   "description": "Roadmap items that link to the live page delivering them. An item counts as shipped only when the page answers HTTP 200, its canonical link is that page and its HTML contains the marker text.",
   "kind": "operations",
   "workflow": "kolaboro-shipping.yml",
   "schedule": "hourly at minute 19 (shipping log job)",
   "interval_hours": 1,
   "keywords": [
    "roadmap"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 0,
   "url": "https://kolaboro.com/data/roadmap-sync.json",
   "sha256": null,
   "http": 404,
   "media_type": "application/json",
   "format": "json",
   "contract": "not_live",
   "schema_url": "https://kolaboro.com/api/x/data/schema/roadmap-sync.json",
   "rows": null,
   "rows_unit": "items",
   "freshness": {
    "stamp_key": null,
    "stamp": null,
    "date_only": null,
    "published_at": "2026-11-05T07:19:47Z",
    "data_as_of": "2026-11-05T07:19:47Z",
    "target_hours": 2,
    "age_hours": 0.07,
    "event_driven": false,
    "status": "ok"
   },
   "last_updated": "2026-11-05T07:19:47Z",
   "frequency": "HOURLY"
  },
  {
   "id": "page-weight",
   "title": "Page weight",
   "description": "Bytes transferred for one cold load of key pages (compressed size plus headers, measured in Chrome), first-party bytes split by resource type, against page-weight budgets.",
   "kind": "operations",
   "workflow": "kolaboro-quality.yml",
   "schedule": "daily 06:41 UTC",
   "interval_hours": 24,
   "keywords": [
    "performance",
    "page weight"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 0,
   "url": "https://kolaboro.com/data/page-weight.json",
   "sha256": null,
   "http": 404,
   "media_type": "application/json",
   "format": "json",
   "contract": "not_live",
   "schema_url": "https://kolaboro.com/api/x/data/schema/page-weight.json",
   "rows": null,
   "rows_unit": "page loads",
   "freshness": {
    "stamp_key": null,
    "stamp": null,
    "date_only": null,
    "published_at": "2026-11-05T07:24:07Z",
    "data_as_of": "2026-11-05T07:24:07Z",
    "target_hours": 48,
    "age_hours": -0.0,
    "event_driven": false,
    "status": "ok"
   },
   "last_updated": "2026-11-05T07:24:07Z",
   "frequency": "DAILY"
  },
  {
   "id": "visual-tests",
   "title": "Visual regression tests",
   "description": "Key pages captured in Chromium at 390 and 1440 px and compared pixel by pixel with the previous run, with the share of changed pixels per page.",
   "kind": "operations",
   "workflow": "kolaboro-quality.yml",
   "schedule": "daily 06:41 UTC",
   "interval_hours": 24,
   "keywords": [
    "visual regression",
    "testing"
   ],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": true,
   "bytes": 0,
   "url": "https://kolaboro.com/data/visual-tests.json",
   "sha256": null,
   "http": 404,
   "media_type": "application/json",
   "format": "json",
   "contract": "not_live",
   "schema_url": "https://kolaboro.com/api/x/data/schema/visual-tests.json",
   "rows": null,
   "rows_unit": "captures",
   "freshness": {
    "stamp_key": null,
    "stamp": null,
    "date_only": null,
    "published_at": "2026-11-05T07:24:07Z",
    "data_as_of": "2026-11-05T07:24:07Z",
    "target_hours": 48,
    "age_hours": -0.0,
    "event_driven": false,
    "status": "ok"
   },
   "last_updated": "2026-11-05T07:24:07Z",
   "frequency": "DAILY"
  },
  {
   "id": "undescribed-findings-by-project-json",
   "title": "findings-by-project.json",
   "description": "Published under /data/ but not yet described in the catalog registry.",
   "kind": "undescribed",
   "workflow": null,
   "schedule": "unknown",
   "interval_hours": null,
   "keywords": [],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": false,
   "bytes": 0,
   "url": "https://kolaboro.com/data/findings-by-project.json",
   "sha256": null,
   "http": 404,
   "media_type": "application/json",
   "format": "json",
   "contract": "not_live",
   "schema_url": null,
   "rows": null,
   "rows_unit": null,
   "freshness": {
    "stamp_key": null,
    "stamp": null,
    "date_only": null,
    "published_at": "2026-11-05T07:21:26Z",
    "data_as_of": "2026-11-05T07:21:26Z",
    "target_hours": null,
    "age_hours": 0.04,
    "event_driven": false,
    "status": "no_target"
   },
   "last_updated": "2026-11-05T07:21:26Z",
   "frequency": "IRREG"
  },
  {
   "id": "undescribed-live-findings-json",
   "title": "live-findings.json",
   "description": "Published under /data/ but not yet described in the catalog registry.",
   "kind": "undescribed",
   "workflow": null,
   "schedule": "unknown",
   "interval_hours": null,
   "keywords": [],
   "licence": "CC BY 4.0 (credit: Kolaboro, kolaboro.com)",
   "described": false,
   "bytes": 0,
   "url": "https://kolaboro.com/data/live-findings.json",
   "sha256": null,
   "http": 404,
   "media_type": "application/json",
   "format": "json",
   "contract": "not_live",
   "schema_url": null,
   "rows": null,
   "rows_unit": null,
   "freshness": {
    "stamp_key": null,
    "stamp": null,
    "date_only": null,
    "published_at": "2026-11-05T07:21:26Z",
    "data_as_of": "2026-11-05T07:21:26Z",
    "target_hours": null,
    "age_hours": 0.04,
    "event_driven": false,
    "status": "no_target"
   },
   "last_updated": "2026-11-05T07:21:26Z",
   "frequency": "IRREG"
  }
 ]
}
