Cases/Blue Book
ADPS Enterprise Agent Systems Blue Book · Case Report 02
Xuanxu Technology's GIS Publishing Agent: Turn Runtime Experience into Verifiable Pipelines
Certified pipelines run through deterministic rules, and real map requests provide the final acceptance evidence.
Evidence boundary: This report documents Xuanxu Technology's GIS data-publishing system. Yuke Xiong supplied the workflow, failure cases, and architecture decisions. The material has not been independently audited. Screenshots come from the case environment. ADPS reconstructed the example contracts to explain the disclosed mechanisms; they are not the implementation's field names.
Case at a glance
| Item | Field account |
|---|---|
| Business task | Process multiple GIS formats, publish them to GeoServer, and deliver a map service that a consuming application can use |
| Hardest failure to detect | A publish call can report success while real GetMap or GetTile requests fail; some ServiceException responses still use HTTP 200 |
| Main decision | Use models to help design a new pipeline; run certified pipelines through rules; verify publication with real requests and screenshots |
| Runtime structures | Six-stage pipeline, disk facts, error rules, failure cards, and a draft/candidate/active lifecycle |
| Current evidence | Runtime console, knowledge cards, rendered map output, and contributor failure retrospectives |
| Useful when | Input types are enumerable, the processing chain repeats, failures are costly, and the external result can be probed automatically |
1. Understand the GIS delivery chain
Publishing GIS data involves more than uploading a file. A system identifies the format, resolves the coordinate reference system, processes data, generates a style, registers resources with GeoServer, configures caching, and verifies the resulting map service.
The following fields appear throughout the workflow.
| Field | Operational meaning |
|---|---|
workspace |
A GeoServer namespace that separates a group of resources |
store |
A connection to the underlying source, such as PostGIS or a raster file |
layer |
The map layer exposed to clients |
SRS |
The spatial reference system used by the data |
bbox |
The geographic extent used for positioning and zooming |
Each value is produced upstream and consumed downstream. A changed name or coordinate may reject a request or publish a map in the wrong place.
The original process crossed desktop GIS, GDAL, PostGIS, GeoServer, and GWC. Engineers remembered sequence and parameters. After repeated runs, it became difficult to identify which run and stage introduced a fault.
2. Two production failures changed the design
The first involved S-57 electronic navigational charts. Importing a chart set into PostGIS can create more than one hundred feature-class tables. The workflow then creates stores, publishes layers, and assembles a layer group. When the group used OPAQUE_CONTAINER, member layers could disappear from the WMS listing. A direct GetMap request returned LayerNotDefined, yet the ServiceException still carried HTTP 200. A status-only check recorded a false success.
The second failure appeared in WMTS tile requests. GetTile returned 400 with / by zero in the response. The root cause was a metatile size configured as 0x0. The official documentation did not describe that consequence; the team learned it through platform testing.
These incidents produced two requirements:
- The publishing API cannot grade its own final result.
- Tested platform behavior has to enter rules that a later run can consume.
3. Why the runtime does not call a model
The team considered exposing GeoServer REST operations as tools and asking a model to choose calls and parameters at runtime. That path did not enter the main system. workspace, store, layer, SRS, and bbox have exact provenance, and regeneration introduces avoidable drift.
Input intent is also available in the data. A directory containing .000 files selects the S-57 pipeline; .tif selects a raster pipeline. An unmatched signature returns an explicit error.
Open-ended work happens during pipeline design: a coding agent drafts the pipeline, an engineer reviews it and triggers a first full run, and a person certifies it after the system records the evidence. Runtime execution then uses certified rules.
The contributor calls this reasoning assetization: an open design decision becomes a pipeline declaration or an error rule that repeated runs can reuse.
| Decision | Where it happens | Runtime operation |
|---|---|---|
| Select an existing pipeline | Signature defined during design | Look up accepts |
| Handle a known error | Rule created after a failure review | Select retry, abort, or skip by signature |
| Support a new format | Model-assisted design and human validation | Reject until certification |
"No LLM at runtime" describes this bounded input space. It is not a general objective for agent systems.
4. One publication runs through six stages
Each stage runs as a separate subprocess. The orchestrator consumes exit status, structured output, and error signatures.
| Stage | Operation | Required fact | Failure policy |
|---|---|---|---|
validate |
Identify the format and active pipeline | Signature, pipeline ID, source files | Reject when no pipeline matches |
process |
Reproject, load, or normalize data | processed_crs, processed_bbox, output path |
Do not guess a missing CRS |
generate_sld |
Generate or select a style | Traceable style file | Stop when the style contract fails |
publish |
Call GeoServer and configure resources | workspace, store, layer, and receipt | Check minimum facts before the call |
viewer |
Generate a viewer and access configuration | Reproducible service URL and view settings | Do not treat page creation as acceptance |
verify |
Send real requests and capture evidence | verify_report.json, screenshots, request counts |
Route known failures; escalate unknown ones |
The current path is sequential. A concurrent test once produced a transient verification run with zero successful tile requests for one dataset. At the current scale, the team accepts queueing in exchange for reproducibility. This choice should be revisited when queue delay threatens the service objective.
5. Why state lives on disk
Stages exchange files and do not share in-process objects.
run/
metadata.json # input signature, pipeline, processed facts, publish coordinates
run-state.json # current stage, retry count, state transitions
verify_report.json # real requests, screenshots, acceptance outcome
validate writes identification facts. process adds the coordinate system and bounding box. Downstream stages read those values and do not recompute them. The case calls this the disk fact plane and follows one rule: one fact has one authoritative writer.
The design survives process exit, supports restart from persisted stages, lets the frontend and CLI share contracts, and loads current code in a new subprocess. Its costs are equally concrete. Every state file needs a schema version. Timestamp precision must remain aligned between the CLI and frontend. An error prefix used as a rule signature becomes part of the contract.
A multi-host, multi-tenant system with concurrent writers would need transactional and isolated storage in place of these files.
6. Verify the map from the consumer side
verify does not accept a success field from publish as final evidence. It sends a real GetMap or GetTile request and checks at least three conditions.
- The HTTP status is expected.
content-typeisimage/*, and the body is not an XML ServiceException.- A screenshot or image check observes meaningful map content.
ADPS calls this mechanism an external acceptance probe. The same structure applies when the final fact lives in a database readback, delivered file, payment receipt, or deployed page.
7. Convert one failure into a rule for the next run
Runtime handles only known signatures. Available actions are retry, abort, and skip. A missing spatial reference or a broken chart-update sequence stops the run; the system does not invent the missing value.
A new failure enters a five-part card after human review.
signature: "GetTile=400 and body contains '/ by zero'"
root_cause: "metatile size was configured as 0x0"
fallback: "disable the invalid metatile setting and rerun verify"
fixed_by: "set a safe SDK default"
related_rules: ["wmts-metatile-zero"]
The card preserves the symptom, root cause, immediate action, permanent fix, and runtime rule. Later runs consume a compact signature and action; an engineer can still follow source back to the full account.
8. How a new capability earns automatic execution
| State | Permission | Promotion condition |
|---|---|---|
draft |
Generate, edit, and inspect | A person explicitly starts the first complete run |
candidate |
Retain first-run evidence and await certification | All six stages and external verification pass |
active |
Match input and execute automatically | A person certifies the candidate |
When the current pipeline version differs from the certified version, the system returns it to candidate. A code change cannot keep an earlier certification silently.
During capability growth, the model creates scaffolding and a person grants certification; runtime accepts only active pipelines. This adds evidence and accountability without requiring approval for every routine run.
9. Why this still belongs in an agent case catalog
The classification does not depend on an LLM call in every run. This system senses input signatures, selects a capability, changes an external system, verifies the result, applies bounded recovery, and expands its capability set through failure cards and pipeline lifecycle.
Its autonomy is deliberately narrow: unknown signatures are rejected, and accepted work must leave a verifiable result and queryable state. If the implementation were only one fixed script without sensing, selection, external acceptance, or capability lifecycle, the agent label would add little explanatory value.
10. A seven-step transfer method
- Select a repeated delivery workflow with limited input types and observable failure.
- Divide it into stages; define one authoritative output and error signature per stage.
- Mark exact parameters that downstream stages must read rather than regenerate.
- Add an acceptance check outside the publishing process: a real request, database readback, or delivered-file inspection.
- Record three real failures before deciding which may retry and which must abort.
- Give capabilities draft, candidate, and active states; revoke certification after code changes.
- Measure sequential operation before adding concurrency, dynamic planning, or a runtime model.
The structure can support media transcoding, model deployment, report publication, static-site release, and other repetitive delivery workflows.
11. Failure signals and evidence gaps
| Current choice | Valid while | Redesign signal |
|---|---|---|
| Runtime lookup | Input signatures are enumerable | User intent becomes open language; rules keep growing |
| Sequential execution | Queue delay is acceptable | Batch volume breaks the service objective |
| Disk facts | Single host and low write concurrency | Multiple hosts, tenants, or writers compete for state |
| Signature-based recovery | Failures are stable enough to identify | Unknown or misclassified failures keep rising |
| Human capability certification | New-pipeline volume is manageable | Certification becomes the main delivery bottleneck |
The current material supports file-signature routing, the HTTP-200 false-success failure, the metatile root cause, and the lifecycle mechanism. It does not establish superiority under large-scale concurrency. A later report should add per-pipeline run count, success and takeover rates, false successes found by verification, rule hit rate, and recertification time.
12. ADPS mapping
| Pattern or concept | Implementation in this case |
|---|---|
| Failure Journals | Five-part failure cards linked to runtime rules |
| Skill Package | Pipeline declaration, code, evidence, and lifecycle |
| Plan and Execute | Fixed six-stage plan reviewed during design |
| Guardrail Sandwich | Pre-publish fact checks and post-publish probes |
| Progressive Commitment | Draft, candidate, and active permission stages |
| Observability Harness | File state, console, request records, and screenshots |
| Reasoning Assetization | Design conclusions become reusable pipelines and rules |
| Disk Fact Plane | Versioned JSON carries authoritative state across stages |
Contributor and citation
Case contributor: Yuke Xiong, Xuanxu Technology.
Suggested citation: ADPS and Yuke Xiong, "Xuanxu Technology's GIS Publishing Agent: Turn Runtime Experience into Verifiable Pipelines," ADPS Enterprise Agent Systems Blue Book, Case Report 02, v0.4, 2026.