diff --git a/assets/haps-progress/demo-architecture.svg b/assets/haps-progress/demo-architecture.svg new file mode 100644 index 0000000..25525d3 --- /dev/null +++ b/assets/haps-progress/demo-architecture.svg @@ -0,0 +1,3 @@ + + +
SCIENCE RECORD / authored and reviewed before execution
LIGHTCONE / resolve once, provider-neutral
LIGHTCONE-HAPS / pure compile, gated lifecycle
HAPS PLATFORM / (team's aqmo.org server) national centres
FROZEN EVIDENCE 
request-id addressed
astra.yaml
4 decisions: compute_centre · seed · nth · nstep
where it runs is recorded science
universes/quick.yaml
one choice per decision
data/ym1.in
input bytes + sha256
execution/haps-binding.yaml
declarative mapping owned by the case:
app selector · option→argument · outputs · capacities+provenance
ALL app-specific values live here — zero in code
astra validate
schema + semantics
lc resolve --universe quick
.lightcone/resolved-task.json
content-addressed task_sha256
no backend concept inside
compile_to_snakemake
local / Dask / Slurm (existing route)
lc-haps compile (pure)
no network · no credentials · fail-loud
haps-job-intent.json
request_id = sha256(content)
7696f130… / d579aa96…
lc-haps prepare (read-only)
exactly one live catalog match
GATE
ARM literal + --confirm-request-id
you confirm bytes, not a name
lc-haps submit
state persisted BEFORE polling → resumable
wait → fetch (atomic) → verify
hashes + capacities recomputed
verdict
"locally verified,
remotely unattested"
seb driver (SLURM ephemeral buffer)
scheduler-template lifecycle in the adapter
implemented, stashed (not finished)
ebservice — application catalog + job lifecycle API
MIME selects the approved centre-specific runtime:
application/x-openqcd-ym1-{idris|cines|tgcc}
ebuffer — ephemeral buffers
ebin (input) · 4 ebouts (sized+justified)
seb — status buffer, tags
template::slurm + job::UUID
required by IDRIS openqcd runtime
undocumented — found 2026-07-31, 00:06
runtime (maintainer-operated, user-space)
claims by MIME · generates sbatch from per-centre profile
Jean Zay (IDRIS)
job aa26bc0d COMPLETED 271 s
seed 73099 visible in returned log
compute receipt
runtime-written proof of what ran
MISSING on every deployed runtime
haps-mcp — optional agent-facing protocol adapter
calls the same HAPS catalog and job APIs
not between Lightcone and lightcone-haps;
does not resolve ASTRA or own durable lifecycle state
evidence/uppercase/d579aa96…
job c04b4ba6 — COMPLETED ~12 s
fetched, hash-verified
evidence/openqcd/7696f130…
job fafc1715 — FAILED 11 s, preserved
one of 8 — now explained: no seb
openqcd-live-aa26bc0d/
the 271 s success log + 4 outputs + sha256
via seb repro script — outside the adapter, said openly
Diagnosis method
preserved failures + one healthy reference
+ one variable at a time = cause found
2 AIs + 1 human missed it 2 days: contract
lived only in runtime source, failure silent
Legend
green record · blue Lightcone · orange adapter · purple platform
yellow frozen evidence · red dashed = missing piece · gray dashed = optional MCP client
validated
hashed into
writes
existing backend
peer backend
mapping
armed only
stage input
submit (string args)
claim by MIME
read ebin / write ebouts
slurm template channel
sbatch
fetch outputs
optional catalog/job API client
will create
Text is not SVG - cannot display
\ No newline at end of file diff --git a/assets/haps-progress/historical-haps-mcp-map.png b/assets/haps-progress/historical-haps-mcp-map.png new file mode 100644 index 0000000..bc91493 Binary files /dev/null and b/assets/haps-progress/historical-haps-mcp-map.png differ diff --git a/assets/haps-progress/hpc-application-as-a-service.png b/assets/haps-progress/hpc-application-as-a-service.png new file mode 100644 index 0000000..b7c1f7f Binary files /dev/null and b/assets/haps-progress/hpc-application-as-a-service.png differ diff --git a/astra-haps-progress.html b/astra-haps-progress.html new file mode 100644 index 0000000..f72de9a --- /dev/null +++ b/astra-haps-progress.html @@ -0,0 +1,7745 @@ + + + + + + + From intent to evidence — ASTRA × Lightcone × HAPS + + + + + + + + + + + + +
+
+ + + Progress dossier + + + snapshot · 2026-07-31 +
+
+ +
+
+
+
+

ASTRA × Lightcone × HAPS

+

From intent to evidence

+

+ We turned a scientific record into a deterministic remote-execution + sequence where every boundary has an owner and emits something + inspectable. The experimental lightcone-haps backend + can carry the same resolved task to another HAPS-enabled trust + domain when a matching, approved application is deployed there; + MCP is an optional agent-facing interface, not the execution design. + A fresh + OpenQCD run reproducing the scheduler-template/SEB wire contract + completed on Jean Zay in 271 seconds and returned four locally + hashed outputs. + A scheduler-driver/MCP candidate passed focused offline tests, then + the backend and case bindings were restored to preserve the frozen + demo request IDs. The current combined checkout is therefore + intentionally not yet an integrated scheduler path. +

+ one scientific boundary · reusable HAPS backend · optional MCP · live scheduler-contract proof +
+ +
+ +
+ 01 · declared + ASTRA universe + decisions + inputs + rationale +
+
+ 02 · resolved + ResolvedTask + provider-neutral + hashed +
+
+ 03 · observed + HAPS evidence + job + bytes + honest verdict +
+
+
+
+ +
+
+ 3 + declarative cases + OpenQCD · Uppercase · Docling
execution mode is data, not a case branch
+
+
+ 2 + live execution modes + Uppercase direct · OpenQCD scheduler wire
both crossed real HAPS boundaries
+
+
+ 3 + repos in the integration patch + lightcone-haps · haps-mcp · showcase
request IDs restored; cross-repo scheduler gate is red
+
+
+ 0 + deployed compute receipts + local hashes verify bytes
remote attestation remains missing
+
+
+ +
+
+
+ 00 · Complete architecture +

Responsibilities, artefacts and remote execution.

+
+

+ This is the complete demo path, not only the intent and job objects. + It shows who authors scientific choices, who resolves + them, where the project-specific HAPS mapping lives, which component + owns remote lifecycle state, how a runtime reaches a centre scheduler, + and which evidence is returned or still missing. +

+
+ +
+
+
+ One architecture · two synchronized surfaces +

General explanation here; real operator actions in the notebook.

+
+

+ This page remains the provider-independent architecture and evidence + narrative. The notebook is its executable companion: it discovers the + workspace, calls the real CLIs, keeps network preflight read-only and + requires an explicit request-ID gate before remote mutation. The + step-by-step panel below links each general boundary to its notebook cue. +

+
+
+
+ Presentation surface · generalized +

Responsibilities, contracts, eligible backends and evidence gaps

+

+ Use the HTML to explain why ASTRA resolution, the project binding, + the durable lifecycle and optional MCP façade remain separate. No + case-specific notebook control flow defines this architecture. +

+ follow the ten architecture boundaries ↓ +
+
+ Operator surface · executable +

astra-lightcone-haps.ipynb

+

+ Use the notebook backstage to inspect concrete files, run Uppercase + or OpenQCD through the same generic lifecycle and show fail-loud + network behavior. It is an audit console, not a second execution engine. +

+ open operator notebook ↗ + read notebook roles ↗ +
+
+
+ astra validate + lc resolve + lc-haps compile + lc-haps prepare + gated submit + status / wait + fetch + verify + report +
+
+ Identity rule +

+ Active .lightcone/ artefacts describe the current notebook + preparation; evidence/ directories preserve earlier runs. + Their request IDs are expected to differ when any resolved byte or + binding changes. The page never substitutes one identity for the other: + the preserved Uppercase record contains a 46-byte input, while the + current project input is 52 bytes and is rehashed before execution. +

+
+
+ +
+
+ upper cone · scientific variation + Many authored choices +

ASTRA decisions, one universe and verified input bytes are resolved before any execution provider is selected.

+
+
+ centre · stable contract + One ResolvedTask +

The provider-neutral, content-addressed record is the stable input contract shared by every execution compiler.

+
+
+ lower cone · execution and evidence + Several eligible resources +

A declarative binding selects a catalog contract; the engine returns durable state, files, hashes and explicit gaps.

+
+
+ +
+
+
+ frozen demo snapshot · 31 July 2026 +
+ +
+
+ + Complete ASTRA, Lightcone, lightcone-haps and HAPS architecture, including authored files, generated contracts, execution APIs, scheduler adaptation and preserved evidence + +
+
+ Reading status + + The Lightcone hourglass is a functional reading aid: scientific + alternatives converge on one ResolvedTask, then expand + into declared execution modes, eligible resources and evidence. + Solid colored areas are implemented or recorded responsibilities. + Red dashed elements identify missing integration or provenance. + The gray dashed MCP path is optional and accesses the same HAPS APIs; + it does not replace ASTRA resolution, the binding or the persisted engine. + The frozen SVG is deliberately de-emphasized at rest; hover or focus + it for a moderately stronger inspection view. + On narrow screens, scroll the diagram horizontally or open the SVG. + +
+
+ +
+
+
+ HTML overview · every functional Draw.io component represented +

Complete execution architecture

+
+

+ Select a component to reach its concrete example below. Uppercase + provides the complete persisted direct-execution record. OpenQCD is + introduced only where scheduler execution changes the contract. +

+
+
    +
  • implemented contract
  • +
  • recorded execution evidence
  • +
  • candidate or incomplete integration
  • +
  • missing deployed guarantee
  • +
+ +
+
+
+
+ 01 · Science record + authored and reviewed before execution +
+ + + validation boundary + astra validate + schema, semantics and narrative checks before resolution + +
+ +
validated record + hashed input
+ +
+
+ 02 · Lightcone + resolve once; no provider concept in the task +
+ +
+ +
ResolvedTask + explicit HAPS binding
+ +
+
+ 03 · lightcone-haps + pure compilation followed by an explicit, persisted lifecycle +
+ + +
+ +
job request + ebin / returned ebouts + state
+ +
+
+ 04 · HAPS platform and compute resource + catalog, lifecycle API, transport buffers and maintainer runtime +
+ + +
+
+ + +
+
+ +
+
+
+ Concrete walkthrough +

Inspect each boundary and its emitted artefact.

+
+

+ Every visible excerpt below is either verbatim from the linked file + or explicitly labelled as a projection joining unchanged recorded + values. No endpoint, credential or private profile value is embedded. +

+
+ +
+ + +
+
+
+ 01 · scientific record + real authored files +
+
+
+ owner · ASTRA project +

Declare the input and expected output before execution.

+
+

+ The Uppercase case is deliberately small: one input, one + declared output and no decisions. The preserved completed run + used 46 bytes; the active notebook rehashes the current file + rather than reusing that historical value. It proves the transport + and verification sequence without pretending to be a scientific result. +

+
+
+
receives
authored YAML + input bytes
+
operation
astra validate
+
emits
validated ASTRA model
+
excludes
endpoints, tokens, job IDs
+
+
+
+
Technology under the hood
+

+ ASTRA owns scientific structure and semantics. Lightcone + receives this validated record later; neither HAPS nor MCP + interprets the project independently. +

+
    +
  • source_message resolves to data/message.txt.
  • +
  • uppercase_message explicitly declares its input dependency.
  • +
  • The universe is a separate file, even when its decision map is empty.
  • +
+ +
+
+
verbatim excerptcases/uppercase/astra.yaml
+
inputs:
+  - id: source_message
+    type: data
+    source: data/message.txt
+
+outputs:
+  - id: uppercase_message
+    type: data
+    inputs: [source_message]
+

Exact excerpt. The recipe remains in the complete linked file.

+
+
+
+ +
+
+ 02 · deterministic resolution + implemented +
+
+
+ owner · Lightcone +

Resolve one universe into one content-addressed task.

+
+

+ ResolvedTask records what must run: selected + decisions, input hashes, output path and recipe. It contains + no HAPS application, buffer or credential concept. +

+
+
+
receives
ASTRA + quick universe
+
operation
lc resolve
+
emits
resolved-task.json
+
peer output
Snakemake compilation
+
+
+
+
Technology under the hood
+

+ Lightcone hashes the ASTRA record, universe and input bytes. + The same task can be consumed by the existing Snakemake + compiler or by the external HAPS compiler. +

+
    +
  • task_id is stable for this output and universe.
  • +
  • task_sha256 covers the resolved material.
  • +
  • The 46-byte input has its own independent SHA-256.
  • +
+ +
+
+
verbatim fieldsevidence/uppercase/resolved-task.json
+
"task_id": "uppercase_message@quick",
+"inputs": [{
+  "bytes": 46,
+  "id": "source_message",
+  "logical_path": "data/message.txt",
+  "sha256": "8193306ae5f2…"
+}],
+"output": {"id": "uppercase_message"},
+"task_sha256": "730c477e2cae…"
+

Exact values. Long digests are visually abbreviated; the linked JSON contains every byte.

+
+
+
+ +
+
+ 03 · execution mapping + baseline preserved +
+
+
+ owner · scientific project +

Map stable ASTRA IDs to a HAPS catalog contract.

+
+

+ The binding contains application-specific knowledge that must + remain reviewable data: MIME selector, ordered interface, + output capacity and receipt policy. Generic adapter code does + not branch on the case name. +

+
+
+
receives
ASTRA identifiers
+
operation
strict declarative mapping
+
emits
compiler configuration
+
excludes
endpoint and credential
+
+
+
+
Technology under the hood
+

+ The restored experimental schema preserves the frozen demo + request IDs. It does not yet declare the direct versus + scheduler driver; that requires a versioned migration. +

+
    +
  • Uppercase uses the fixed MIME application/x-uppercase.
  • +
  • Remote input name out maps to ASTRA input source_message.
  • +
  • The 1 MiB capacity has an explicit historical justification.
  • +
+ +
+
+
verbatim excerptexecution/haps-binding.yaml
+
binding_id: uppercase-aqmo
+target:
+  output: uppercase_message
+application:
+  selector:
+    fixed:
+      mime_type: application/x-uppercase
+  expected_interface:
+    arguments: []
+    inputs: [out]
+    outputs: [uppercase_message]
+

Exact excerpt. Capacity and receipt policies continue in the linked file.

+
+
+
+ +
+
+ 04 · pure compilation + implemented baseline +
+
+
+ owner · lightcone-haps compiler +

Compile the task and binding before network access.

+
+

+ compile_to_haps() verifies identifiers and input + hashes, maps interface names and canonicalizes the complete + request. The resulting request ID is what the operator confirms. +

+
+
+
receives
ResolvedTask + binding
+
operation
compile_to_haps()
+
emits
HapsJobIntent
+
network
none
+
+
+
+
Technology under the hood
+

+ Compilation is deterministic and fail-loud. It cannot read + credentials or query a catalog. Changing a mapped field + changes the canonical content and therefore the request ID. +

+
    +
  • The intent carries ASTRA, universe, task and binding digests.
  • +
  • Input bytes and expected outputs remain named and ordered.
  • +
  • The request ID is independent of a transient remote job ID.
  • +
+ +
+
+
verbatim fieldshaps-job-intent.json
+
"application": {
+  "mime_type": "application/x-uppercase"
+},
+"inputs": {"out": {
+  "bytes": 46,
+  "from_input": "source_message",
+  "sha256": "8193306ae5f2…"
+}},
+"request_id":
+  "sha256:d579aa960971d324…"
+

Exact values. Digests are visually abbreviated only in this card.

+
+
+
+ +
+
+ 05 · read-only preflight + recorded catalog match +
+
+
+ owner · lightcone-haps engine +

Match exactly one live application before mutation.

+
+

+ Preparation queries the HAPS catalog and compares the complete + ordered interface. Submission remains impossible until the + operator supplies the exact compiled request ID. +

+
+
+
receives
immutable intent
+
operation
read-only catalog match
+
emits
catalog snapshot + prepared request
+
mutation gate
exact request confirmation
+
+
+
+
Technology under the hood
+

+ The MIME selector finds one application, then its argument, + input and output names must exactly match the binding. + Ambiguity or drift fails before an ebuffer is created. +

+
    +
  • Selected application: uppercase.
  • +
  • Application UUID: 13e2e8f6-8091-461c-b4c4-aacb533d0ac6.
  • +
  • Private profile path and credentials are not reproduced here.
  • +
+ +
+
+
verbatim prepared requestprepared-haps-request.json
+
"application_id":
+  "13e2e8f6-8091-461c-b4c4-aacb533d0ac6",
+"interface": {
+  "arguments": [],
+  "inputs": ["out"],
+  "outputs": ["uppercase_message"]
+},
+"mime_type": "application/x-uppercase",
+"request_id":
+  "sha256:d579aa960971…"
+

Exact values. The confirmation gate compares against the full unabridged request ID.

+
+
+
+ +
+
+ 06 · remote mutation + recorded completed job +
+
+
+ owner · HapsEngine +

Persist every remote handle before observation.

+
+

+ Staging creates the input buffer, submission creates the output + buffer and remote job, and the engine records the association. + A later notebook or agent can resume using the same job ID. +

+
+
+
receives
prepared intent + project root
+
operation
stage + submit once
+
emits
receipts + durable state
+
known gap
server idempotency unsupported
+
+
+
+
Technology under the hood
+

+ Local state protects ordinary reruns, but the HAPS server + does not yet accept a request key. The engine therefore + records the submit/write ambiguity instead of claiming + exactly-once semantics. +

+
    +
  • Input ebuffer: 4101ca7f-b788-49f3-ab7c-982fb12bcbdc.
  • +
  • Remote job: c04b4ba6-edb6-434e-8040-14d9145d5799.
  • +
  • Observed final status: completed.
  • +
+ +
+
+
verbatim state fieldsremote-run-state.json
+
"idempotency": {
+  "scope": "local-state-only",
+  "server_request_key_supported": false,
+  "submit_write_gap": true
+},
+"job_id":
+  "c04b4ba6-edb6-434e-8040-14d9145d5799",
+"phase": "fetched",
+"remote_status": "completed"
+

Exact excerpt. The gap is recorded rather than hidden behind a success badge.

+
+
+
+ +
+
+ 07 · HAPS execution services + real deployed route +
+
+
+ owner · HAPS service and runtime maintainers +

Separate catalog identity, job identity and transport handles.

+
+

+ ebservice owns application discovery and job + lifecycle. ebuffer moves ephemeral bytes. A + maintainer runtime claims the MIME contract and executes the application. +

+
+
+
catalog key
application/x-uppercase
+
transport
ebin + ebout UUIDs
+
execution
maintainer runtime
+
network model
outbound polling/runtime calls
+
+
+
+
Technology under the hood
+

+ These identifiers are related but not interchangeable. The + request ID names immutable intent, the application ID names + a catalog entry, the job ID names one remote execution and + buffer IDs name ephemeral transport objects. +

+
    +
  • No inbound compute-node port is required by this execution model.
  • +
  • Buffer UUIDs are not durable dataset identifiers.
  • +
  • Runtime admission, network route and token policy remain deployment work.
  • +
+ +
+
+
exact-value projectionjoined from three recorded JSON files
+
catalog.mime       = application/x-uppercase
+catalog.application  = 13e2e8f6-8091-461c-b4c4-aacb533d0ac6
+transport.ebin.out   = 4101ca7f-b788-49f3-ab7c-982fb12bcbdc
+execution.job        = c04b4ba6-edb6-434e-8040-14d9145d5799
+transport.ebout     = d30e26ea-e4cc-4909-8b13-e64ab7c791aa
+execution.status     = completed
+

Projection, not a new file. Every value is copied unchanged from the linked catalog, staging and submission records.

+
+
+
+ +
+
+ 08 · scheduler-specific execution + recorded wire success · backend incomplete +
+
+
+ owners · case binding, HAPS runtime, facility scheduler +

OpenQCD requires a declared scheduler-template lifecycle.

+
+

+ OpenQCD is not submitted like Uppercase. The successful IDRIS + route created a scheduler-event buffer tagged + template::slurm and associated it with the job. + Bare generic submissions failed quickly and are preserved. +

+
+
+
scientific choice
compute_centre: idris
+
scheduler channel
SEB + template::slurm
+
recorded result
aa26bc0d · 271 s
+
missing integration
declared driver in lc-haps
+
+
+
+
Technology under the hood
+

+ The centre, seed and trajectory parameters are still ASTRA + decisions. The HAPS binding maps those values to MIME and + wire arguments. The execution driver must be selected from + a versioned capability, never from an if openqcd branch. +

+
+
observed tagstemplate::slurm
job::UUID

The runtime used the SEB to obtain scheduler state.

+
returned proofseed 73099
nstep 4 · nth 2

Values are visible in the downloaded OpenQCD log.

+
+ +
+
+
verbatim excerptcases/openqcd/universes/quick.yaml
+
id: quick
+description: "Low-cost pipeline validation; not a physics-quality run"
+decisions:
+  compute_centre: idris
+  seed: s73099
+  nth: nth2
+  nstep: nstep4
+

Truth boundary. The 271-second run used the separate manual SEB reproducer, not a completed scheduler driver inside the restored adapter.

+
+
+
+ +
+
+ 09 · returned files + bytes verified · compute unattested +
+
+
+ owner · lightcone-haps publication and verification +

Fetch atomically and report two independent verdicts.

+
+

+ The client recomputed the hash of the fetched Uppercase file. + That verifies the returned bytes against the fetch record; it + does not prove which executable, host or scheduler allocation produced them. +

+
+
+
receives
completed job + ebout
+
operation
stage, hash, atomic publish
+
local verdict
fetched hashes verified
+
remote verdict
compute receipt missing
+
+
+
+
Technology under the hood
+

+ A fetch receipt records file path, byte count and SHA-256. + Verification composes the available evidence and reports the + absent runtime receipt explicitly instead of promoting local + integrity into remote attestation. +

+
    +
  • Fetched file size: 46 bytes.
  • +
  • Fetched SHA-256: c105cf73105e7ec7….
  • +
  • Verdict: ok_with_missing_compute_receipt.
  • +
+ +
+
+
two verbatim excerptsfetch receipt + verification
+
"files": {"uppercase_message": {
+  "bytes": 46,
+  "relative_path": "uppercase_message",
+  "sha256": "c105cf73105e…"
+}}
+
+"compute_receipt": "missing",
+"fetched_file_hashes": "verified",
+"verdict": "ok_with_missing_compute_receipt"
+

Exact fields. The two source files remain separate; they are juxtaposed here for comparison.

+
+
+
+ +
+
+ 10 · durable evidence and clients + recorded evidence · façade integration open +
+
+
+ owners · evidence repository and optional client adapters +

Preserve the record independently from the client session.

+
+

+ Evidence directories are addressed by immutable request IDs. + MCP may expose the same lifecycle to an agent, but it does not + resolve ASTRA, compile the binding or become the durable job store. +

+
+
+
durable record
request-addressed evidence tree
+
optional client
five MCP intent tools
+
engine owner
lightcone-haps
+
remaining return gap
ASTRA-linked sidecar
+
+
+
+
Technology under the hood
+

+ The MCP functions are a transport façade over the shared + intent lifecycle. In the current combined checkout, the + candidate façade expects a backend factory removed when the + frozen request-ID baseline was restored; integration remains open. +

+
    +
  • Uppercase evidence contains the complete direct lifecycle.
  • +
  • OpenQCD generic-route failure evidence remains immutable.
  • +
  • The separate scheduler success directory remains qualified evidence.
  • +
  • Transient status must return through a sidecar, not rewrite astra.yaml.
  • +
+ +
+
+
source-signature projectionhaps-mcp/server.py
+
prepare_intent(intent_path)
+submit_intent(
+  intent_path,
+  project_root,
+  confirm_request_id,
+)
+intent_status(intent_path)
+wait_intent(intent_path)
+fetch_intent(intent_path, project_root)
+

Projection. Names and parameters follow the linked source; decorators, annotations and bodies are omitted.

+
+
+
+
+
+
+
+ +
+
+
+ 01 · Execution contracts +

One scientific resolution, multiple execution compilers.

+
+
+

+ Lightcone resolves ASTRA once. Its existing Snakemake path and the + experimental HAPS compiler consume the same task. MCP is useful, + but it is a parallel agent-facing interface—not a mandatory internal hop. +

+
    +
  • real record
  • +
  • implemented
  • +
  • partial
  • +
  • recorded run
  • +
  • design fixture
  • +
  • missing
  • +
+
+
+ +
+
+ 01 +

ASTRA record

+

Scientific output, inputs, decisions, universes and rationale.

+ real source +
+
+ 02 +

ResolvedTask

+

One concrete output for one universe, with content hashes and paths.

+ implemented +
+
+ 03 +

HAPS binding

+

Reviewable ASTRA-to-catalog mapping; the restored demo binding does not yet declare the scheduler driver.

+ baseline preserved · backend interface open +
+
+ 04 +

HapsJobIntent

+

Pure compilation preserves the frozen request identity; the rejected candidate showed that adding a driver changes the hash.

+ baseline real · driver migration open +
+
+ 05 +

Persisted engine

+

The restored engine owns the direct lifecycle; the tested scheduler client factory is no longer present in the backend checkout.

+ direct baseline · scheduler missing +
+
+ 06 +

HAPS / HPC

+

Uppercase direct and the OpenQCD scheduler wire contract are live; the latter completed in 271 s with four outputs.

+ live modes separated +
+
+ 07 +

Return sidecar

+

Compute receipt, split Lightcone/HAPS verdict and ASTRA-linked lifecycle.

+ not implemented +
+
+ +
+
+ Optional haps-mcp façade +

+ Worktree tools prepare_intent, + submit_intent, intent_status, + wait_intent and fetch_intent accept the + same immutable intent file and are filesystem-scoped by + administrator-owned allowed roots. They are currently a candidate, + not a green cross-repository integration. +

+
+ +
+ The same lightcone-haps engine +

+ The façade is designed to delegate to HapsEngine and + client_for_intent. The restored backend no longer + contains that client factory, so the current MCP worktree fails + loudly rather than silently growing a second scheduler engine. +

+
+
+ +
+

+ MCP is how an agent asks. The binding is what this project means. + lightcone-haps is how Lightcone executes it. +

+
+
+ science owner · generic code +

Lightcone

+

+ Validates the ASTRA project, selects a universe and freezes one + provider-neutral task. It owns decisions, paths and scientific + resolution—not HAPS wire mechanics. +

+ ASTRA + universe → ResolvedTask + +
+
+ mapping owner · project data +

HAPS binding

+

+ Maps stable task, option, input and output IDs to one published + catalog contract. It is deliberately case-specific, versioned + and reviewable; adding a case changes YAML, not adapter code. +

+ ResolvedTask IDs ↔ catalog interface + +
+
+ execution owner · reusable code +

lightcone-haps

+

+ Purely compiles task plus binding into an intent, preflights the + live catalog, dispatches the declared driver, persists lifecycle + state, fetches outputs and verifies what it can prove. +

+ intent → prepare → submit → observe → fetch + +
+
+ interface owner · optional protocol +

haps-mcp

+

+ Makes the same lifecycle callable by an agent or an MCP-only + client. It delegates to the backend; it does not interpret + ASTRA, invent mappings or become a second scheduler engine. +

+ agent tool call → the same HapsEngine + +
+
+
+
+ architecture decision · MCP has a precise place +

We can use MCP—and now do—but MCP cannot be the execution architecture itself.

+
+ +
+
+

+ MCP only defines how a client calls tools. It does not + provide: +

+
    +
  • ASTRA universe resolution;
  • +
  • the project-specific ASTRA → HAPS mapping;
  • +
  • deterministic intent generation and hashing;
  • +
  • direct versus template::slurm selection;
  • +
  • durable job state, restart/resume and idempotency;
  • +
  • result placement and verification.
  • +
+

+ Those responsibilities belong to the + HAPS binding and + lightcone-haps. +

+
+ +
+
+ deterministic execution core +
ASTRA → Lightcone → ResolvedTask
+                     + HAPS binding
+                     ↓
+                lightcone-haps
+                     ↓
+                    HAPS
+
+
+ optional agent entrance +
Agent → haps-mcp → the same lightcone-haps engine
+
+
+
+ +
+

Why not make MCP mandatory?

+
    +
  1. MCP does not execute jobs—the code behind its tools does.
  2. +
  3. CLI, notebooks, Galaxy and workflow engines should not need an MCP session.
  4. +
  5. Long HPC jobs must survive the agent or MCP connection disappearing.
  6. +
  7. Putting mapping logic in MCP would create a second, potentially hardcoded execution engine.
  8. +
  9. OpenQCD’s scheduler protocol must be selected from the binding/catalog, not from a tool called run_openqcd.
  10. +
  11. MCP introduces additional filesystem, credential and authorization risks.
  12. +
+
+ +
+ We could not use MCP instead of the binding and + lightcone-haps.
+ We can use MCP in front of + lightcone-haps. +
+
+
+ +
+
+ the frozen boundary between deciding and executing +

.lightcone/resolved-task.json

+

+ A persisted, content-addressed file—not a Python object shared by + private imports. Scientific choices are settled above it; provider + mechanics begin below it. +

+ +
+
+
+ current path +

Snakemake / Dask

+

The existing local and shared-cluster backend remains unchanged.

+ +
+
+ experimental path +

HAPS / remote HPC

+

A peer compiler crosses identity, storage and scheduler boundaries through explicit artefacts.

+ +
+
+ proposed peer +

Argo / Kubernetes

+

The JupyterHub use case can compile the same task without becoming a Lightcone special case.

+
+ missing: compile_to_argo +
+
+
+

+ A shared JupyterHub cluster has one filesystem and one administrative + identity. The execution boundary becomes necessary when the next machine is Jean + Zay, NERSC or a remote GPU box with neither. +

+
+ +
+
+ 01 · application catalog +

Define the application interface

+

+ Name, MIME selector, ordered arguments, named inputs and named + outputs describe one atomic callable application. +

+ mime · arguments[] · ebin[] · ebout[] + +
+
+ 02 · ebservice +

Create and track the job

+

+ A job binds one application to input/output buffer handles. The + service owns remote job identity and coarse lifecycle state. +

+ job UUID · pending → running → terminal + +
+
+ 03 · ebuffer +

Stage transient input and output data

+

+ Ephemeral buffers stage input bytes, status and results. Their UUIDs + are transport handles—not durable dataset identifiers. +

+ ebin → runtime → ebout + +
+
+ 04 · runtime + HPC +

Select the deployed runtime by MIME

+

+ A runtime polls for a capability it serves, submits or executes the + application, then fills outputs. Scheduler-backed applications add + a declared template lifecycle; no inbound compute-node port is required. +

+ application/x-openqcd-ym1-idris + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Two HAPS execution modes—not one hardcoded exception
Application classDeclared capabilityCorrect client lifecycleCurrent evidence
Echo / UppercaseGeneric microservicesubmit_job(ebin, ebout, arguments)Uppercase completed and fetched on AQMO.
OpenQCD → IDRIStemplate::slurmset_inputs → submit → monitoring → download_data through ClientSchedulerTemplateA manual wire-compatible reproducer produced job aa26bc0d… in 271 s; the public-client adapter has not yet reproduced it.
+
+ +

+ Differential diagnosis · 31 July. Jobs + 6787f531, 6d56a857, 4e3b5d1d + and fafc1715 reached HAPS through a generic + submit_job() route that is invalid for OpenQCD. They do not + demonstrate an IDRIS regression. Repeating the same quick case with the + exact scheduler-template/SEB wire contract produced job + aa26bc0d…, which completed after 271 seconds. The failed + protocol—not the facility—was the discriminating variable. The + successful reproducer still builds that wire shape manually. +

+ + +

+ Integration stop sign · restoration completed. The + candidate driver field changed OpenQCD from + 7696f130… to 2c95a2bc… and Uppercase from + d579aa96… to 0ec67f68…. That experiment was + coherent, but incompatible with the frozen evidence. Commits + 88c92af in lightcone-haps and + db944b4 in the showcase restored the two historical IDs + and removed the candidate scheduler driver from those current trees. + The MCP façade worktree still expects the removed client factory, so + the combined checkout is deliberately red until an explicit + schema/version migration—or compatible absent-field design—is chosen. + Never point an old evidence directory at a new request. +

+
+ +
+
+
+ 02 · Why HAPS +

A minimal API and catalog boundary for federated compute.

+
+

+ Broadly, the proposed value is real: an ASTRA/Lightcone client can + send one resolved task to different HAPS-enabled trust domains + without installing Lightcone, an agent or a heavyweight workflow + engine inside every centre. “HAPS-enabled” is the essential + qualification: the site still deploys and governs a small runtime + adapter, catalog entry, network path and identity policy. +

+
+ +
+
+ + One resolved task + scientific intent frozen once +
+ +
+ + One vetted contract + catalog + binding + capability +
+ +
+ + Approved compute domains + lab · institution · federation +
+
+ +
+
+ + consumer side +

Science + AI

+

+ ASTRA records the scientific choices. Lightcone resolves them. + Humans, notebooks or agents may initiate the same immutable intent. +

+
    +
  • No site credentials in ASTRA
  • +
  • No cluster-specific branch in generic code
  • +
  • MCP optional at this edge
  • +
+ +
+ +
+ + HAPS integration contract +

Catalog + job API + ephemeral buffers

+

+ A vetted application contract is selected by capability; the job + lifecycle API records remote identity; bounded buffers move inputs, + status and outputs. Tokens and federation policy decide who may + call what. +

+
    +
  • Small Python / REST-facing components
  • +
  • Explicit application allow-list
  • +
  • One external contract, site-owned execution
  • +
+ +
+ +
+ + provider side +

Existing compute, lightly adapted

+

+ The runtime translates the HAPS contract into the execution + mechanism the site already trusts. HAPS reduces the integration + surface; it does not replace the scheduler or the centre’s policy. +

+
+
+ + Small trust domain + one laptop, DGX or laboratory runtime · direct driver +
+
+ + Institutional HPC + site runtime · scheduler template · Slurm-owned policy +
+
+ + Multi-site federation + shared trust, catalog governance and routing across providers +
+
+ +
+
+ +
+
+ + demonstrated here +

One HAPS service pattern crossed distinct resources

+

+ Uppercase reached AQMO directly; Docling previously ran on the DGX + Spark; OpenQCD crossed HAPS and a scheduler adapter to Jean Zay. + These runs prove heterogeneous reach, not yet production-grade + federation. +

+
+
+ + reusable mechanism +

New sites do not need the whole client stack

+

+ A participating resource needs a HAPS runtime/application adapter + and approved catalog registration. It does not need ASTRA, + Lightcone, Snakemake, MCP or an agent installed on compute nodes. +

+
+
+ + scale trajectory · not deployed fact +

From a lab federation to an ESR-scale service

+

+ The same API-and-catalog pattern can support larger governance + domains. ILaaS is a useful French ESR analogy for federated, + API-accessible compute services—but this prototype is neither an + ILaaS integration nor a national HAPS deployment. +

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
The HAPS catalog is the portability and review boundary
LayerQuestion answeredReusable acrossCurrent truth
Extended application descriptorWhat can this vetted service run, with which typed inputs, outputs, help and execution capability?Catalog registration, runtime skeleton, Galaxy/CWL and agent-facing projections.Galaxy/HAPS source format studied; our descriptor compiler remains a prototype.
Live HAPS catalog entryWhich deployed runtime currently serves this MIME/capability and exact ordered interface?Humans, Lightcone backends and optional MCP clients inside the same federation.Live matching exists; rich types, units, bounds, defaults and interface revisions are missing.
Project HAPS bindingHow does this ASTRA output map onto that reusable service contract?Universes and reruns of the same scientific project.Explicit YAML exists for three cases; execution-driver migration still changes request identity.
+
+ +
+

Small integration surface is not zero integration.

+
+
    +
  • Federated IAM, token issuance, authorization and governance remain deployment responsibilities.
  • +
  • Each site still installs a runtime/adapter and integrates its scheduler, container and application.
  • +
  • Network routing, VPN/proxy policy and outbound access must work across trust boundaries.
  • +
  • Ephemeral buffers are transport, not a durable data catalog or archive.
  • +
  • Service-wide idempotency, signed compute receipts and durable result handoff are still missing.
  • +
  • “Any cluster” means any resource with an approved HAPS adapter—not arbitrary SSH access.
  • +
+
+
+ +

+ Calibrated claim. HAPS avoids forcing each provider to + adopt the consumer’s workflow stack; it does not magically create a + federation. The upstream ebuffer design explicitly favors a minimal + data-logistics/API layer over a shared cross-centre filesystem, while + still naming the need for network reachability, a global namespace and + federated identity. For scale context, the official + ILaaS service description shows how + an ESR federation can expose trusted compute through APIs and keys; it + is an analogy, not evidence that ILaaS runs HAPS. +

+
+ +
+
+
+ 03 · Recorded evidence +

Three cases. Three different claims.

+
+

+ A scientific case, a transport control and a private-platform proof + should not collapse into one green badge. Each card states exactly + what crossed the boundary—and what did not. +

+
+ +
+
+
+
+ Scientific primary · IDRIS +

OpenQCD

+
+ completed · 271 s +
+

+ The quick OpenQCD case ran on Jean Zay with the exact + scheduler-template tags, output capacities and SEB association. + HAPS reached completed; four files were downloaded + immediately and hashed locally. +

+
+
universe
quick · idris · s73099 · nth2 · nstep4
+
job
aa26bc0d… · completed at t=271.2 s
+
used route
manual wire-compatible repro · scheduler SEB · template::slurm
+
outputs
24,680 B · 432 B · 4,718,616 B × 2
+
hashes
log 1b8c90a5… · par 54bc7aeb… · n1 e846a846… · n2 509db663…
+
verdict
scientific output locally hashed · runtime unattested
+
+

+ The older fafc1715 tree remains useful negative + evidence for the wrong generic route. The live success is not yet a + run produced by ClientSchedulerTemplate inside the + candidate Lightcone–HAPS engine. +

+ +
+ +
+
+
+ Transport control · AQMO +

Uppercase

+
+ fetched +
+

+ The same resolver, binding, catalog, staging, lifecycle and fetch + contracts completed. The 46-byte result hash verifies locally; the + deployed runtime did not author a compute receipt. +

+
+
input
46 B · sha256:8193306ae5f2…
+
request
sha256:d579aa960971…
+
job
c04b4ba6-edb6-434e-8040-14d9145d5799
+
output
46 B · sha256:c105cf73105e…
+
verdict
ok_with_missing_compute_receipt
+
+

+ This proves transport and fetched-byte integrity. It is deliberately + not presented as a scientific HPC result. +

+ +
+ +
+
+
+ Private platform · DGX Spark +

Docling

+
+ recorded +
+

+ Historical evidence shows a 66 KB PDF converted to 14,371 Markdown + characters in 67 seconds on the private Spark deployment. Berkeley + connectivity is currently unavailable. +

+
+
platform
spark-1b2f · private HAPS stack
+
application
application/x-docling
+
input/output
document → markdown
+
live status
Tailscale ping only; TCP unreachable
+
current gate
PDF + checksum must be supplied
+
+

+ The declared case proves a third adapter shape without changing + generic Python. It must not be described as a live Berkeley run. +

+ +
+
+ + + +

+ Read-only AQMO audit · 31 July. The private profile and + external password vault are both mode 0600 and excluded from Git. The + expected ebservice/ebuffer endpoints authenticated successfully; the + live catalog returned five applications and exactly one IDRIS OpenQCD + match (84fa4656-19f1-42ba-888f-d026b137eb60, reported + state 4). No buffer or job was created. The registered + profile remains external to the repository. The candidate adapter pins + ebstemplate==0.1.1, but that worktree has not passed its + final test/lint/type/build gate. +

+
+ +
+
+
+ 04 · Failure analysis +

Each failure identified a required contract.

+
+

+ These were not nine versions of “the demo broke.” Each incident + occurred at a different layer and required a different remedy. The point + of the architecture is to make that layer—and the remaining + uncertainty—observable. +

+
+ +
+
+
+ F01 · network edge + workaround +
+
+

Reachable is not connectable

+
+
observed
AQMO returned TLS 425 from Berkeley; Spark answered Tailscale ping through DERP but TCP 22/8000/8001 timed out.
+
wrong conclusion avoided
Neither symptom proved that the notebook, credential or HAPS application was broken.
+
what makes it work
Read-only endpoint health checks, hotspot/VPN/relay options, and a platform-side service check before any submit.
+
+

design rule
Connectivity is a deployment precondition and must fail before scientific mutation.

+
+
+ +
+
+ F02 · schema identity + guarded +
+
+

Names drifted across copies

+
+
observed
An older fixture used different output, input and option IDs; ASTRA 0.0.11/0.0.12 also disagreed around narrative fields.
+
wrong fix avoided
No alias table, option-spelling inference or silent migration was added to generic code.
+
what makes it work
Pin the validator, validate the canonical project and require exact schema/binding identities before compilation.
+
+

design rule
Version skew is evidence; content identity must change when authored bytes change.

+
+
+ +
+
+ F03 · wire typing + client fixed +
+
+

Typed intent, string wire

+
+
observed
Integer arguments triggered a raw ebservice 500; the working HAPS wire shape sends OpenQCD arguments as strings.
+
current correction
HapsJobIntent retains typed values and separately freezes wire_arguments.
+
what remains
The catalog needs types, units, bounds and interface revisions; invalid requests should produce a structured client error, not 500.
+
+

design rule
Logical type and transport serialization are related, but not the same field.

+
+
+ +
+
+ F04 · buffer sizing + guarded +
+
+

The success-path latent bug

+
+
observed
OpenQCD configuration outputs are about 4.7 MiB; the early client allocation of 0.5 MiB would have broken a successful upload.
+
current correction
The public ebstemplate==0.1.1 client creates fixed 6,000,000-byte output buffers; the candidate binding mirrors that invariant and the observed 4.7 MB files fit.
+
what makes it reusable
Capacity belongs to the application/deployment contract, never a global client default.
+
+

design rule
Resource limits are reviewable data and part of request identity.

+
+
+ +
+
+ F05 · scheduler template + confirmed +
+
+

A hidden status-buffer protocol

+
+
observed
The successful Slurm path was not a bare generic request: reproducing the full template tags, fixed buffers and scheduler-event-buffer association let job aa26bc0d… complete in 271 seconds.
+
mistake exposed
The reproducer manually imitated selected SEB/tags but still called submit_job(), bypassing the template abstraction it claimed to reproduce.
+
what makes it reusable
Declare template::slurm in catalog/binding data, then let the adapter call the public template lifecycle instead of duplicating its wire algorithm. A local bytes-decoding bug obscured the SEB display, not the completed remote run.
+
+

design rule
Select an execution template by declared capability—never by application name or copied tag folklore.

+
+
+ +
+
+ F06 · diagnosis correction + diagnosed +
+
+

Wrong route, wrong diagnosis

+
+
observed
Four generic OpenQCD submissions reached HAPS and failed; some appeared to enter running state.
+
claim withdrawn
Those records do not exonerate the client and do not prove an IDRIS/runtime regression because the scheduler-template contract was never executed.
+
confirmation
The bounded public-template rehearsal completed and returned all four expected outputs. The earlier “IDRIS regression” hypothesis is replaced by an execution-contract mismatch.
+
+

design rule
A remote terminal state is evidence only for the exact protocol path that produced it.

+
+
+ +
+
+ F07 · trust + open gap +
+
+

Completed is not attested

+
+
observed
Uppercase and the fresh OpenQCD run both returned locally hashable bytes, but neither deployed runtime emitted a signed compute receipt.
+
current correction
The verdict is split: local fetched-byte integrity passes; runtime identity and observed arguments remain unattested.
+
what makes it verifiable
A runtime-authored declared output with request/job IDs, arguments, input/output hashes, site/runtime identity and signature.
+
+

design rule
Never let one green “verified” badge collapse independent claims.

+
+
+ +
+
+ F08 · reliability + open gap +
+
+

The submit/write crash window

+
+
observed risk
A client may submit remotely and crash before persisting the returned job ID; a retry could create a duplicate.
+
current guard
Local state resumes known job IDs and stops on ambiguous submitting state instead of retrying.
+
what closes it
Authoritative server-side idempotency keyed by the content-addressed request, plus atomic request→job association.
+
+

design rule
Client replay protection is not a distributed idempotency guarantee.

+
+
+ +
+
+ F09 · security + retention + partial +
+
+

Transport handles are dangerous

+
+
observed risk
An unrestricted MCP push_input(file_path) can read any process-visible file; ephemeral outputs can also disappear before a polling client fetches them.
+
current correction
The private AQMO profile and external credential vault are both mode 0600 and excluded from Git; an authenticated read-only catalog preflight succeeded without exposing the password.
+
what remains
MCP allowed roots or staged handles, job-aware buffer retention, completion notification and durable result handoff.
+
+

design rule
Buffers are constrained transport, never a secret store or archive tier.

+
+
+
+ +
+
symptomwhat was observed
+ +
layerwho owns the fault
+ +
contractwhat prevents recurrence
+
+ +

+ Evidence policy. The cards summarize the preserved run + artefacts and the dated continuity log. When a root cause was not + observable—or when the client used the wrong execution route—the page + says so. The authenticated 31 July catalog check proves endpoint, + credential and application discovery only; it does not prove scheduler + or runtime health. +

+ +
+ +
+
+
+ 05 · Schema contracts +

The contract is visible.

+
+

+ Application values belong in scientific records and bindings—not in + connector branches. The schemas are explicitly experimental: one + producer and one consumer do not make a public standard. +

+
+ +
+
+ + + + + + + +
+ +
+
+ implemented · Python contract +

Provider-neutral task

+

+ Lightcone interprets ASTRA once and emits one concrete output task + for one selected universe. Backend-specific runtime handles do not + enter the core record. +

+
    +
  • producer Lightcone resolver
  • +
  • consumers Snakemake compiler + lightcone-haps
  • +
  • identity canonical SHA-256
  • +
  • source lightcone/engine/resolved.py
  • +
+ +
+
+
+ + evidence/openqcd/resolved-task.json +
+
{
+  "schema_version": "lightcone.resolved-task/experimental",
+  "task_id": "lattice_products@quick",
+  "universe": {
+    "id": "quick",
+    "decisions": {
+      "compute_centre": "idris",
+      "seed": "s73099",
+      "nth": "nth2",
+      "nstep": "nstep4"
+    }
+  },
+  "inputs": [{
+    "id": "run_parameters",
+    "bytes": 742,
+    "sha256": "f2dde66d…"
+  }],
+  "task_sha256": "7d1ff848…"
+}
+
+
+ + + + + + + + + + + + +
+
+ +
+
+
+ 06 · Artefact ledger +

Every arrow leaves a record.

+
+

+ The implementation is not “a notebook called an API.” It is a sequence of + authored, generated, observed and still-missing artefacts with named + producers and consumers. +

+
+ +
+
astra.yamlScientific intent, decisions, outputs and rationale.authored · real
+
universes/quick.yamlThe explicit selection used by the demonstration.authored · real
+
resolved-task.jsonConcrete provider-neutral execution unit and hashes.generated · built
+
haps-binding.yamlThe current mapping preserves frozen request IDs and does not yet declare direct versus scheduler execution; the tested candidate was retired.authored · baseline restored
+
haps-job-intent.jsonThe current immutable request preserves historical identity; the retired driver-bearing shape demonstrates why a versioned migration is required.generated · migration open
+
catalog-snapshot.jsonThe exact live application/interface selected.observed · recorded
+
staging-receipt.jsonReal input buffer, bytes and source hash; not scheduler preparation.generic mutation · recorded
+
submission-receipt.jsonReal request → job association; OpenQCD route was invalid.generic mutation · recorded
+
remote-run-state.jsonResumable observed state, not proof of correct scheduler execution.lifecycle · qualified
+
haps-fetch-receipt.jsonNamed fetched outputs, sizes and local hashes.uppercase · recorded
+
openqcd-live-aa26bc0d/Four scheduler-run outputs retained locally; sizes and SHA-256 digests recomputed.openqcd · recorded
+
compute-receipt.jsonSigned schema-valid example, not emitted by the live runtime.design fixture
+
execution-sidecar.jsonASTRA-linked remote lifecycle and split verdict.required · missing
+
+
+ +
+
+
+ 07 · Recorded systems +

Architecture images, with provenance.

+
+

+ These are existing project images—not generated architecture claims. + The second is intentionally shown as historical because the design + evolved after it was drawn. +

+
+ +
+
+
+ Exa-AToW Scientific Application as a Service model showing ebuffer, ebservice, runtime and three HPC centers +
+
+ Upstream platform model · 12 June 2026 + The Exa-AToW HAPS model: application microservices and ephemeral + buffers connect user/developer/maintainer roles to CINES, IDRIS and + TGCC. This is platform context, not proof of our adapter. +
+
+ +
+
+
+ superseded map + Historical haps-mcp architecture map +
+
+ Historical MCP-first map · 29 July 2026 + Useful as a record of the initial idea, but it made MCP look + mandatory and overclaimed per-app typed tools, token-only auth and + client-side scheduler status buffers. +
+
+ +

+ The current correction is architectural, not cosmetic: + ResolvedTask → compile_to_haps → capability dispatch + must lead either to the generic direct client or to + ClientSchedulerTemplate. A candidate followed this + shape and passed focused offline compatibility tests, but it was + removed from the backend to restore frozen request IDs. The + still-uncommitted MCP façade expects that removed factory, so the + current combined checkout fails loudly. MCP remains beside the + deterministic execution path; it must delegate rather than become another + execution engine. +

+
+
+
+ +
+
+
+ 08 · Application publishing +

One application description, multiple generated interfaces.

+
+

+ Sara’s compiler on main@35ea8df consumes a + Galaxy-shaped HAPS XML description. It is not a + Galaxy file plus a <haps> block: the root is + <tool>, HAPS-specific result projection lives in + <output_mapping>, and the centre is a declared + hpc_center select input. This task description still + does not replace an ASTRA project or its project-local HAPS binding. +

+
+ +
+
+ source audit · main@35ea8df · parser inspected +

Galaxy-shaped HAPS XML

+

+ The descriptor reuses Galaxy’s familiar + <inputs>/<param>, + <outputs>/<data>, labels, help and select + options. Its custom <output_mapping> maps HAPS + values such as remote_path and + status into one generated JSON metadata output. + Endpoints and scheduler capabilities are not declared in + this XML today. +

+ <tool> + <inputs> + <outputs> + <output_mapping> + <help> +
+ Exa_AToW_compiler.py + uppercase.xml +
+
+ +
+
+ intended upstream path · checkout incomplete +

Galaxy + proxy

+

+ Galaxy mode is designed to generate one Galaxy tool XML and one + Python proxy from one HAPS description. The current checkout + imports galaxy_tool_generator.py, but that file is + absent, so this mode cannot presently be reproduced as committed. +

+
+
+ code path present · same import blocker +

CWL workflow + proxies

+

+ CWL mode combines an abstract CWL DAG with one HAPS XML per step, + then intends to generate wf.yaml, one + CommandLineTool and one proxy per remote task. + Remote-to-remote edges carry local JSON metadata references. +

+
+
+ separate work · not Sara’s compiler +

Catalog, adapter + MCP

+

+ Sara’s source does not generate ASTRA bindings, HAPS catalog + registration, runtime skeletons, execution-driver metadata or + MCP tools. Those are separate targets of our descriptor/catalog, + lightcone-haps and optional MCP work. +

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
What the current Exa-AToW compiler source actually establishes
Observed in sourceConcrete behaviorArchitectural consequenceCurrent limitation
HAPS XML vocabularyParses tool id/name/version, description/help, typed parameters, select options, outputs and custom output mappings.A strong authored source for UI and proxy generation; a plausible input to a future typed catalog compiler.No XML schema validation, units, numeric bounds, interface revision or declared execution driver.
Generated proxy contractUses ebsclient, uploads local files, chooses <task>-<centre>, submits, polls and writes one JSON metadata output.Confirms that the descriptor can drive executable client code rather than only documentation.Endpoints, tag and 500,000-byte input buffers are hardcoded; credentials are CLI inputs; polling is unbounded.
Workflow projectionShares username, password and hpc_center; connects tasks through JSON containing centre, remote path and status.Separates workflow composition from each atomic HAPS call and avoids moving some intermediate bytes back locally.Current main marks every step remote, requires exactly one JSON output, writes dataset_id: null and assumes an unconfirmed job.get_output_path().
Reproducibility auditAll checked Python files parse syntactically at commit 35ea8df.The design is concrete enough to study and align with our descriptor/catalog work.galaxy_tool_generator.py and legacy catalog_loader.py are absent; the committed tests call an obsolete CLI shape, so neither advertised mode is green in this checkout.
+
+ +
+

+ Application descriptor: “what can HAPS run?” It is + reusable across projects, centres, humans, workflow engines and + agents, and should feed the vetted catalog. +

+

+ Project binding: “how do these ASTRA IDs map to that + application?” It stays explicit, reviewable and local to the case. +

+

+ lightcone-haps backend: “how is that + mapping executed safely?” It compiles and owns the lifecycle. MCP can + project the catalog or expose this backend; it replaces neither. +

+
+ +

+ Truth boundary after reading Sara’s source. The + Galaxy-shaped HAPS XML and its Galaxy/CWL/proxy generation design are + upstream Exa-AToW work, but the checked-out main is + incomplete and was not represented as a passing compiler. MCP + generation is our separate extension; the current + haps_gen.py emits + registration/runtime/tool artefacts but does not yet supply the complete + execution-template contract required by the adapter. +

+
+ +
+
+
+ 09 · Adjacent design track +

Data is not “just a URL.”

+
+

+ The next interoperable input needs four separate contracts. Collapsing + DOI, Globus, DVC and ebuffer into one field would confuse identity, + discovery, movement and job staging. +

+
+ +
+
+ 01 · identity +

Persistent dataset

+

A DOI or other PID plus a content digest identifies a versioned scientific object.

+ DataReference.pid + digest +
+
+ 02 · discovery +

Data catalog

+

Metadata, access conditions and available replicas make the object findable.

+ catalog → replicas[] +
+
+ 03 · movement +

Transfer adapter

+

Globus or a site-supported peer moves bytes and emits a transfer receipt.

+ source → task receipt → target +
+
+ 04 · execution +

HAPS staging

+

An ebuffer or local path supplies one job. Its UUID is not a durable dataset identity.

+ replica → ebin → runtime +
+
+ +

+ Status: proposed. The protocol-neutral ASTRA + DataReference, catalog resolution, transfer receipt and + runtime-recorded replica are specified, not implemented. +

+ +
+ +
+
+
+ 10 · Reproducible packaging +

One experience. Independent components.

+
+

+ The current code is now split across real remotes. The showcase should + be the single review and demo entry point while pinning—not + duplicating—the adapter, MCP façade and Lightcone feature revision. + Frozen evidence must retain the exact code identities that produced it. +

+
+ +
+
+
+ + target showcase release tree · provenance pins still missing +
+
astra-haps-showcase/
+├── cases/
+│   ├── openqcd/
+│   ├── uppercase/
+│   └── docling/
+├── notebooks/                # operator + offline evidence
+├── evidence/                 # immutable recorded outcomes
+├── docs/                     # spec, talk, failure atlas
+├── components.lock.json
+│   ├── lightcone-haps@<commit>
+│   ├── haps-mcp@<commit>
+│   └── lightcone-cli@<resolved-task-commit>
+├── evidence-index.json       # run → code → artefact digests
+├── pyproject.toml            # reproducible demo environment
+├── LICENSE
+└── PROVENANCE.md             # producers, imports and trust limits
+
+ +
+
+ why one repo now +

One reproducible entry point

+

+ The notebook, three cases and evidence are reviewed together. + Component commits are pinned and installed from their own remotes, + avoiding unpublished sibling-path magic. +

+
+
+ what remains separate +

Namespaces and ownership

+

+ lightcone-haps still does not parse ASTRA or depend on MCP; its + direct/scheduler dispatch remains internal to the adapter. + haps-mcp still does not own Lightcone paths. +

+
+
+ split gate later +

Earn independent releases

+

+ lightcone-haps, haps-mcp and the + showcase already have GitHub remotes. The release gate is now + compatibility and provenance, not repository creation. +

+
+
+
+ +
+
+ application schema +

Galaxy Tool XML

+

Sara’s HAPS XML already reuses the Galaxy-shaped tool/input/output/help vocabulary. Its custom output_mapping and future HAPS execution fields still need their own explicit schema.

+ Official Galaxy schema ↗ +
+
+ agent schema +

MCP tools

+

Input and output JSON Schemas are the natural agent-facing projection of a typed application contract.

+ Official MCP tools spec ↗ +
+
+ data movement +

Globus task receipt

+

Asynchronous task IDs, lifecycle events and per-file checksums are a useful model for transfer evidence—not compute evidence.

+ Official Transfer API ↗ +
+
+ run export +

Workflow Run RO-Crate

+

Prospective workflow description and retrospective run provenance are already distinguished in a portable research-object profile.

+ Official profile collection ↗ +
+
+ +

+ Publication state · checked locally. + lightcone-haps, haps-mcp and + astra-haps-showcase point to + github.com/buildcore/*; lightcone-cli is on the + local feat/resolved-task-seam branch; the canonical + openqcd-lattice/ directory still has no Git history. + lightcone-haps and the showcase now contain additive + restoration commits preserving the demo request IDs, while the + haps-mcp worktree still contains the incompatible façade + candidate. Do not publish that candidate until its backend dependency, + tests, lint, strict typing, package builds, secret scan and + old-evidence hash compatibility all pass. +

+
+ +
+
+
+ 11 · Assurance and next moves +

Strong boundaries, honest gaps.

+
+

+ The experimental implementation deliberately fails loudly on missing + inputs, catalog drift, ambiguous submission state, oversized output + and request-ID mismatch. Several guarantees still require server, + runtime or upstream ownership. +

+
+ +
+
+

Controls already built

+
    +
  • AQMO secrets remain in a mode-0600 external vault and outside every evidence artefact.
  • +
  • The direct adapter accepts only hashed inputs below the declared project root.
  • +
  • Catalog preparation requires exactly one application and the exact I/O ordering.
  • +
  • Submission state is persisted and ambiguous crash states stop instead of retrying.
  • +
  • Fetch is capacity-bounded, exact-name checked and atomically published.
  • +
  • The compiler contains no OpenQCD, Uppercase, AQMO or IDRIS branch.
  • +
  • The candidate MCP intent façade confines paths to administrator-approved roots before client construction.
  • +
  • The restored backend preserves frozen request IDs and does not silently dispatch an undeclared scheduler driver.
  • +
  • A fresh scheduler-wire reproduction completed on Jean Zay and all four downloaded outputs have local SHA-256 digests.
  • +
+
+
+

Guarantees still missing

+
    +
  • The restored lightcone-haps baseline passes 18 tests and 13 focused MCP façade tests pass, but those MCP tests mock engine construction; the real cross-repository client factory is absent.
  • +
  • The scheduler stash contains tracked engine/client changes plus four untracked source/test files, but no compatible execution-driver schema or case-binding migration.
  • +
  • The WIP notebook is safe by default and all seven code cells parse, but it currently stops because the compiled intent has no declared driver and scheduler.py is absent.
  • +
  • The compiled intent/engine has not yet reproduced the successful aa26bc0d… scheduler path.
  • +
  • The live reproducer had a bytes-decoding defect; the retired candidate parser had offline coverage but is no longer present in the restored backend.
  • +
  • Adding the driver changes request identity; frozen generic-route evidence must never be silently rewritten.
  • +
  • HAPS service-side idempotency across concurrent clients and the submit/write gap.
  • +
  • Runtime-authored and facility-verifiable compute receipts for deployed applications.
  • +
  • An accepted Lightcone backend-selection and asynchronous resumption interface.
  • +
  • A Lightcone manifest extension plus ASTRA-linked execution sidecar.
  • +
  • Allowed-input-root protection in the separate generic MCP push_input tool.
  • +
  • Typed/versioned catalog arguments, useful remote failure details, job-aware buffer retention and durable result handoff.
  • +
  • The Galaxy-shaped descriptor compiler, data catalog/PID/Globus staging contract, reproducible component pins, CI and licensing remain separate incomplete workstreams.
  • +
+
+
+ +
+
+
+ preserved implementation work · inspected, not applied +

The preserved driver work has an explicit recovery and integration plan.

+
+

+ Recovery must happen on a dedicated branch with an explicit + experimental schema migration. Applying the stash directly would + combine incompatible request identities and leave required schema + changes undefined. +

+
+
+
+ source preserved +

lightcone-haps scheduler stash

+

+ The stash contains changes to the direct client, engine, CLI, + report and dependency lock. Its untracked tree separately holds + clients.py, scheduler.py and two focused + test modules. +

+
    +
  • declared drivers: ebsclient.direct and ebstemplate.scheduler
  • +
  • scheduler capability: template::slurm
  • +
  • missing from the stash: compatible schemas and case bindings
  • +
+
+ stash@{0} + stash@{0}^3 +
+
+
+ operator surface preserved +

Combined ASTRA→HAPS notebook

+

+ Fifteen cells show ASTRA validation, Lightcone resolution, + intent compilation, driver ownership, read-only preflight and + one explicitly confirmed submission through either the CLI or + optional MCP interface. +

+
    +
  • network and submission gates default to False
  • +
  • no embedded endpoint or credential
  • +
  • not runnable against the restored driver-less schema
  • +
+ +
+
+ integration gate +

What must be decided before merge

+

+ Driver selection belongs in the binding and content-addressed + intent, never in an if openqcd branch. That means a + new experimental contract revision and new request IDs for new + runs; preserved evidence retains its old schema and hashes. +

+
    +
  • restore the candidate selectively, not with a blind stash apply
  • +
  • add real cross-repository tests without mocking engine construction
  • +
  • prove both drivers offline, then one bounded OpenQCD live run
  • +
+ +
+
+
+ +
+
+ P1 · recover + version +

Recover the candidate on a dedicated branch

+

Extract tracked and untracked stash contents, define a new experimental binding/intent revision, generate new request IDs and keep every frozen evidence directory immutable.

+
+
+ P2 · integrate +

Complete two declarative drivers

+

Keep one persisted lifecycle while dispatching ebsclient.direct or ebstemplate.scheduler from the hashed intent; make the optional MCP tools delegate to that exact engine.

+
+
+ P3 · test + prove +

Run the notebook and one bounded live job

+

Pass schemas, complete cross-repository tests, lint, strict typing, builds and secret scan; then confirm a fresh request ID and reproduce OpenQCD through lc-haps, not the manual launcher.

+
+
+ P4 · return + upstream +

Complete provenance and service contracts

+

Persist scheduler observations and split verification in an ASTRA-linked sidecar; then align the Lightcone backend API, server idempotency, typed catalog, compute receipts and durable data handoff with their owners.

+
+
+

+ Post-demo implementation authority. The focused + execution-driver specification defines the recovery order, resumption + boundary, rejected alternatives and acceptance gates. It is a proposed + engineering contract—not evidence that the scheduler driver is present + in the restored backend. +

+ +
+ +
+
+
+ 12 · Open the evidence +

Nothing hidden behind the page.

+
+

+ The dossier is a reading surface, not a second source of truth. + Follow these links to the actual specifications, code, schemas, + notebook and evidence directories in this workspace checkout. A + standalone hosted copy may not include those sibling repositories. +

+
+ +
+ + canonical specification + demo-spec.md +

Current/target architecture, ownership, contracts, anti-hardcoding rules and closure ledger.

+
+ + evidence narrative + evidence-first-execution.md +

The concise story of the execution boundary, three cases, failures, lessons and next steps.

+
+ + operator surface + astra-lightcone-haps.ipynb +

CLI-first notebook with visible gates, exact request confirmation and no MCP hop.

+
+ + provider-neutral task contract + resolved.py +

Experimental ResolvedTask records and deterministic list serialization.

+
+ + pure compiler + compiler.py +

ResolvedTask plus binding to content-addressed HapsJobIntent.

+
+ + backend ownership contract + lightcone-haps/README.md +

What the generic extension owns, what belongs in a project binding, and what remains outside it.

+
+ + optional agent façade · candidate + haps-mcp/README.md +

The intended shared-intent tools do not interpret ASTRA or select a scientific case; the current façade worktree expects a backend factory that was removed by the request-ID restoration.

+
+ + persisted lifecycle · restored baseline + engine.py +

The current direct lifecycle and durable state machine; it does not contain the retired scheduler-driver candidate.

+
+ + direct client · restored baseline + direct.py +

The current generic ebsclient route used by ordinary catalog applications; it is not the OpenQCD scheduler-template lifecycle.

+
+ + driver migration decision · open + Execution-driver contract +

The focused post-demo specification dispatches by a declared, hashed capability rather than by application name and defines migration, recovery, security and acceptance gates.

+
+ + live scheduler-wire reproducer + repro-openqcd-idris.py +

The separate manual reproducer whose SEB/template route completed on Jean Zay; it is evidence for the missing backend capability, not the backend implementation.

+
+ + real case binding + openqcd/haps-binding.yaml +

Explicit IDs, MIME selectors, arguments, outputs, capacities and receipt policy.

+
+ + preserved evidence + showcase/evidence/ +

Content-addressed OpenQCD and Uppercase artefact sets.

+
+ + fresh scientific output + openqcd-live-aa26bc0d/ +

Four files downloaded after the 271-second scheduler run; local hashes independently recomputed.

+
+ + design fixtures + interoperability-reference/ +

Inspectible proposed schemas, receipts, manifests and verification composition.

+
+ + descriptor compiler prototype + haps_gen.py +

Galaxy-shaped XML or catalog entry to an experimental registration, runtime skeleton and MCP tool schema; it is separate from Sara’s compiler.

+
+ + + upstream federation rationale + EphemeralBuffers-v2.md +

The minimalist cross-infrastructure data-logistics proposal, including its network, namespace and IAM conditions.

+
+ + historical reproducer + client-idris-repro.ipynb +

Useful audit history, but the fresh success came from a separate full wire-compatible reproducer; public-client adapter execution remains pending.

+
+
+
+ +
+
+
+ Current conclusion +

The protocol is part of the result.

+

+ The contribution is not merely “an agent can submit HPC.” It is a + an execution record where scientific intent, deployment mapping, remote identity, + execution mode, returned bytes and uncertainty each have an explicit + owner. The failed generic runs and the successful 271-second + scheduler run together identified the missing contract without + blaming the facility. HAPS provides the minimal job, catalog and + buffer APIs that carry this contract across approved resources; the binding and + lightcone-haps backend make that reach deterministic, + while MCP only provides an additional controlled client interface. +

+
+
    +
  • real files, not a simulated architecture
  • +
  • generated IDs and hashes remain inspectable
  • +
  • transport success is not compute success
  • +
  • binding, backend and MCP have different owners
  • +
  • HAPS reduces site integration; federation policy remains real work
  • +
  • local integrity is not remote attestation
  • +
  • scientific findings require reviewed interpretation
  • +
  • uncommitted integration code is labelled as work in progress
  • +
+
+
+
+ + + + + +