diff --git a/specs/015-graph-exports/contracts/checks.md b/specs/015-graph-exports/contracts/checks.md index 1e69a69e..ad8df034 100644 --- a/specs/015-graph-exports/contracts/checks.md +++ b/specs/015-graph-exports/contracts/checks.md @@ -37,4 +37,4 @@ A tool that canonicalises two BioPAX files to multisets of (class, property, tar - the node endpoints route to node in each table that serves them, and the dev proxy agrees (SBML: `dev.conf` and `local.conf` only, in `NOT_YET_ROUTED` for the deployed table until T068); - SBGN and the event PDF stay in Java, and are listed among Java's neighbours; -- the render budget covers SBML and BioPAX wherever node serves them in a deployment: SBML in beta's `dev.conf` today (`.sbml` and the `.xml` form) and in release and production at T068; BioPAX at T052, which routes it in nginx and the dev proxy alike. Until then the deployed table's `/exporter/event/` location budgets any `.sbml` or `.biopax` request, though only `.sbml` has a Java answer behind it (R6); the configuration does that, and this spec checks that location only for png, svg and pdf, and the `/exporter/sbml/{id}.xml` form is not budgeted there. `local.conf` has no budget zone. +- the render budget covers SBML and BioPAX wherever node serves them in a deployment: SBML in beta's `dev.conf` today (`.sbml` and the `.xml` form) and in release and production at T068; BioPAX at T071, which routes it in nginx and the dev proxy alike. Until then the deployed table's `/exporter/event/` location budgets any `.sbml` or `.biopax` request, though only `.sbml` has a Java answer behind it (R6); the configuration does that, and this spec checks that location only for png, svg and pdf, and the `/exporter/sbml/{id}.xml` form is not budgeted there. `local.conf` has no budget zone. diff --git a/specs/015-graph-exports/plan.md b/specs/015-graph-exports/plan.md index 83531b88..2fe65a89 100644 --- a/specs/015-graph-exports/plan.md +++ b/specs/015-graph-exports/plan.md @@ -18,7 +18,7 @@ Each format gets one implementation, reading the graph, used by both the release - It is proven by R4's comparison by meaning: - against the release's published `biopax.zip`, which is Pathway-Exchange's output (R9). This is the main proof; - against the legacy service's per-event files. -- **The website** gets both from spec 010's Java library service, fronted by node at the URLs R6 decided, with no fallback (R10). That service is spec 010's to build; this spec changes its SBML operation and adds BioPAX. +- **The website** gets both from spec 010's Java library service, fronted by node at the URLs R6 decided, with no fallback (R10). That service is spec 010's to build; this spec changes its SBML operation and adds BioPAX. Both are started in this repository's `deploy/java-library/` for beta until spec 010's repository exists (R10, amended 25 and 29 Oct 2026). - **This repository keeps the instruments:** - the sample; - today's answers, and the release's published bulk files; @@ -105,7 +105,7 @@ _GATE: Must pass before Phase 0 research. Re-check after Phase 1 design._ - BioPAX is compared by canonical triples, because bytes differ even Java against Java (R4). - The bulk reference's generator was checked, not assumed: release 97's `biopax.zip` carries Pathway-Exchange's form and content (R9). - The validators' baselines come from today's files (T034). - - BioPAX3Exporter's coverage was read (R9), and is measured before any work starts (T035). + - BioPAX3Exporter's coverage was read (R9), and measured class by class in its own spec 001 (T035 withdrawn). - **Pass.** - **II. Measure in the thing.** - research.md's claims come from code read or from live answers. @@ -170,7 +170,7 @@ projects/…/download-tab/, …/detail-download-bar/ # the BioPAX links **Structure Decision**: -- **Node answers the URLs** with R6's headers, errors and caching. The library service writes only the body. For SBML, node is the service's client (T065); spec 010's pass-through is not needed for it. +- **Node answers the URLs** with R6's headers, errors and caching. The library service writes only the body. For SBML and BioPAX, node is the service's client (T065, T070); spec 010's pass-through is not needed for them. - **The comparison tools are standalone instruments**, comparing files from anywhere. The SBML one turned out to be `sbml-exporter`'s `ci/compare.py` (T030), not a tool here; BioPAX's (T031) is not written yet, so `tools/exports-compare/` does not exist. ## Order of work @@ -192,7 +192,7 @@ projects/…/download-tab/, …/detail-download-bar/ # the BioPAX links 4. **SBML in `sbml-exporter`** (T036–T042): the fixes, the comparisons, the layout, the graph-only command line, a dry run against the published archive, and validation in its CI. 5. **The SBML switch on the website** (T062–T067), from the service started here, once the comparisons are complete and recorded (FR-009 on beta). 6. **BioPAX in `BioPAX3Exporter`** (T045–T051): the content, the comparisons against `biopax.zip` and the legacy service, validation, and its CI. -7. **The BioPAX switch on the website** (T052–T054): the endpoint, the legacy redirect and the site's links. +7. **The BioPAX switch on the website** (T052, as T069–T072, then T053–T054): the service's operation, the endpoint, the route, the check, the legacy redirect and the site's links. 8. **The release's switches**, each after a full dry run (T055, T057). Level 2 is dropped (T056, decided). 9. **Throughout:** each exporter is split into a library and a command line, and the library is published (T061), so the release and the website run one codebase. diff --git a/specs/015-graph-exports/research.md b/specs/015-graph-exports/research.md index 515238b8..9db9636c 100644 --- a/specs/015-graph-exports/research.md +++ b/specs/015-graph-exports/research.md @@ -354,7 +354,7 @@ So retiring `release-download-directory` is smaller than its step list suggests. - a thin command-line module that the release's bulk run uses, depending on that library. The library service depends on the same library at a pinned version. So the release and the website run one codebase, and keeping the website current is a version bump. Until a library is published, the service builds it from a pinned commit, as spec 010 builds every library. -- **Node** answers `/ContentService/exporter/event/{id}.sbml`, `/exporter/sbml/{id}.xml` and `/exporter/event/{id}.biopax` with R6's headers (BioPAX through spec 010's pass-through; SBML with node as the service's client, as amended on 25 Oct below) and errors, cached per release under spec 011. When the library service cannot answer, node answers 503 in the envelope, never a fallback. +- **Node** answers `/ContentService/exporter/event/{id}.sbml`, `/exporter/sbml/{id}.xml` and `/exporter/event/{id}.biopax` with R6's headers (each with node as the service's client: SBML as amended on 25 Oct, BioPAX on 29 Oct, below) and errors, cached per release under spec 011. When the library service cannot answer, node answers 503 in the envelope, never a fallback. - **The runtime is JDK 17.** BioPAX3Exporter is built for JDK 17, so a Java 11 runtime cannot load it. The libraries built for Java 11 run on 17 unchanged, so spec 010's service runs on JDK 17. Its bytecode stays Java 11 where its libraries need that. Spec 010's T011 and T017 are amended. Kryo and interactor-core's behaviour on 17 is checked by spec 010's token parity (its T026). - **graph-core** is aligned in both exporters to the version spec 010's service pins. BioPAX3Exporter moves up from 2.0.9, and `sbml-exporter` follows from the BOM. The pinned version is the one the deployed ContentService runs, unless spec 010 records otherwise. Each exporter's maintainers are asked to accept it (T029). @@ -365,7 +365,15 @@ So retiring `release-download-directory` is smaller than its step list suggests. - **The library comes from source.** Its Dockerfile builds `sbml-exporter-lib` from the `graph-only` commit pinned in `deploy/java/PINS.md`. The library is not published while it is on a branch. Once it is published, that build stage goes and the service's pom names the published version. - **The licences.** This repository holds only the service's own code and a Dockerfile naming the pinned commit, not the libraries. The image is built only on the beta host and in CI, and never pushed to a registry. The service's own code here is this repository's; the AGPL-dependent parts of spec 010's plan (copying content-service's classes, its T012, T013 and T015; the event PDF) do not happen here. Settling the libraries' licences stays a condition for publishing the library or the image (sbml-exporter#14). - **The diagram files** are fetched on demand from the release's download directory: the same static `diagram/{stId}.json` files the site's browser loads. One file per converted pathway that has a diagram, cached on disk per release. Beta has no local copy of the folder. -- **Moving later.** When spec 010's repository exists, the service moves there unchanged, and its BioPAX operation joins it there. +- **Moving later.** When spec 010's repository exists, the service moves there unchanged. + +**Amended 29 Oct 2026 (decided with the user): BioPAX joins the service here.** `BioPAX3Exporter`'s own spec 001 has since made the exporter. Its library module converts one event or a species. Its species files compare with release 98's `biopax.zip` by meaning, and each of a 30-event sample's files is contained in its species' file. So the website's per-event BioPAX need not wait for spec 010's repository either. It joins the service in `deploy/java-library/` as a second operation, on the terms SBML set: + +- **The library comes from source,** built from a commit of `BioPAX3Exporter`'s `main` pinned in `deploy/java/PINS.md`, and proven by its own comparison, not by `tools/java-parity`. +- **No release files are read:** BioPAX needs only the graph. +- **Node is the service's client,** as for SBML (T065), not spec 010's pass-through. +- **The legacy service's per-event answer is the reference** for the website: this spec's sample (T001) is compared with it by meaning before beta routes the endpoint. +- **The licences:** as for SBML, settling the library's licence stays a condition for publishing the library or the image; `BioPAX3Exporter` has no licence file either. **Alternatives considered.** diff --git a/specs/015-graph-exports/spec.md b/specs/015-graph-exports/spec.md index bcb5d60a..34dfd29e 100644 --- a/specs/015-graph-exports/spec.md +++ b/specs/015-graph-exports/spec.md @@ -17,7 +17,7 @@ This version makes **one exporter per format the single implementation for both* - the bulk files the download page offers, made at release time; - the files the website makes on demand for one pathway or reaction. -Each exporter reads the graph and lives in its own repository: `reactome/sbml-exporter` for SBML, and `reactome/BioPAX3Exporter` for BioPAX Level 3. Both are Java-based (Java and Kotlin). The website's on-demand exports are served by the Java library service that spec 010 already plans for the operations that stay in Java, SBML among them. It is reached only through the node service. For SBML on beta it is started in this repository, in `deploy/java-library/`, and moves to spec 010's own repository once that exists (research R10, amended 25 Oct 2026). +Each exporter reads the graph and lives in its own repository: `reactome/sbml-exporter` for SBML, and `reactome/BioPAX3Exporter` for BioPAX Level 3. Both are Java-based (Java and Kotlin). The website's on-demand exports are served by the Java library service that spec 010 already plans for the operations that stay in Java, SBML among them. It is reached only through the node service. For SBML and BioPAX on beta it is started in this repository, in `deploy/java-library/`, and moves to spec 010's own repository once that exists (research R10, amended 25 Oct and 29 Oct 2026). What the first version produced is kept and used as the instruments for proving the exporters: @@ -212,7 +212,7 @@ The people who run a release can make the SBML and BioPAX bulk files without the - BioPAX Level 3 is `reactome/BioPAX3Exporter`. - Either moves elsewhere only if its maintainers prefer. - **One library per format.** Each exporter's repository becomes a library module, which this stack uses, and a thin command line, which the release uses (R10). -- **The website's service** is spec 010's Java library service (R10). Its SBML operation moves from the relational converter to the graph-only one, and it gains BioPAX Level 3. It pins one graph-core version, so both exporters must work with that version. Node fronts it, so nothing routes to the Java ContentService for these formats. For SBML it is started in this repository for now (research R10, amended 25 Oct 2026). +- **The website's service** is spec 010's Java library service (R10). Its SBML operation moves from the relational converter to the graph-only one, and it gains BioPAX Level 3. It pins one graph-core version, so both exporters must work with that version. Node fronts it, so nothing routes to the Java ContentService for these formats. For SBML, and since 29 Oct BioPAX, it is started in this repository for now (research R10, amended 25 Oct 2026). - **BioPAX's URL** is `/ContentService/exporter/event/{id}.biopax`, as the first version decided (R6). The legacy path redirects to it. - **Order of work.** 1. SBML: the exporter's fixes and tests, then its layout, then the comparisons; then the website and the release switch, each only after the comparisons pass (FR-009). diff --git a/specs/015-graph-exports/tasks.md b/specs/015-graph-exports/tasks.md index b87c2035..78715367 100644 --- a/specs/015-graph-exports/tasks.md +++ b/specs/015-graph-exports/tasks.md @@ -88,7 +88,7 @@ Both exporters' adoption pull requests found that their own checks do not run ye - [ ] T029 [ext] Agree graph-core and the JDK with both exporters' maintainers: each works on the graph-core version spec 010's library service pins, on JDK 17 (R10). Record the version here. - [x] T030 [P] [ext] The SBML comparison tool is `sbml-exporter`'s `ci/compare.py` (its spec 001, T016 for the model, T021 for the layout), not a tool here (decided 24 Oct 2026). It compares element by element with today's relational file of the same release, order and the timestamp set aside; it is shown failing on a removed species reference, a changed sboTerm and, for the layout, a moved glyph. Tick this when its T021 has merged. — sbml-exporter #32 (the model), #47, #51, #52 (the layout, each key proven by its test files) -- [ ] T031 [P] Write the BioPAX comparison tool, `tools/exports-compare/biopax-compare.ts`, with its spec: +- [x] T031 [P] **Withdrawn, 29 Oct 2026:** the BioPAX comparison tool is `BioPAX3Exporter`'s `ci/compare.py` (its spec 001 T005, [BioPAX3Exporter#20](https://github.com/reactome/BioPAX3Exporter/pull/20)), with `ci/contained.py` for an event against its species file (its T021, [BioPAX3Exporter#81](https://github.com/reactome/BioPAX3Exporter/pull/81)), as T030 decided for SBML. What this task asked of it, as first written: - each file canonicalised to (class, property, target-key) triples, with `rdf:ID`s replaced by content keys (R4); - accepted differences read from `contracts/differences.md`; - authors and curation comments hashed. @@ -103,9 +103,9 @@ Both exporters' adoption pull requests found that their own checks do not run ye Any error in today's files is recorded as known. -- [ ] T035 Run BioPAX3Exporter as it is today, from T032's copy, over the sample's pathways and the same three species, and compare with T004 and T033 by T031. Record the result in research.md R9: the baseline the BioPAX work is measured from. +- [x] T035 **Withdrawn, 29 Oct 2026:** the exporter's own spec 001 measured each class before and after its change (its T011–T018, recorded in its `differences.md`), against release 98 rather than this spec's three species. What this task asked, as first written: run BioPAX3Exporter as it is today, from T032's copy, over the sample's pathways and the same three species, and compare with T004 and T033 by T031. Record the result in research.md R9: the baseline the BioPAX work is measured from. -- [ ] T061 [ext] Organise each exporter as a library and a command line (R10): in `BioPAX3Exporter`, a library module (`WriteBioPAX3` and the builders, with their tests) and a thin command-line module for the bulk run; in `sbml-exporter`, likewise (`SbmlConverter` with its layout, then `Main`). Each library is published as a versioned Maven artefact; until it is, spec 010's service builds it from a pinned commit. The library modules exist before T063 and T052. +- [ ] T061 [ext] (`BioPAX3Exporter`'s half done: its spec 001 T009, [BioPAX3Exporter#31](https://github.com/reactome/BioPAX3Exporter/pull/31).) Organise each exporter as a library and a command line (R10): in `BioPAX3Exporter`, a library module (`WriteBioPAX3` and the builders, with their tests) and a thin command-line module for the bulk run; in `sbml-exporter`, likewise (`SbmlConverter` with its layout, then `Main`). Each library is published as a versioned Maven artefact; until it is, spec 010's service builds it from a pinned commit. The library modules exist before T063 and T052. **Checkpoint**: the issues are posted, graph-core is agreed, the references are in hand, and each comparison tool has been shown failing on wrong input. @@ -247,25 +247,46 @@ Both exporters' adoption pull requests found that their own checks do not run ye - every difference is recorded; - every file is valid. -- [ ] T045 [US2] [ext] In `BioPAX3Exporter`: physical entities with their entity references and cross-references (UniProt, ChEBI and the rest, data-model.md), complex components and cellular locations. Unit tests for each. -- [ ] T046 [US2] [ext] In `BioPAX3Exporter`: reactions with stoichiometry, catalysis with its controller, and regulation (positive and negative, as data-model.md maps them). -- [ ] T047 [US2] [ext] In `BioPAX3Exporter`: literature, evidence, provenance and stable-identifier cross-references. -- [ ] T048 [US2] [ext] In `BioPAX3Exporter`, the modes and the output: +**Done in `BioPAX3Exporter`'s own spec 001** (`specs/001-biopax-from-graph`), task by task, each proven against release 98's published files. T045–T048 and T051 are ticked with its pull requests; T049 and T050 keep what is left for the website. + +- [x] T045 [US2] [ext] In `BioPAX3Exporter`: physical entities with their entity references and cross-references (UniProt, ChEBI and the rest, data-model.md), complex components and cellular locations. Unit tests for each. — its T011 ([BioPAX3Exporter#38](https://github.com/reactome/BioPAX3Exporter/pull/38)) and T017, the sets ([BioPAX3Exporter#71](https://github.com/reactome/BioPAX3Exporter/pull/71)). +- [x] T046 [US2] [ext] In `BioPAX3Exporter`: reactions with stoichiometry, catalysis with its controller, and regulation (positive and negative, as data-model.md maps them). — its T012 ([BioPAX3Exporter#43](https://github.com/reactome/BioPAX3Exporter/pull/43)) and T013 ([BioPAX3Exporter#58](https://github.com/reactome/BioPAX3Exporter/pull/58)). +- [x] T047 [US2] [ext] In `BioPAX3Exporter`: literature, evidence, provenance and stable-identifier cross-references. — the stable-identifier cross-references in its T011 ([BioPAX3Exporter#38](https://github.com/reactome/BioPAX3Exporter/pull/38)) and T012 ([BioPAX3Exporter#43](https://github.com/reactome/BioPAX3Exporter/pull/43)); literature, evidence and provenance in its T016 ([BioPAX3Exporter#69](https://github.com/reactome/BioPAX3Exporter/pull/69)). +- [x] T048 [US2] [ext] In `BioPAX3Exporter`, the modes and the output: — its T015, each pathway once and the events in none ([BioPAX3Exporter#62](https://github.com/reactome/BioPAX3Exporter/pull/62), [BioPAX3Exporter#64](https://github.com/reactome/BioPAX3Exporter/pull/64)); T019, one event alone in any mode, the per-reaction export ([BioPAX3Exporter#75](https://github.com/reactome/BioPAX3Exporter/pull/75)); T018, `xml:base` per model ([BioPAX3Exporter#73](https://github.com/reactome/BioPAX3Exporter/pull/73)); T023, the species the release names ([BioPAX3Exporter#86](https://github.com/reactome/BioPAX3Exporter/pull/86)); the validator 6.0.0 (its T004, [BioPAX3Exporter#15](https://github.com/reactome/BioPAX3Exporter/pull/15), and T009, [BioPAX3Exporter#31](https://github.com/reactome/BioPAX3Exporter/pull/31), which took 5.1.0 out of the jar). One mapping of data-model.md is left by choice: a one-event file's ontology header carries no comment naming the event (its `differences.md`, T019). - the species mode writes each pathway once and includes the events in no pathway; - `-l` writes the events it was given; - there is a per-reaction export; - species files carry `xml:base="http://www.reactome.org/biopax/{release}/{species dbId}#"` as the published ones do (FR-007), held per model rather than statically; - the validator is 6.0.0, as the baselines are. -- [ ] T049 [US2] Compare the exporter's species files with the release's published `biopax.zip` (T033), by T031: three species first, then all of them. Then compare its per-event files with the legacy service's over the sample. - - Record each difference in `contracts/differences.md`. - - Expected differences: order and ids, EC numbers, chapter authors, and the early return (R4). - - Anything else goes back to T045–T048. -- [ ] T050 [US2] Validate the exporter's files over the sample and the three species with the BioPAX validator, against T034's baseline. -- [ ] T051 [US2] [ext] In `BioPAX3Exporter`'s CI: the validator over its output for a small fixture graph, failing on any error in the reports. -- [ ] T052 [US2] Serve the website's BioPAX through spec 010's library service, once it serves the operation and T049 and T050 have passed: - - node answers `/ContentService/exporter/event/{id}.biopax` as R6 decided (`application/rdf+xml`, named by stable id, 404 and 400 in the envelope, 503 when the service cannot answer); - - it caches per release; - - it is routed in nginx and the dev proxy alike. +- [ ] T049 [US2] (The species files are done: all 15 against release 98's `biopax.zip`, every difference recorded in its `differences.md`, its T020, [BioPAX3Exporter#79](https://github.com/reactome/BioPAX3Exporter/pull/79). Each of a 30-event sample's files is contained in its species file, its T021, [BioPAX3Exporter#81](https://github.com/reactome/BioPAX3Exporter/pull/81).) What is left: compare the library's per-event files for this spec's sample (T001) with T004's legacy answers, by `ci/compare.py`. The legacy database's release must be the graph's: if beta's graph has moved on, T004's answers are taken again as T032 says. + - Content differences are recorded in `BioPAX3Exporter`'s `differences.md`, as SBML's are in `sbml-exporter`'s; this spec's `contracts/differences.md` keeps the answers' headers and errors (R6). + - Expected differences: order and ids, EC numbers, chapter authors, the early return (R4), and the one-event file's ontology comment (T048). + - Anything else goes to `BioPAX3Exporter`, as a fix under its spec 001 or a ticket (its T022). +- [ ] T050 [US2] (The species files are done: the validator gives no error a published file lacks, its T020, [BioPAX3Exporter#79](https://github.com/reactome/BioPAX3Exporter/pull/79).) What is left: validate the sample's per-event files from the library, and the legacy service's, and record any error the library's has that the legacy's lacks. +- [x] T051 [US2] [ext] In `BioPAX3Exporter`'s CI: the validator over its output for a small fixture graph, failing on any error in the reports. — its T004 ([BioPAX3Exporter#15](https://github.com/reactome/BioPAX3Exporter/pull/15)) and T007 ([BioPAX3Exporter#27](https://github.com/reactome/BioPAX3Exporter/pull/27)). +- [ ] T052 [US2] Serve the website's BioPAX through the library service in `deploy/java-library/`, as R10's amendment of 29 Oct 2026 decided: T069–T072, in that order. T071 waits for T049 and T050. +- [ ] T069 [US2] The BioPAX operation in the library service, on T063's terms: + - **The library from source:** the Dockerfile builds `biopax3-exporter-lib` from a pinned commit of `BioPAX3Exporter`'s `main`, with its row in `deploy/java/PINS.md` and `pins.spec.ts` following. Its graph-core must be the build already pinned, or the PR says why not. The service's pom sets `kotlin.version` to the library's: Spring Boot 2.7's dependency management would otherwise bring Kotlin's standard library down to 1.6.21 under a library compiled with 2.4. The Dockerfile's jar check `cmp`s `biopax3-exporter-lib` as it does `sbml-exporter-lib`, and requires the jar's `kotlin-stdlib` and `paxtools-core` to be the library's versions. + - **Its operation:** `GET /biopax/{stId}` answers the library's one-event conversion, with the release's per-event `xml:base`, and 404 for an id that is not a pathway or reaction in the graph, a backstop: node decides 404 and 400 first (T070). + - **The files** are kept on disk per release, written beside and moved into place. One id is never converted twice at the same time. + - **Memory and time:** the worst case the limits allow, two of the largest BioPAX conversions (Signal Transduction or Metabolism, measured) and two of SBML's at once, runs within T064's heap; or a cap is shared across the operations, or the heap and limit are raised, with the measurement in the PR. The largest pathway's cold conversion stays under node's 290 s (T065). + - **Health** reports the new pin. + - **Checked:** unit tests, each seen failing first; and the CI job runs the image over `BioPAX3Exporter`'s fixture graph at the pinned commit, each answer contained in that commit's expected species file by its `ci/contained.py`. +- [ ] T070 [US2] Node answers `/ContentService/exporter/event/{id}.biopax`, slashed form included, in `exporters-endpoints.ts`, as T065 does SBML: + - R6's headers: `application/rdf+xml`, the download named by stable id; + - 404 and 400 in the envelope, decided from the object's labels; + - the body streamed; + - its own share of 2, apart from SBML's and the deep pool; + - 503 in the envelope when the service cannot answer, and never a fallback; + - cached per release under spec 011. + + Tests against a stub service, each seen failing first. + +- [ ] T071 [US2] The route, in nginx (`dev.conf` under the render budget, before its `routes.conf` include, and `local.conf`) and the dev proxy alike, as T066, once T049 and T050 are recorded. `routes.spec.ts` follows; `nginx -t` for every deployment. The release's and production's files follow when `BioPAX3Exporter` is the release's (T055), as T068 does for SBML. +- [ ] T072 [US2] Check on beta, before and after the switch, over the sample, as T067: + - statuses, headers and errors as R6 decided (`application/rdf+xml`, the download named by stable id, 404 and 400 in the envelope), against `contracts/differences.md`'s BioPAX rows, since the legacy service's differ on purpose; + - the bodies compared with T004's legacy answers by `ci/compare.py`, every difference one T049 recorded; + - the largest pathway's time, cold and cached, and the service's memory. - [ ] T053 [US2] Replace #634's Tomcat location for the legacy path with node's 301, resolving the dbId and redirecting to the stable-id URL (`/ContentService/exporter/event/{stId}.biopax`): - in `deploy/nginx/dev.conf`, `routes-core.conf` and the dev proxy, with `routes.spec.ts` and `serve-prod.spec.ts` following; - rebuild beta's nginx and check both link forms. @@ -304,9 +325,9 @@ Both exporters' adoption pull requests found that their own checks do not run ye - T030 and T031 come before any comparison. - T032 and T033 come before the comparisons that use them. - **SBML (US1):** T036 → T037 → T038 → T039 → T040 → T041. T042 follows T036. T063 → T064 → T065 → T066 → T067 → T068 (once FR-009's open differences are settled); T066 needs T030, T039, T037's whole-sample run and every file's validity (FR-009 on beta). -- **BioPAX (US2):** T035 sets the baseline. T045–T048 can go in any order the maintainers prefer. T049 and T050 need them all. T052 needs T049, T050 and spec 010's service; T053 and T054 follow T052. +- **BioPAX (US2):** T045–T048 are done in `BioPAX3Exporter`. T049 and T050 need T069's service. T052 is T069 → T070 → T071 → T072; T071 needs T049 and T050, and spec 010's repository is not a prerequisite. T053 and T054 follow T052. - **US4:** T055 after T049. T057 after T041. -- **The libraries:** T061 comes before the website's switches (T066, T052). `sbml-exporter`'s half is done (its T022, sbml-exporter #58–#63), and T066 went ahead on it, on beta only; BioPAX3Exporter's is not, and T052 waits for it. +- **The libraries:** T061 comes before the website's switches (T066, T052). `sbml-exporter`'s half is done (its T022, sbml-exporter #58–#63), and T066 went ahead on it, on beta only; `BioPAX3Exporter`'s is done too (its T009, #31). ## Parallel opportunities @@ -317,5 +338,5 @@ Both exporters' adoption pull requests found that their own checks do not run ye 1. **The issues first.** Nothing in either exporter changes before its maintainers agree. 2. **SBML first.** It has an exact reference and an existing graph-only converter. -3. **BioPAX second.** It has the larger gap, measured by T035's baseline before any building starts. Its main proof is the release's own `biopax.zip`. +3. **BioPAX second.** Its exporter was built and proven in its own spec 001, against the release's own `biopax.zip`; the website's part is T069–T072. 4. **Every switch after its proof:** the website's and the release's alike (FR-009).