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.
Read without starting a run
Section titled “Read without starting a run”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.
python3 scientific_chain.py --credentials ./application.json --url https://YOUR-WORKSPACE --project YOUR-PROJECTpython3 scientific_chain.py --credentials ./application.json --url https://YOUR-WORKSPACE --project YOUR-PROJECT \ --asset ASSET-ID --revision EXACT-REVISION --curve GR --output exact-readDiscovery 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.
Reuse a result
Section titled “Reuse a result”- The author publishes a bounded correction through a Workspace-configured input.
- In Data → Results, grant the colleague Can read and Can reuse in Python.
- The colleague opens the result in the catalogue and selects Use as Python input.
- They save their own exact input configuration and run the existing curve client locally with that binding. No intermediate upload is required.
- 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.
Offline example
Section titled “Offline example”You need Python 3.11 or later. No packages, server, credentials or account required.
- Download the synthetic demo ZIP.
- Extract it and open a terminal in
scientific-assets-demo. - Run:
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.jsonOpen 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.
What the contract preserves
Section titled “What the contract preserves”| 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.
Scientific scope
Section titled “Scientific scope”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.
Developer references and recovery
Section titled “Developer references and recovery”- Descriptor JSON Schema
- Curve JSON Schema
- Scientific read OpenAPI—the bounded M2 read routes.
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.
