Skip to content

Scientific assets and reusable results

Reviewed 24 September 2026. The bounded M2 pilot exposes source-backed curves, retained captures and managed derivatives through one scientific read contract. Published results become private catalogue assets; an explicitly authorized colleague can use one in another local Python calculation. Review remains optional.

Download the public reader and login helper into the same folder. Use Python 3.11+; only the standard library is needed. Authorize your own account using the browser login steps.

Terminal window
python3 scientific_chain.py --credentials ./application.json --url https://YOUR-WORKSPACE --project YOUR-PROJECT
python3 scientific_chain.py --credentials ./application.json --url https://YOUR-WORKSPACE --project YOUR-PROJECT \
--asset ASSET-ID --revision EXACT-REVISION --curve GR --output exact-read

Discovery prints only permitted assets. The second command checks both representation hashes and writes a descriptor, curve JSON and exact LAS to a new directory. No run is created. Choose a different output directory when repeating the read. Download the complete client/example bundle.

Machine route Meaning
GET /api/v1/projects/{project}/scientific-assets Summaries; limit1–100, default25, next_cursor pagination
GET .../{asset}/revisions/{revision}?curve=GR Exact per-curve descriptor; curve is required
GET .../representations/curve:GR?curve=GR Normalized JSON with exact byte hash/length
GET .../representations/artifact Curve-independent original or derived LAS bytes

URI-encode path/query components. Use a scoped bearer and, for browser-approved application access, its grant header. Machine routes reject cookies/Origin. Workspace uses separate CSRF-protected POST aliases to the same service. A descriptor does not grant rights; each read rechecks authorization. Missing/inaccessible revisions return 404; incompatible context422, integrity conflict409 and bounded capacity413. Errors use flat {"error":"message","code":"code"} objects. Artifact responses are capped at32MiB; normalized curves at100,000 samples. No range-read or streaming guarantee.

A LAS may contain several curves. Discovery lists observed curve names without parsing every payload. Descriptors describe current normalization and its reader; they do not fabricate historic parsing choices. An exact artifact can be exported independently. Restricted private parents are explicitly labelled and omitted.

  1. The author publishes a bounded correction through a Workspace-configured input.
  2. In Data → Results, grant the colleague Can read and Can reuse in Python.
  3. The colleague opens the result in the catalogue and selects Use as Python input.
  4. They save their own exact input configuration and run the existing curve client locally with that binding. No intermediate upload is required.
  5. Their result is another private asset; share it explicitly when needed.

The colleague also needs project membership and compute access. Read alone does not permit execution, and administration does not reveal private results. Each new calculation creates a separate asset; an identical retry returns the same publication. Revoking reuse blocks unresolved runs; already published descendants keep their own grants. Root distribution restrictions and withdrawal still apply throughout the chain. See the complete workflow.

You need Python 3.11 or later. No packages, server, credentials or account required.

  1. Download the synthetic demo ZIP.
  2. Extract it and open a terminal in scientific-assets-demo.
  3. Run:
Terminal window
python3 -I scientific_asset_example.py \
--descriptor fixtures/source.json \
--curve fixtures/curve.json \
--artifact fixtures/original.las \
--start 100 --stop 103 --offset 2 --output correction.json

Open correction.json. Expected values: [2, 12, null, 32, 40]. The real zero at depth 100 becomes 2. Depth 102 remains missing; depth 104 is unchanged. The file contains proposed {index,value} changes and verified input digests, not a publication receipt. All data in this download are synthetic, not observed wells.

Try --offset -999.25 with a new output filename: the example must reject a result that collides with the LAS missing-value marker. It never overwrites an existing file.

Field Meaning
Asset ID and revision Stable data-product identity and exact immutable content/context version
Authority and custodian Who is authoritative versus who retains bytes
Scientific profile The qualified interpretation; not inferred compatibility with every application
Representation Original artifact or normalized curve, exact length/digest and declared losses
Source/parents and reader policy Exact provenance plus parsing and mapping choices
Retention Whether history depends on the upstream or retained authorized bytes
Authorization Offline fixtures are not evaluated; capabilities grant no access

Try capture.json with the same curve and original artifact: the values and source authority agree; managed custody differs. derived.json instead uses derived-curve.json and derived.las, with managed authority and an exact parent. These are illustrative descriptors, not proof of live publication or sharing.

The offline example publishes nothing. The separately qualified live workflow creates a managed asset and receipt; the fixtures do not grant access.

The existing normalized shape is ophiolite.application-curve/1, backed by las2/1. Depth coordinates and units remain as supplied. Finite decreasing or duplicate depth coordinates are preserved in source row order. Empty units remain unknown. No MD/TVD, datum, well identity, unit conversion or resampling is inferred.

JSON null is missing; 0 is a valid value. Original LAS retains its declared NULL marker. Parameters use source coordinate/value units. At most 100,000 samples and 1,000 changes are supported. The example rejects nonfinite numbers and marker collisions. Stronger application requirements, including native-host import, need separate checks. Exact inputs and a declared method provide traceability, not proof of a scientifically correct or computationally reproducible calculation.

The standalone script verifies consumed fields and hashes; the Platform conformance suite additionally validates origin/custody, permissions, paired samples, observed axis facts and descriptor/representation consistency. This is a versioned pilot contract, not a stable general SDK. Breaking meaning or authorization changes require a new version and a documented transition release; cached permissions never authorize future reads.

A digest error means the descriptor and bytes do not match: restore the matching fixture set. An existing-output error means choose a new filename. An unsupported schema or incompatible context requires a qualified representation, not editing values or checksums to bypass the error. There are no upstream credentials in this example, and no network access occurs.