Graticula · Phase 1 — Implementation

Control Room

Everything below is read out of the repository at build time — the ADR headers, open-questions.md, architecture-debt.md, architecture-assumptions.md and git. Nothing on this page is typed by hand, because the two versions that were went stale within a day.

Generated from commit e429a8ee · 2026-10-31 17:17

Where it stands

247
ADRs
81 accepted outright
577/658
ADR conditions discharged
71 live · 10 deferred with their decision
0
open questions
226 answered
21
open debts
309 repaid · 5 waiting on a trigger · 5 partly
7/9
review gates run
1 need an outside reviewer
16/91
assumptions validated
the rest are unproven
5619
tests
609 source files, 271,525 lines

What is left

Three buckets, sorted by who can move them. The sort is derived: an item is the owner's when the question register names them, and an outside reviewer's when the gate says in its own words that it needs somebody who did not write this. Everything else is ours, and it is the only bucket that shrinks by working.

Owner0 open

Nothing is waiting on the owner.

An outside reviewer1 gates

Operations — Needs a deployment somebody operates.

§67 also still owes a review round by somebody who did not participate. Rounds 1 and 2 were self-review; round 3 was commissioned and briefed by the author.

Ours96 items

71 ADR conditions outstanding across 49 decisions — the largest commitment on this page.

21 debts with their repayment triggers already written down.

3 capability areas not started: Publishing, Observability, Resource governance.

1 review gates nobody else is blocking: Extensibility.

Open conditions, by decision

A condition is discharged when its text is struck through in the ADR itself. Nothing here is marked done by this page — it is counted from the decision that made the promise.

ADR-204 · One deployment holds several organ
7
ADR-191 · ArcGIS Pro publishes hosted featur
6
ADR-012 · Clustering
3
ADR-055 · A connection is fields, and this s
2
ADR-076 · OAuth 2.0 authorization code with
2
ADR-079 · A web map is a saved document, and
2
ADR-089 · Sign-in through an LDAP directory,
2
ADR-090 · Sign-in through a SAML 2.0 identit
2
ADR-177 · OGC API Records is a searchable ca
2
ADR-224 · grapy aims at arcpy's whole builda
2
ADR-243 · grapy builds the image classifiers
2
ADR-249 · grapy carries deep learning on poi
2
ADR-006 · Plugin Model
1
ADR-013 · Feature Service Data Model: Identi
1
ADR-024 · Shapefile import, and the exceptio
1
ADR-026 · Serving through a platform-store o
1
ADR-032 · The product is named Graticula
1
ADR-046 · Admission control bounds the queue
1
ADR-048 · CI does not run the real-data suit
1
ADR-059 · Quiescing a data source
1
ADR-074 · Z and M are read, said out loud, a
1
ADR-077 · Z and M ride beside x and y, and a
1
ADR-080 · Hosted tables keep the Z and M the
1
ADR-081 · Migration publishes an ArcGIS Serv
1
ADR-083 · The where clause evaluates ArcGIS'
1
ADR-087 · A domain is a named object that fi
1
ADR-088 · Sign-in through an OpenID Connect
1
ADR-101 · Studio is walked the way a Portal
1
ADR-106 · A layer's data can be exported as
1
ADR-162 · WMS and WFS at a service's own add
1
ADR-164 · `generateKml` is a network link to
1
ADR-165 · OGC API Features filters in Basic
1
ADR-175 · OGC API Maps, over the WMS rendere
1
ADR-176 · OGC API Styles, read-only, over th
1
ADR-178 · HTTP Basic on the OGC faces, over
1
ADR-181 · The ArcGIS REST API version this s
1
ADR-182 · An image service can be an elevati
1
ADR-201 · A member with a password here may
1
ADR-211 · Tables of an attached DuckDB file
1
ADR-214 · The portal's item writes do what t
1
ADR-217 · A versioned or archived geodatabas
1
ADR-218 · A pinned service is kept warm
1
ADR-222 · Geoprocessing is built-in analysis
1
ADR-231 · grapy holds utility networks
1
ADR-232 · grapy holds network diagrams
1
ADR-234 · grapy holds terrain datasets and o
1
ADR-237 · grapy holds SAR data and motion im
1
ADR-241 · grapy builds path distance, its fa
1
ADR-242 · grapy builds Topo to Raster, Segme
1

Review gates (§66)

Each gate runs against the whole architecture, not per ADR, and a failure reopens decisions rather than being noted and passed over. A gate ticked without evidence is worse than one left open: it turns an unknown into a false assurance and nothing afterwards re-examines it.

GateRunResult, or what it is waiting for
CorrectnessFAILFAIL, and all five findings are repaired.
SimplicityFAILFAIL, narrowly, and not for the reason this row expected.
PerformanceFAILFAIL, on a finding about behaviour rather than speed.
FailureFAILFAIL, and all ten findings are now repaired — six on the day, the last four on 2026-08-23, each measured before and after.
Operationsnot runNeeds a deployment somebody operates.
SecurityFAILFAIL on one finding, repaired the same day.
Extensibilitynot runNo plugin code exists, so the gate has nothing to examine.
LicensingPASSPASS.
ConsistencyFAILFAIL, and all four findings are now answered — three on the day, the fourth on 2026-08-23.

Decisions

Every architectural decision is an ADR. Status and confidence are read from each file's own header, so a decision cannot quietly change grade here without changing there.

ADRDecisionStatusConfidenceConditions
001Core LanguageACCEPTED
2026-08-25, by owner decision: "ben Q-01'i kabul ettim .NET olarak".
MEDIUM — 2026-08-25.
002Primary Data ArchitectureREOPENED → re-decided, ACCEPTED WITH…
REOPENED → re-decided, ACCEPTED WITH CONDITIONS
MEDIUM3/3
003Geometry EngineACCEPTED WITH CONDITIONS
single-provider scope.
HIGH for the split, which is measured.
004Rendering EngineACCEPTED
un-deferred 2026-08-20 by ADR-041, which is where the decision now lives.
—
005API ArchitectureACCEPTED WITH CONDITIONS
re-closed 2026-08-20.
MEDIUM-HIGH4/4
006Plugin ModelACCEPTED WITH CONDITIONS
re-closed 2026-08-15, see §0.
MEDIUM-HIGH1/2
007Service RuntimeACCEPTED WITH CONDITIONSMEDIUM — structure well supported, routing unproven2/4
008Query EngineACCEPTED WITH CONDITIONSMEDIUM3/3
009Raster EngineACCEPTED WITH CONDITIONS
re-closed 2026-08-15, see §0.
MEDIUM2/3
010CachingACCEPTED WITH CONDITIONSMEDIUM4/4
011Job SystemACCEPTED WITH CONDITIONSMEDIUM-HIGH4/4
012ClusteringREQUIRES PROTOTYPE (was DEFERRED until…
REQUIRES PROTOTYPE (was DEFERRED until 2026-10-22, when the owner asked for the plan: "En son server clusteringi planla")
MEDIUM for the inventory, which is read from the code · LOW for every cost below, none of…1/4
013Feature Service Data Model: Identity, Relationships and AttachmentsACCEPTED WITH CONDITIONSMEDIUM6/7
014TLS and CertificatesACCEPTED WITH CONDITIONSMEDIUM-HIGH4/4
015AuthenticationACCEPTED WITH CONDITIONSMEDIUM5/5
016Packaging, Deployment and UpgradeACCEPTED WITH CONDITIONSMEDIUM5/5
017Admin API ShapeACCEPTED WITH CONDITIONSMEDIUM — the shape is decided, the surface is not2/3
018Authorization: user types, roles and privilegesREOPENED 2026-08-14 by owner direction →…
REOPENED 2026-08-14 by owner direction → re-decided, ACCEPTED WITH CONDITIONS
MEDIUM5/5
019One deployable, three fused tiersACCEPTED WITH CONDITIONSMEDIUM-HIGH for the decision · LOW for the trigger conditions in §53/3
020An admin console, and what "stop a service" meansACCEPTED WITH CONDITIONSMEDIUM-HIGH for the console · MEDIUM for the status model3/3
021Tiles are encoded by PostGIS, and we do not write an encoderACCEPTED WITH CONDITIONSHIGH for the decision · MEDIUM for the condition in §73/3
022GeometryServer ships in halves, and the projection engine is the datastore'sACCEPTED WITH CONDITIONS · §2 SUPERSEDED by…
ACCEPTED WITH CONDITIONS · §2 SUPERSEDED by §2b, 2026-08-15
HIGH for the split · HIGH for the engine · MEDIUM for the vertex cap4/4
023The REST Services Directory: an HTML face for the APIACCEPTED WITH CONDITIONSHIGH7/7
024Shapefile import, and the exception it costsACCEPTED WITH CONDITIONSHIGH4/5
025Governance: what a gift owes, and what it does notACCEPTED WITH CONDITIONSHIGH4/4
026Serving through a platform-store outage: public-only, while blindACCEPTED WITH CONDITIONSHIGH for the policy · MEDIUM for the window4/5
027Glyphs and sprites: the tile service could not draw a labelACCEPTED WITH CONDITIONSHIGH for the decision · MEDIUM for the coverage5/5
028Style documents: the one thing about a map a server cannot guessACCEPTED WITH CONDITIONSHIGH5/5
029Affinity routing is not the default, and A-003 stops being load-bearingACCEPTED WITH CONDITIONSHIGH for the reversal · MEDIUM for what replaces it at scale2/4
030Reading the reference implementation, not only its documentation~~ACCEPTED WITH CONDITIONS~~ WITHDRAWN
the permission this ADR granted ended 2026-09-09 by owner decision.
MEDIUM2/3
031A service's capabilities are configured, and configuration only ever restrictsACCEPTED WITH CONDITIONSMEDIUM6/6
032The product is named GraticulaACCEPTEDHIGH3/4
033Symbology: one canonical document per layer, and both protocol faces derive from itACCEPTED WITH CONDITIONSMEDIUM-HIGH for the canonical model · MEDIUM for the derivation's fidelity5/5
034Two surfaces over one API: Server for the operator, Studio for the publisherACCEPTED WITH CONDITIONSHIGH for the split · MEDIUM for where each screen lands5/5
035Role privileges are editable, except the administrator'sUNKNOWN—7/7
036Groups, and the two axes an authorization answer now hasUNKNOWN—5/5
037Job workers come in two kindsACCEPTED WITH CONDITIONSMEDIUM6/6
038How a geodatabase becomes one service with many layersUNKNOWN—6/6
039WFS 2.0, read-only, is the first surface after v1UNKNOWN—6/6
040The portal surface is how ArcGIS Pro connectsUNKNOWN—4/4
041The map renderer, and the two faces that hang off itACCEPTED WITH CONDITIONSMEDIUM-HIGH for the placement and the library · MEDIUM for labels · HIGH for throughput,…6/6
042OGC API Features, and the inversion it unwindsACCEPTED WITH CONDITIONSHIGH for the decision, which was already taken · MEDIUM for the conformance claim until…5/5
043ImageServer, and where the raster Tier 1 line fallsACCEPTED WITH CONDITIONSMEDIUM for the decomposition and the Tier 1 line · LOW for the first cut's completeness,…6/6
044Tiles are served, because the claim had to be trueACCEPTED WITH CONDITIONSHIGH6/6
045The server keeps a log you can ask questions ofACCEPTED WITH CONDITIONSMEDIUM6/6
046Admission control bounds the queue, not the waitACCEPTED WITH CONDITIONSMEDIUM4/5
047The outbound licence is Elastic License 2.0ACCEPTED · SUPERSEDED by…
ACCEPTED · SUPERSEDED by ADR-180, 2026-10-13
HIGH for the decision · MEDIUM for what it will cost in adoption3/3
048CI does not run the real-data suites, and says so on every runACCEPTEDHIGH for the exclusion · MEDIUM for whether announcing it is enough1/2
049A face refuses in its own vocabulary, even when that vocabulary has no word for itACCEPTEDHIGH for refusing at all · MEDIUM for which exception code
050A release is a tag, and what it publishes is two imagesACCEPTEDHIGH for the registry and the trigger · MEDIUM for the tag scheme
051An appearance is chosen by looking at itACCEPTEDHIGH
052The canonical symbology document is CIMACCEPTED WITH CONDITIONSMEDIUM5/5
053The symbology editor is three columns, and the item page has a headACCEPTEDHIGH
054The symbology document is not boundedACCEPTEDHIGH — MEDIUM on what replaces the bound until 2026-09-05, when condition 1 was measured2/2
055A connection is fields, and this server assembles itACCEPTEDHIGH0/2
056An item is its own thing, and a service is one kind of itACCEPTEDHIGH — MEDIUM on the field layout until 2026-09-05, when condition 1 was answered2/2
057Composing and publishing a serviceACCEPTEDHIGH for the composition and the publish rules · MEDIUM for the faces7/7
058The datastore's schema is edited from the screenACCEPTED WITH CONDITIONSHIGH for the rule and the refusals · HIGH for the dependency list — MEDIUM until…4/4
059Quiescing a data sourceACCEPTED WITH CONDITIONSHIGH for the refusal and the deadline · MEDIUM for the window's length · LOW for the…4/5
060The axis order comes from the authority's register, carried as dataACCEPTED WITH CONDITIONSHIGH for the answer, which is the authority's own · HIGH for the defect, measured on a…4/4
061Metrics are aggregate; per-entity numbers live in the admin APIACCEPTED WITH CONDITIONSMEDIUM2/2
062The query face streams, like every other faceACCEPTEDHIGH — the choice is between two behaviours that were both measured on the same route…
063A field list may differ from the table, in two ways and no moreACCEPTED WITH CONDITIONS~~MEDIUM — the decision is the owner's and the shape is forced by what already exists,…3/3
064Editor tracking, and what `features:edit` meansACCEPTED WITH CONDITIONSMEDIUM3/3
065Domains and subtypesACCEPTED WITH CONDITIONSMEDIUM5/5
066GeoParquet layers, read in place by DuckDBACCEPTED WITH CONDITIONSMEDIUM5/5
067DuckDB sources beyond a local folder: remote GeoParquet, a DuckDB database file, MotherDuckACCEPTED WITH CONDITIONSMEDIUM6/6
068Responses are compressed, on an allowlist rather than everywhereACCEPTEDHIGH
069Query responses carry the layer's cache lifetimeACCEPTED WITH CONDITIONSMEDIUM
070A layer has a visible scale range, and publishing measures one from the dataACCEPTED WITH CONDITIONSMEDIUM4/4
071A layer's thumbnail is drawn once and kept until somebody redraws itACCEPTEDHIGH
072Pages on other origins may read service responses, never with credentialsACCEPTED
§5 amended 2026-10-14 by owner decision on Q-169: credentials are now allowed, and the session cookie never counts across origins (§5a)
MEDIUM
073A FeatureServer query answers in PBF, on the grid the caller namesACCEPTEDHIGH
074Z and M are read, said out loud, and not servedACCEPTED WITH CONDITIONSHIGH1/3
075A layer is edited by its owner, an administrator, and the group its owner shares it withACCEPTED WITH CONDITIONSHIGH3/3
076OAuth 2.0 authorization code with PKCE, for registered appsACCEPTED WITH CONDITIONSMEDIUM3/5
077Z and M ride beside x and y, and a flat geometry pays nothing for itACCEPTED WITH CONDITIONSHIGH4/5
078A hosted layer can keep its history, and the database keeps itACCEPTED WITH CONDITIONSHIGH that the database keeps it · MEDIUM on the write cost, which is measured once on one…6/6
079A web map is a saved document, and ArcGIS clients can open itACCEPTED WITH CONDITIONSHIGH on the format · MEDIUM on the viewer's shape until the owner has used it2/4
080Hosted tables keep the Z and M their data carriesACCEPTED WITH CONDITIONSHIGH1/2
081Migration publishes an ArcGIS Server's layer definitions over the tables they already readACCEPTED WITH CONDITIONSMEDIUM0/1
082Offline sync is not in v1ACCEPTEDHIGH
083The where clause evaluates ArcGIS's standardized functionsACCEPTED WITH CONDITIONSMEDIUM1/2
084The page size is one number, and the server's is set from the consoleACCEPTED WITH CONDITIONSHIGH3/3
085A tile leaves out what it cannot drawACCEPTED WITH CONDITIONSHIGH3/3
086The operator chooses the map ground, and it is the portal's default basemapACCEPTED WITH CONDITIONSHIGH3/3
087A domain is a named object that fields on many layers point atACCEPTED WITH CONDITIONSHIGH1/2
088Sign-in through an OpenID Connect providerACCEPTED WITH CONDITIONSMEDIUM2/3
089Sign-in through an LDAP directory, and groups mapped to roles and groups hereACCEPTED WITH CONDITIONSMEDIUM1/3
090Sign-in through a SAML 2.0 identity providerACCEPTED WITH CONDITIONSMEDIUM1/3
091Server's sidebar is five rows; the rest are pages under themACCEPTEDMEDIUM
092Sprites are uploaded per service, and a style's icons are checked against themACCEPTEDMEDIUM
093Seeding the tile cacheACCEPTEDMEDIUM
094A service may carry several styles, and a style may name hosts an administrator allowedACCEPTEDMEDIUM
095Registered PostGIS layers serve vector tilesACCEPTEDMEDIUM
096A vector tile service may be tiled in another referenceACCEPTEDMEDIUM — the grid arithmetic is tested by hand-worked numbers; what an ArcGIS client does…
097Vector tiles are served through OGC API Tiles, TileJSON and WMTSACCEPTEDMEDIUM — the grids, documents and refusals are tested against numbers typed in from the…
098Vector tiles can be exported as a packageACCEPTED WITH CONDITIONSMEDIUM — both formats are written from their published specifications and read back in…3/3
099Picture markers are drawn on every faceACCEPTEDMEDIUM — every face is written and unit-tested, and the Skia drawing is read back from…
100Labels in more scriptsACCEPTEDMEDIUM — the glyph ranges are generated, decoded and pinned by tests, and the raster…
101Studio is walked the way a Portal user walks itACCEPTED WITH CONDITIONSMEDIUM — every change below was reproduced in a browser before it was made and is pinned…3/4
102The Studio item is one page, and every setting has one homeACCEPTED WITH CONDITIONSMEDIUM — the structure was drawn by an ArcGIS administrator's review and a design review…3/3
103A hosted layer is updated from a file: append, or overwriteACCEPTED WITH CONDITIONSMEDIUM — the write path is the import's, measured by its own tests; what is new is one…4/4
104A web map styles its own layersACCEPTED WITH CONDITIONSMEDIUM — the storage is the ArcGIS Web Map specification's own place for it and the…3/3
105ArcGIS clients append to a hosted layer through `uploads/upload` and `append`ACCEPTED WITH CONDITIONSMEDIUM — the two operations are shaped as the public ArcGIS REST reference documents them…2/2
106A layer's data can be exported as a fileDRAFTMEDIUM — every format rests on a GDAL driver measured present and able to create on both…8/9
107A layer is exported as a GeoPackage, a zipped shapefile or a workbookACCEPTED WITH CONDITIONSMEDIUM — GDAL writes the files and is the same GDAL the import reads with; what is…3/3
108An item's owner is changed by an administrator; *Move* waits for content foldersACCEPTED WITH CONDITIONSHIGH for Change owner — one row, the member transfer's rule for one item; MEDIUM for…3/3
110A web map sets its layers' pop-upsACCEPTED WITH CONDITIONSMEDIUM — stored where the ArcGIS Web Map specification keeps it and drawn by the viewer…2/2
111An item carries tagsACCEPTEDHIGH — a list of words per item, searched as text; nothing measurable is at stake2/2
112A CSV or Excel table with coordinates is published and added to a layerACCEPTEDHIGH — GDAL's CSV driver does the reading, and the path after it is the shapefile's2/2
113A hosted feature layer has views, and a view is a PostgreSQL viewACCEPTED WITH CONDITIONSMEDIUM — PostgreSQL's automatically updatable views were measured doing what this needs;…4/4
114A member's content has folders, and an item is moved between themACCEPTED WITH CONDITIONSHIGH — a table, a column per item kind, and Portal's documented REST shape3/3
115Editor tracking stops as well as starts, and editors may be kept to their own featuresACCEPTEDHIGH — the writer's own-only predicate existed and was measured dormant; this turns it on…3/3
116Update data may update the features a file matches and add the restACCEPTEDHIGH — two statements in the transaction append already runs2/2
117A web map labels its layersACCEPTEDHIGH — Web Map's own fields, drawn by the viewer that already draws the layer1/1
118A web map's pop-up formats numbers and datesACCEPTEDHIGH — one Web Map field per field info, drawn by the viewer that draws the pop-up1/1
119A web map has a description and a pictureACCEPTEDHIGH — two columns and the Map Viewer's own canvas2/2
120A GeoPackage or KML is imported as a geodatabase isACCEPTEDHIGH — the geodatabase path, measured reading both formats through /vsizip/1/1
121A point layer is drawn as a heat map, or sized by a numberACCEPTEDHIGH — Web Map's own renderer shapes, drawn by OpenLayers' own layers1/1
122A pop-up has text and an imageACCEPTEDHIGH — two Web Map fields, drawn as text1/1
123Imagery comes into Studio, and an export refuses what it does not applyACCEPTED WITH CONDITIONSMEDIUM — the refusal is measured; the scope it opens was inferred and is confirmed5/5
124An image service is shared to a group, and identify refuses what it does not applyACCEPTEDHIGH — each defect is reproduced by a test that failed before the change
125An image service has a legend, key properties and statisticsACCEPTEDMEDIUM — the shapes are ArcGIS's documented ones; what Pro does with each is read from…
126An imagery item describes itself, and sits in its owner's folderACCEPTEDHIGH — measured on the portal face Pro and the Python API read
127An image service exports its values as a GeoTIFFACCEPTED WITH CONDITIONSMEDIUM — the file is read back by this server's reader and by GDAL; what ArcGIS Pro does…1/1
128An image service has histograms, and NaN is not a measurementACCEPTEDMEDIUM — the shape is ArcGIS's documented one; what Pro draws from it is not measured here
129Several items at once, and a map says which of its layers its readers will not seeACCEPTEDMEDIUM — the shapes are Portal's; each action is a sequence of requests the single-item…
130The Map Viewer has an attribute table and bookmarksACCEPTEDMEDIUM — both are ArcGIS Map Viewer's shape over requests this server already answers
131Labels have a visible rangeACCEPTEDHIGH — the Web Map specification's own fields, read and written as ArcGIS does
132The Map Viewer has a time sliderACCEPTEDMEDIUM — the server already answers time; the slider is ArcGIS Map Viewer's shape over it
133The Map Viewer prints the view as a pageACCEPTEDMEDIUM — composed in the browser from what the map already drew; no print service
134Features are edited in the browserACCEPTED WITH CONDITIONSMEDIUM — every write goes through the layer's own applyEdits, which ArcGIS clients…3/3
135A service counts its useACCEPTEDMEDIUM — what is counted is measured; that a count is what an administrator needs is…
136An elevation model is shaded, sloped and given its aspectACCEPTEDHIGH — the arithmetic is checked on planes whose answers are known in closed form, and…
137An image service answers LERCACCEPTEDHIGH — every blob type opens in Esri's own decoder with the values it was given, and the…
138A renderer sent as a rendering rule is drawnACCEPTEDHIGH — every chain is the one the SDK was measured sending, and each is drawn where it…
139An uploaded image is given its overviewsACCEPTEDHIGH — measured before and after on the same image, and the full resolution is…
140Several images are one mosaicACCEPTED WITH CONDITIONSMEDIUM — the reading is measured and checked against GDAL's format; what a mosaic should…1/1
141An image service answers about an area and along a lineACCEPTEDHIGH — the statistics agree with numpy on the same file to the last digit, and a hole is…
142An image is read between its cells as the request asksACCEPTEDHIGH — the arithmetic is checked on ramps whose answers are known, and end to end on a…
143An uploaded image is given back to its ownerACCEPTEDHIGH — the file given back is byte-identical to the one sent
144The geometry service answers the JS SDK as it asksACCEPTED WITH CONDITIONSHIGH — every request is the SDK 4.30's own shape, read from its published source1/1
145A geometry request is answered in the units it names, or refusedACCEPTEDHIGH — each conversion is checked on a shape whose answer is known, and each refusal…
146project takes extents and WKT, relation reads RELATE, and GARS and GEOREF are convertedACCEPTEDHIGH — each is checked on an answer known in advance
147A mosaic grows, and images that do not fit its grid are put on itACCEPTEDMEDIUM — the resampling is the raw export's, measured there; the growth is checked end to…
148An image may be downloaded by everyone it is shared with, and every image is given its pyramidACCEPTEDHIGH — both are checked end to end, with a second user
149The portal may name another server's geometry serviceACCEPTEDHIGH
150autoComplete, reshape and trimExtend are computedACCEPTEDMEDIUM — each is checked on the cases the specification describes; ArcGIS's handling of…
151NDVI, band arithmetic and a choice of bandsACCEPTEDMEDIUM — the arithmetic is checked against closed-form answers; ArcGIS's defaults for…
152A mosaic is a catalog: queried, ordered by a rule, and edited as ArcGIS edits oneACCEPTEDMEDIUM — each operation is checked end to end; ArcGIS's ordering methods that need a…
153An image service has the time of its imagesACCEPTEDMEDIUM — time is checked end to end; multidimensional imagery is not served
154A classified image names its classes: ArcGIS's raster attribute tableACCEPTEDHIGH for the table and its reading · MEDIUM for ArcGIS's shape of identify with a table,…
155An image service measures on the ground, and moves between its cells and the mapACCEPTEDMEDIUM — distances, azimuths and areas are checked against closed-form values; ArcGIS's…
156Clip, Remap, Mask, Statistics and ArithmeticACCEPTEDMEDIUM — each is checked against closed-form answers; ArcGIS's enumerations for…
157Imagery in other formats is written as GeoTIFF on its way inACCEPTEDMEDIUM — the formats are GDAL's and the conversion is checked end to end on samples; real…
158A mosaic combines its images, is reordered in Studio, and a map chooses its bandsACCEPTEDMEDIUM — each operator and each control is checked end to end on samples; blending is…
159A multidimensional file is a service of slicesACCEPTEDMEDIUM — checked end to end on a NetCDF of two variables over time and depth; real files…
160Datum transformations are listed from the register and applied as namedACCEPTEDMEDIUM — listing and applying are checked end to end; the ranking without an area of…
161A mosaic's seamline is the halfway line between its imagesACCEPTEDMEDIUM — checked end to end on two overlapping images; ArcGIS's generated seamlines…
162WMS and WFS at a service's own address, and image services in WMSACCEPTED WITH CONDITIONSMEDIUM — each address and each layer is checked end to end; no ArcGIS-migrated QGIS…1/2
163An image service answers WMTS over its own tilesACCEPTED WITH CONDITIONSMEDIUM — a WMTS tile is checked byte for byte against the ArcGIS tile; no WMTS client has…1/1
164`generateKml` is a network link to the service's mapACCEPTED WITH CONDITIONSMEDIUM — the document and the request it makes are checked; Google Earth has not been…0/1
165OGC API Features filters in Basic CQL2 textACCEPTED WITH CONDITIONSMEDIUM — each claimed class has a case that observes it; no OGC test suite for Part 3 has…0/1
166A service's OGC faces are turned off one by oneACCEPTEDMEDIUM — each face is checked against the switch end to end; ArcGIS Manager's vocabulary…
167A service's own OGC documents describe itACCEPTEDMEDIUM — the documents are checked; ArcGIS Manager's other OGC properties (contact a…
168WFS 1.1.0 is spoken beside 2.0.0ACCEPTED WITH CONDITIONSMEDIUM — each operation is checked end to end in 1.1.0's own terms; no 1.1.0-only client…2/2
169WFS-T through the one write pathACCEPTED WITH CONDITIONSMEDIUM — each action is checked end to end in both versions; OGC's Transactional test…2/2
170Image services are WCS 2.0.1 coveragesACCEPTED WITH CONDITIONSMEDIUM — each operation, trimming, scaling, reprojection and the switch are checked end…2/2
171SLD at the WMS boundaryACCEPTED WITH CONDITIONSMEDIUM — a style sent with GetMap is drawn and forgotten, GetStyles' document draws the…2/2
172A service may be an INSPIRE View and Download serviceACCEPTED WITH CONDITIONSMEDIUM — the documents validate against INSPIRE's published schemas with and without the…1/1
173WCS 1.0.0 is spoken too, so that QGIS opens an image serviceACCEPTED WITH CONDITIONSMEDIUM — QGIS 3.28's own WCS provider opens a coverage through it, its documents validate…1/1
174OGC API Processes, over the geometry serviceACCEPTED WITH CONDITIONSMEDIUM — each process is one geometry-engine operation under the geometry service's own…2/2
175OGC API Maps, over the WMS rendererACCEPTED WITH CONDITIONSMEDIUM — a map drawn here is byte-identical to the WMS GetMap for the same box, size and…1/2
176OGC API Styles, read-only, over the styles the tile faces already serveACCEPTED WITH CONDITIONSMEDIUM — the documents, the negotiation and SLD 1.0 beside 1.1 are unit-tested, the face…3/4
177OGC API Records is a searchable catalogue of the portal's itemsACCEPTED WITH CONDITIONSMEDIUM — every claimed class has a test against a running server, and OWSLib 0.25 and…1/3
178HTTP Basic on the OGC faces, over HTTPSACCEPTED WITH CONDITIONSHIGH — QGIS 3.28 signs in with its own authentication manager and saves a WFS-T insert…0/1
179A layer may carry a titleACCEPTED WITH CONDITIONSHIGH — one column, one setter, and the three faces that composed a title each read it…1/1
180The outbound licence is the Graticula Community LicenseACCEPTED WITH CONDITIONSHIGH for the decision, which is the owner's · MEDIUM for the licence text, which no…3/3
181The ArcGIS REST API version this server reports is 12.1ACCEPTEDMEDIUM0/1
182An image service can be an elevation surfaceACCEPTED WITH CONDITIONSMEDIUM1/2
183The catalogue manifestACCEPTED WITH CONDITIONSMEDIUM — the shape is the one ADR-002 condition 3 was amended to on 2026-09-09; what is…2/2
184The basemap gallery is a group, and its vector tile services are basemapsACCEPTED WITH CONDITIONSMEDIUM3/3
185Sharing is additive: an item's level and its groups both countACCEPTEDHIGH
186An edit empties the tiles it reached, not the whole layerACCEPTEDHIGH
187Both surfaces navigate from a top bar, and Server's is Server Manager's four tabsACCEPTEDMEDIUM — the structure is the owner's, taken from two reference products; nothing is…
188A document is an item: a file kept in the platform store and shared like a web mapACCEPTED WITH CONDITIONSMEDIUM4/4
189Studio holds the organization and Server the engineACCEPTEDMEDIUM — every part is an owner decision of one day, taken against Portal and Server…
190Members are searched in the database, sorted into categories, and have profilesACCEPTEDMEDIUM — the shape is Portal's and the owner's; the search has not been measured past a…
191ArcGIS Pro publishes hosted feature layers hereACCEPTED WITH CONDITIONSMEDIUM0/6
192A screen is a path, not a fragmentACCEPTEDHIGH — measured on dev.graticula.com in a browser before release; the old addresses are…
193Backup and restore are the server's own commands, and they take the database with themACCEPTED WITH CONDITIONSMEDIUM4/4
194An ArcGIS shop's addresses answer: `/arcgis` and `/server/rest`, alwaysACCEPTEDHIGH
195JSONP is answered without the session cookie, and portal listings pageACCEPTED WITH CONDITIONSMEDIUM1/1
197The ArcGIS gap review's second half: what a layer says it can count, compute and pageACCEPTED WITH CONDITIONSMEDIUM3/3
198The geometry service measures on the ellipsoid when askedACCEPTED WITH CONDITIONSHIGH for lengths, areas and distances — each checked against WGS 84's known figures;…2/2
199A group may be public: anybody finds it, signed in or notACCEPTED WITH CONDITIONSMEDIUM2/2
200Service accounts sign in with API keysACCEPTED WITH CONDITIONSMEDIUM3/3
201A member with a password here may have a second factor at sign-inACCEPTED WITH CONDITIONSMEDIUM2/3
202An item has terms of use and categories, and a member keeps favouritesACCEPTED WITH CONDITIONSMEDIUM4/4
203A deleted item waits in the recycle bin, whole, with its idsACCEPTED WITH CONDITIONSMEDIUM3/3
204One deployment holds several organisations, each at its own host nameACCEPTED WITH CONDITIONS (was REQUIRES…
ACCEPTED WITH CONDITIONS (was REQUIRES PROTOTYPE until 2026-10-19, when condition 1 ran)
MEDIUM for the shape · MEDIUM for the floor of §5b since 2026-10-19, measured at or under…9/16
205A registered Oracle database is served as a registered PostGIS database isACCEPTED WITH CONDITIONSMEDIUM for the shape · LOW for the driver's licence until condition 1 runs7/8
206Vector tiles are served from the datastore onlyACCEPTEDHIGH
207Attachments and history on registered layersACCEPTED WITH CONDITIONSMEDIUM5/5
208A registered MySQL database is served like PostGISACCEPTED WITH CONDITIONSMEDIUM6/6
209MariaDB is a dialect of the MySQL providerACCEPTED WITH CONDITIONSMEDIUM5/5
210A registered SQL Server database is served to read, and editedACCEPTED WITH CONDITIONSMEDIUM5/5
211Tables of an attached DuckDB file or MotherDuck database are editedACCEPTED WITH CONDITIONSMEDIUM2/3
212Editor tracking and attachments on every registered database's layersACCEPTED WITH CONDITIONSHIGH2/2
213A layer may be a table: ArcGIS's standalone tableACCEPTED WITH CONDITIONSHIGH10/10
214The portal's item writes do what they answerACCEPTED WITH CONDITIONSMEDIUM2/3
215What ArcGIS ignores is not refusedACCEPTEDHIGH
216The organisation has one id, at every addressACCEPTEDHIGH
217A versioned or archived geodatabase class is refused, not served wronglyACCEPTED WITH CONDITIONSMEDIUM2/3
218A pinned service is kept warmACCEPTED WITH CONDITIONSHIGH for what goes cold, which is measured · MEDIUM for the limit, which is not2/3
219Two organisations partner before their groups mixACCEPTED WITH CONDITIONSHIGH for the shape, which is ArcGIS Online's · MEDIUM for what this version leaves out…4/4
220An item may be shared with every organisation on the serverACCEPTED WITH CONDITIONSHIGH for the reading rule, which is one line in the one place reading is decided · MEDIUM…5/5
221The system administrator has a surface of their ownACCEPTED WITH CONDITIONSHIGH for the split, which follows the API's own (TenantRouting.SystemOnly) · MEDIUM for…3/3
222Geoprocessing is built-in analysis tools, served as ArcGIS's Spatial Analysis ServiceACCEPTED WITH CONDITIONSMEDIUM — the protocol is publicly documented and copied as documented; which clients find…5/7
223User tools are Python toolboxes written against grapy, run in a sandboxed process with no networkACCEPTED WITH CONDITIONSMEDIUM — every mechanism named is a documented, unprivileged Linux facility, and none is…7/7
224grapy aims at arcpy's whole buildable surfaceACCEPTED WITH CONDITIONSMEDIUM4/6
225grapy holds topology rules and relationship classes in the GeoPackageACCEPTED WITH CONDITIONSMEDIUM3/3
226grapy holds network datasets and solves routes on themACCEPTED WITH CONDITIONSMEDIUM for the model · LOW for agreement with Pro's numbers, which this cannot reproduce…3/3
227grapy holds branch versions and archives in the GeoPackageACCEPTED WITH CONDITIONSMEDIUM3/3
228grapy holds subtypes, field defaults, global IDs and attachments in the GeoPackageACCEPTED WITH CONDITIONSMEDIUM6/6
229grapy holds LAS datasets and TINsACCEPTED WITH CONDITIONSMEDIUM for the model · HIGH for the TIN measurements, which are exact on a triangle's…7/7
230grapy holds mosaic datasetsACCEPTED WITH CONDITIONSMEDIUM for the model · HIGH for the methods and operators the pages define (FIRST, LAST,…6/6
231grapy holds utility networksACCEPTED WITH CONDITIONSMEDIUM for the model and the configuration tools, whose pages give their parameters,…5/6
232grapy holds network diagramsACCEPTED WITH CONDITIONSMEDIUM for the diagram management, template and rule tools, whose pages give their…5/6
233grapy holds geostatistical layersACCEPTED WITH CONDITIONSHIGH for the kriging systems, the semivariogram models' formulas and the cross-validation…5/5
234grapy holds terrain datasets and ortho mappingACCEPTED WITH CONDITIONSHIGH for the window size pyramids, the TIN measurements at any level and the collinearity…5/6
235grapy holds attribute rules, contingent values and database sequences, runs Arcade, and refuses replicasACCEPTED WITH CONDITIONSMEDIUM6/6
236grapy holds multidimensional rastersACCEPTED WITH CONDITIONSMEDIUM for the model and its netCDF form · HIGH for the tools whose pages give the answer…4/4
237grapy holds SAR data and motion imagery metadataACCEPTED WITH CONDITIONSHIGH for the Sentinel-1 calibration and thermal noise removal, the unit conversions and…3/4
238grapy holds multipatch featuresACCEPTED WITH CONDITIONSHIGH for the measurements, each exact on planar faces (areas, volumes by the divergence…3/3
239grapy solves fleet routing with published heuristics, and its networks hold turnsACCEPTED WITH CONDITIONSMEDIUM for the model and the heuristics · LOW for agreement with Pro's routes, which this…5/5
240grapy holds editor tracking, last edit time, COGO, unregistered tables and registration, and refuses enterprise geodatabase administration by nameACCEPTED WITH CONDITIONSMEDIUM2/2
241grapy builds path distance, its factor graphs, distance accumulation and least-cost pathsACCEPTED WITH CONDITIONSMEDIUM1/2
242grapy builds Topo to Raster, Segment Mean Shift and the combinatorial toolsACCEPTED WITH CONDITIONSHIGH for the combinatorial tools, which follow a worked example Esri publishes · MEDIUM…3/4
243grapy builds the image classifiers, pansharpening, segmentation and Fu and Rich's solar radiation as cited equivalentsACCEPTED WITH CONDITIONSMEDIUM1/3
244grapy builds the described-but-unspecified surface, cartography and seeded statistics tools as equivalents, and refuses the rest by nameACCEPTED WITH CONDITIONSMEDIUM2/2
245grapy builds the raster functions whose pages answered 404, from the pages at their new addresses, and refuses the display renderings by what each page leaves outACCEPTED WITH CONDITIONSMEDIUM2/2
246grapy runs custom evaluators, keeps what its solvers traversed, and builds the solver property objectsACCEPTED WITH CONDITIONSHIGH that the three groups are buildable · MEDIUM for the choices the pages leave open…2/2
247grapy builds the storage properties a GeoPackage has, the random number generators, and toolboxes in a session, and refuses only what needs Esri's format, licensing or catalogueACCEPTED WITH CONDITIONSMEDIUM2/2
248grapy carries deep learning on PyTorch: training data, training, inference and accuracy for imageryACCEPTED WITH CONDITIONSMEDIUM4/4
249grapy carries deep learning on point clouds: training data, classification, object detection and evaluationACCEPTED WITH CONDITIONSMEDIUM1/3

Open questions

Uncertainty is recorded rather than hidden. An empty list here would mean the recording stopped, not that the uncertainty did.

Architecture debt

Temporary compromises, each with the trigger that repays it. A compromise with no trigger is a permanent decision wearing a temporary label.

IDDebtRepay whenState
D-04Multi-tenant resource isolation is not designed.Before multi-tenant deployments are supportedPARKED
D-10~~ADR-015 is implemented for local passwords only.~~ OIDC, LDAP and SAML 2.0 are built 2026-09-24, in the owner's order (ADR-088, ADR-089, ADR-090); SCIM, API keys and mTLS remain unbuilt, and were not asked about.OIDC before the first deployment with an IdP; /generateToken before any unmodified ArcGIS client is pointed at us The…OPEN
D-115The Server/Studio surface split is the single cause of four recorded console defects.The next defect whose cause is the splitPARKED
D-144~~Nothing bounds how long one request may hold a database permit.~~ The headline is struck 2026-09-09 rather than reworded, because it was false and the correction had already been written into this row's status cell without reaching its first sentence — half…A way to refuse before the first byte, or a way to end a response that says why.PARKED
D-162A provider that is not PostGIS would be handed PostGIS SQL.When DuckDB is designed as the file-format query engine (Q-81), and not after.PARTLY
D-261Every request under /rest/services makes six to eleven short database round trips, and that — not the query, not the response size, not admission control — is what holds the path at about 1,300 requests a second.A deployment whose request rate approaches it, or the day the catalogue and identity reads are held the way ADR-015 §3a…PARKED
D-262The product's own containers are amd64 only, so docker compose up — the first command README.md offers — fails on every arm64 machine.The release workflow publishing both architectures, which GitHub's arm64 runners make free for a public repository; and…PARKED
D-266Only FeatureServer query answering features is cacheable (ADR-069); every other read a map draws from is not, and a PostGIS layer has no validator.A second client family drawing from one of the uncovered faces; or a cheap PostGIS data version appearing (an edit…PARTLY
D-282An exported tile package lives on the server that wrote it~~, and the console's download holds it in the browser's memory.~~ ADR-098 writes packages to Graticula:TileExportPath — exports under the state directory by default — which is each server's own disk…A deployment runs more than one server against one catalogue and exports; or an operator reports the console failing on…PARTLY
D-290~~Three OGC faces have CITE failures that are counted rather than fixed: WMTS 15, WMS 1.1 10, WFS 1.1 9.~~ Updated 2026-10-06: WMTS 0, WFS 1.1 4, WMS 1.1 10, and two suites added with failures of their own — WFS 2.0 Transactional 18 and OGC API Maps 4.WFS 1.1: the engine's image fixed upstream.OPEN
D-295A GeoTIFF is opened apart at the door and read in the serving process afterwards.When ImageServer or any raster read returns to scope, or the first time a file that passed the door faults a read: the…OPEN
D-314The provider jobs fail a test once and pass on a rerun.A third occurrence, or one that fails its rerunPARTLY
D-321A document's item page has less than a web map's.A member asks for one of them, or the next pass over Studio's item pagesPARTLY
D-328grapy's SAR tools have run only on synthetic scenes.ADR-237 condition 3: the first real product run through the chain, or a user tool that fails on oneOPEN
D-330grapy's fleet routing is unmeasured and pure Python.A user tool's fleet solve reaching ADR-223's time limit, or a Pro run of one of testfleet.py's instances (ADR-239…OPEN
D-332grapy's path distance tools refuse the legacy source characteristics, and none is measured.A user tool that passes one of the refused parameters, or one whose distance run reaches ADR-223's time limitOPEN
D-333grapy's Topo to Raster and Segment Mean Shift are unmeasured beyond small grids.ADR-242 condition 3, or a user tool reaching ADR-223's time or memory limit in eitherOPEN
D-334grapy's insolation is unmeasured against Pro and slow on a real DEM.ADR-243 condition 1 (a Pro run of one DEM), or a user tool's insolation run reaching ADR-223's time limitOPEN
D-338grapy's utility network traces and diagram layouts differ from Pro's where five measurements do not say Pro's rule.A toolbox whose answer turns on one of these, or a Pro session with a mesh where the propagated attribute is on the…OPEN
D-339grapy's terrain windows start at a different corner from Pro's.A rule that predicts the corner from the domain and the spacing, found by more runs of Pro, or a user tool that counts…OPEN
D-335grapy's deep learning trains from random weights and is unmeasured on real imagery.ADR-248 condition 2 run in CI, or a user tool training on real imagery reaching ADR-223's time or memory limit, or the…OPEN
D-341grapy's point cloud deep learning is unmeasured on real lidar.ADR-249 condition 1, or a user tool training on real lidar reaching ADR-223's time or memory limitOPEN
D-337grapy's insolation duration and support vector machine still differ from Pro's.Insolation durations or an SVM classification compared with Pro's by a user, or a fourth classifier comparisonOPEN
D-336Two of grapy's equivalents differ from ArcGIS Pro 3.7 beyond any tolerance, measured 2026-10-31.Esri publishes either method; or a few more Pro runs (a factor field on a straight-line source; Segment Mean Shift on…OPEN
D-346A geoprocessing toolbox is an item, and its delete is final: it never reaches the recycle bin.Somebody deletes a toolbox by mistake, or a tool's published outputs are found to name a toolbox that is gone.OPEN
D-340A GeoPackage grapy wrote before 2026-10-31 is still unreadable to ArcGIS Pro, and grapy does not repair it.A user's pre-2026-10-31 GeoPackage reaching Pro, or a request for grapy to upgrade its own files; a tool's output whose…OPEN

309 repaid — every one of them kept in the register with what it cost, because a repaid debt is evidence and this page is only the work

Assumptions

Invalidating one triggers a review of every ADR that rests on it. The unvalidated majority is the honest state of the project, not an oversight.

IDAssumptionState
A-001The tile path is CPU-bound enough that language performance materially affects capacityVALIDATED
A-002Single-binary distribution is genuinely valuable for air-gapped installs, not just aesthetically pleasingUNVALIDATED
A-003Most published services are idle most of the time, making shared workers viableDOWNGRADED
A-004Hot-path geometry overhead is material enough to justify our own primitivesVALIDATED
A-005Geometry running in the same runtime meaningfully reduces defect resolution time versus FFIUNVALIDATED
A-006One internal geometry representation can serve both the feature path and the tile path without a second conversionVALIDATED
A-007Crash containment is required in practice, not merely in principle — workers really do die (GDAL on malformed input, plugins, OOM)CONTESTED,
A-008Administrators will not correctly hand-tune per-service worker settings, so defaults must be good and adaptiveVALIDATING
A-011A distinguished central manager process is a robustness and recovery liability, so placement and routing state must be recoverable without oneVALIDATING
A-012The sharing question is really about per-service state size, binding cost and neighbour tolerance — not about "shared versus dedicated"VALIDATING
A-013Our Tier 2 dependencies (GDAL, GEOS, PROJ) are thread safe enough to permit a threaded worker modelVALIDATED
A-014Routing requests to workers already warm for a service materially improves L1 hit rate without wrecking load balanceDOWNGRADED
A-015Per-service warm state is small — connections, schema, symbology, fonts, CRS — making bind/unbind cheapVALIDATED
A-018~~A deliberately boring platform schema can be supported across SQLite and PostgreSQL at acceptable cost~~SUPERSEDED
A-019In-process MVT encoding can meet our latency targetsVALIDATED
A-020Cache seeding absorbs the provider performance gap, so an expensive Oracle tile path is acceptable when paid once rather than per requestUNVALIDATED
A-036RLS delegation and large streaming reads do not collide often — the layers wanting row-level security are not usually the layers wanting bulk exportUNVALIDATED
A-035Data source count stays low relative to service count — many services share one registered databaseUNVALIDATED
A-032COG range-request traffic is view-proportional, so proxying it costs about what serving tiles costsUNVALIDATED
A-033Target clients can render COG directly, so serving one format sufficesUNVALIDATED
A-034Internal ports designed for our own use will be good enough to become a plugin contract later, without a redesignUNVALIDATED
A-030Lease expiry plus checkpoint verification prevents one job running twice across nodesUNVALIDATED
A-031Job rate stays low enough for a database-backed queue — jobs per minute, not messages per secondUNVALIDATED
A-028Administrators can and will declare layer volatility usefully, and keep it roughly accurateUNVALIDATED
A-029Tiles, not feature query responses, are where cache reuse actually isPARTLY
A-026OGC API Features Parts 1+2+3 plus additive extensions can express what §28 requires, without bending the standard's meaningUNVALIDATED
A-027Optimistic concurrency can be made correct against writes we never see, by relying on database-maintained versioning rather than our own event recordUNVALIDATED
A-025A small number of pinned service contexts suffices for real deployments, and administrators will not pin everythingUNVALIDATED
A-024A small residual executor plus explicit refusal is acceptable to real users, given a capability report published in advanceUNVALIDATED
A-022~~The datastore schema can be created on PostGIS, SQL Server Spatial and Oracle Spatial at acceptable cost~~SUPERSEDED
A-023A cheap schema fingerprint can be polled often enough to detect drift on registered sources without loading the source databaseUNVALIDATED
A-021Filter and predicates can be pushed down usefully on all three spatial dialects — narrowed by Q-67: clip and simplify no longer need to be, since only PostGIS serves tiles.VALIDATED
A-017Data sources will frequently be foreign and possibly read-only, so the platform cannot rely on DDL rights in themVALIDATING
A-016GDAL-backed providers can be made optional, so a PostGIS-only deployment ships as one artefactVALIDATED
A-037Allocation rate, not CPU, sets the tile-serving ceiling per workerVALIDATED
A-038GDAL is needed for the import formats we care about at allINVALIDATED
A-039~~Every provider can clip server-side cheaply enough to avoid shipping whole geometries~~SUPERSEDED
A-040All three engines can stream BLOBs out of a query without materialising them in our processUNVALIDATED
A-041A bounded separate connection pool is sufficient protection against slow-client exhaustion during attachment streamingUNVALIDATED
A-042Caps on vertex count, batch size and wall clock are sufficient to make a public general-overlay endpoint safeINVALIDATED
A-043Six geometry engines can be made to agree closely enough that the same query returns the same answer on any providerVALIDATED
A-044Certificate rotation can take effect on the next handshake without recycling the listener or the workerVALIDATED
A-045Soft-fail revocation checking is an acceptable posture for the air-gapped profileUNVALIDATED
A-046An opaque-token session lookup per request is affordable at the concurrency ADR-007 targetsVALIDATED
A-047Every provider supporting RLS delegation can accept a principal name we generate, through administrator-controlled mappingUNVALIDATED
A-048Expand-and-contract is achievable for every migration we will need, including index and constraint changes on large hosted tablesUNVALIDATED
A-049A curated Python wheel set can cover realistic geoprocessing without pip at runtimeUNVALIDATED
A-050Per-worker allocation rate and GC pause can be sampled continuously, cheaply enough to be always-on metricsUNVALIDATED
A-051A supervisor-served admin surface can authenticate without the platform store without becoming a bypassUNVALIDATED
A-010The 100–1,000 service target will not shift upward by an order of magnitude after launchUNVALIDATED
A-057STAsMVT output is acceptable to the ArcGIS and MapLibre clients we care aboutPARTLY
A-058The datastore has spare capacity for tile encoding in a 100–1,000 service deploymentUNVALIDATED
A-059A vertex cap bounds the work for single-pass geometry operationsUNVALIDATED
A-060Using the datastore's PROJ rather than an in-process library costs nothing that mattersPARTLY
A-061An administrator's first act against an unfamiliar server is to open its URL in a browserUNVALIDATED
A-064A security report will arrive at some point after publication, and the cost of having nowhere to send it exceeds the cost of the policyUNVALIDATED
A-065Requiring a DCO rather than a CLA does not deter contribution, and requiring a CLA wouldUNVALIDATED
A-066A stale Public grant discloses nothing that was not already disclosedVALIDATED
A-067Platform-store failures that leave the data sources up are common enough to be worth serving throughUNVALIDATED
A-068Fifteen minutes is longer than a transient outage and shorter than one nobody is handlingUNVALIDATED
A-069~~One Latin/Greek/Cyrillic typeface serves the deployments this product is for~~RETIRED
A-070Substituting an unavailable font beats refusing the requestUNVALIDATED
A-071One style per service is enough to be useful, even though it is not enough to be finishedINVALIDATED
A-072Refusing a style at write time costs an author less than a blank map costs them at read timeUNVALIDATED
A-073Warm-state fragmentation across workers costs less than the affinity control system would cost in instabilityUNVALIDATED
A-074A QGIS or GDAL client asking a WFS feature type for its default output format gets GML 3.2 — so a WFS offering only GeoJSON would not have connected, and the GML writer is…VALIDATED
A-075ArcGIS Pro's portal connection works against a portal API this project implements, rather than requiring something only Esri's own portal returnsVALIDATED
A-076A CPU rasteriser meets the latency a WMS client expects at typical image sizes on this runtime, without the allocation profile ADR-007 §4.14's worker sizing has no term forVALIDATED
A-077The canonical symbology document carries enough to draw a map a cartographer would accept, rather than enough to describe one.PARTLY
A-052Enforcing the user-type ceiling costs nothing in deployments that never use itUNVALIDATED
A-053A fused deployable remains operable at the top of the stated scale target — 1,000 servicesUNVALIDATED.
A-054Catalogue load and serving load stay similar enough that separate scaling is never forcedUNVALIDATED,
A-055A single-page console with no build step stays maintainableUNVALIDATED.
A-056Operators want start/stop rather than only sharingUNVALIDATED
A-062256 MB uncompressed is above any shapefile a person uploads through a browser and below what troubles the machineCONTRADICTED
A-063Refusing an undeclared encoding costs less than silently corrupting textUNVALIDATED
A-078An operator would rather write MapLibre than a format we invented, because tools exist for the firstUNVALIDATED,
A-079The publisher and the operator are different people often enough for two surfaces to be worth their costUNVALIDATED,
A-080admin:manageServer is the right single gate for Server, so no reader is left without a tool they needUNVALIDATED
A-081The operator console is read on a screen at least 1,180 CSS pixels wideSUPERSEDED
A-082The EPSG register's axis definitions change rarely enough that regenerating from whatever proj.db the PostGIS image ships is soon enoughUNVALIDATED
A-083No deployment needs an axis answer for a CRS code PROJ's own register does not carryUNVALIDATED
A-084Documents filed beside layers are mostly small — specifications, metadata sheets, pictures — well inside 64 MB, so keeping them whole in the platform store and reading them whole…UNVALIDATED
A-085A file's first bytes and its extension together are enough to refuse every type a browser would runREASONED
A-086A deployment holds tens of tenants, not thousandsUNVALIDATED
A-087A customer's spatial tables in Oracle carry SDOGEOMETRY with spatial metadata and an index, or can be given them without moving dataUNVALIDATED
A-019In-process MVT encoding meets latency targets — on PostGIS only, which v1 made the whole of it: D-05 closed 2026-08-24 with the scope cut2026-08-12
A-004Hot-path geometry overhead justifies our own primitives2026-08-12
A-001The tile path is CPU-bound enough that language performance materially affects capacity2026-08-12
A-013GDAL, GEOS and PROJ permit a threaded worker model2026-08-12
A-009PostgreSQL/PostGIS is an acceptable hard dependency for the baseline deploymentREINSTATED

What is verified

Counted from [Fact] and [Theory] attributes in the test sources, so this number cannot drift from the suite that produces it.

Host
1552
Core
944
Conformance
891
Platform.Postgres
565
Api.ArcGis
423
Console
373
Platform
243
Providers.DuckDb
131
Api.Wfs
124
Providers.Oracle
106
Providers.MySql
70
Architecture
51
Render.Skia
50
Raster.Tiff
43
Providers.SqlServer
29
Security.Argon2
24

grapy against arcpy

Names grapy builds, of the public names arcpy 3.7 has in each module. Counted by tools/grapy_surface.py from grapy’s source; a name grapy refuses is not counted.

arcpy
115 / 183
arcpy.da
24 / 29
arcpy.management
250 / 447
arcpy.analysis
35 / 40
arcpy.conversion
31 / 64
arcpy.cartography
6 / 49
arcpy.edit
16 / 19
arcpy.stats
38 / 65
arcpy.sa
289 / 378
arcpy.ia
288 / 347
arcpy.ddd
126 / 156
arcpy.ga
25 / 42
arcpy.na
46 / 62
arcpy.nax
77 / 95
arcpy.nd
68 / 74
arcpy.un
101 / 124
ModuleBuiltof which equivalents (ADR-224 §5.6)Refused, with the reasonNot yet examined
arcpy1151680
arcpy.analysis35150
arcpy.cartography98400
arcpy.conversion312330
arcpy.da24050
arcpy.ddd12619300
arcpy.edit16630
arcpy.ga254170
arcpy.ia28855590
arcpy.management250201970
arcpy.na463160
arcpy.nax779180
arcpy.nd681460
arcpy.sa29858800
arcpy.stats4323220
arcpy.un10116230

Recent work

  1. e429a8eeMerge branch 'grapy-a' into grapy-surface
  2. 6efea248Every equivalent's docstring now says EQUIVALENT with its method and source, and a test holds all three marks (ADR-224 condition 6; conditions 4 and 5 read again)
  3. 0f5ab8edA SQL Server layer keeps a history and follows relationships, as MySQL and Oracle layers do (ADR-210 condition 5, ADR-212 condition 2)
  4. 778241a3UpgradeGDB brings a GeoPackage an earlier grapy wrote to the form ArcGIS Pro reads, and grapy offers it when it writes into one (D-340, partly)
  5. d6d8a218The six legacy cost and path distance tools take a source's start cost, cost multiplier, resistance rate and capacity, as the source characteristics page gives them (D-332, partly)
  6. 425b4179Mosaic items off the read's grid, finer than it or in another reference are warped onto it by BILINEAR, CUBIC, MAJORITY or NEAREST (ADR-230 condition 4)
  7. 31bddd5cA service account signs in with OAuth client_credentials, and its client secrets are made, shown once and revoked on the Security screen (ADR-200 condition 2, migration 113)
  8. 4508d662A topology rule can be restricted to one subtype of each class, and ValidateTopology evaluates it on those features only (ADR-228 condition 6)
  9. 6d66335agrapy triangulates CONSTRAINED_DELAUNAY by Sloan's algorithm, and LandXMLToTin, SurfaceDifference and TinDifference are built on it (ADR-229 condition 6)
  10. 074327e9grapy reads and writes LAZ through lazrs in CI and the server image, and a LAS dataset of LAZ files has an extent (ADR-229 condition 5)
  11. 114e57abThe Linux torch and torchvision wheels' bundled libraries are read, and the x86-64 one carries Intel oneMKL (ADR-248 condition 3)
  12. 7a8b27e6Owner decisions of 2026-10-31, second round: Q-218 and Q-219 confirmed, client_credentials to be built, clustering's phase order confirmed
  13. af1876afADR-248's image and fence conditions are measured: +270 MB on amd64, +232 MB on arm64, and a fenced tool trains on Linux
  14. 9d6ab92eMerge branch 'grapy-a' into grapy-surface