-----------------------------------

Acquista i software ArcGIS tramite Studio A&T srl, rivenditore autorizzato dei prodotti Esri.

I migliori software GIS, il miglior supporto tecnico!

I migliori software GIS, il miglior supporto tecnico!
Azienda operante nel settore GIS dal 2001, specializzata nell’utilizzo della tecnologia ArcGIS e aderente ai programmi Esri Italia Business Network ed Esri Partner Network

-----------------------------------



giovedì 1 ottobre 2026

AI Agent e ArcGIS: un nuovo pattern per migrare applicazioni legacy

Il problema più difficile nella modernizzazione di un'applicazione legacy non è necessariamente convertire il codice.

È capire che cosa l'applicazione faccia realmente.

Il 30 settembre 2026 Esri ha pubblicato Rethinking Application Migrations, mostrando un approccio particolarmente interessante alla modernizzazione di applicazioni basate su ArcGIS Maps SDK for JavaScript.

Il caso utilizzato è il Building Viewer, migrato da uno stack basato su Dojo e Grunt verso:

  • Vite;
  • TypeScript;
  • @arcgis/core;
  • ArcGIS Maps SDK for JavaScript Components;
  • tooling moderno basato su @arcgis/create.

La motivazione immediata è tecnologica: con l'evoluzione del Maps SDK for JavaScript e la progressiva transizione dai tradizionali widget ai componenti nel percorso verso ArcGIS Maps SDK for JavaScript 5.x, alcune applicazioni richiederanno qualcosa di più profondo di un aggiornamento delle dipendenze.

Ma l'aspetto più interessante dell'esperimento Esri non è lo stack di destinazione.

È il processo di migrazione.

Legacy Application
        |
        v
Static Code Inspection
        +
Runtime Exploration
        |
        v
Behavioral Discovery
        |
        v
Verified PRD
        |
        v
Modern Application Generation
        |
        v
Runtime / Visual Validation
        |
        v
Architecture & Code Review

In altre parole:

non chiedere all'AI di tradurre il vecchio codice. Chiedile prima di ricostruire il contratto comportamentale dell'applicazione.

Ed è una differenza architetturale enorme.

Refactoring e re-platforming non sono la stessa cosa

Esri fa una distinzione importante.

Se dobbiamo semplicemente aggiornare una normale applicazione ArcGIS:

ArcGIS Maps SDK 4.x
        |
        +-- aggiornare una minor version
        +-- sostituire qualche API
        +-- modificare alcuni widget
        |
        v
same application architecture

un aggiornamento incrementale può essere perfettamente ragionevole.

Il problema cambia quando contemporaneamente cambiano:

  • SDK;
  • framework;
  • build system;
  • architettura UI;
  • component model;
  • dependency model;
  • development patterns.

Nel caso Building Viewer il salto era sostanzialmente:

Dojo
Grunt
legacy ArcGIS widgets
legacy application patterns
        |
        v
Vite
TypeScript
ArcGIS Components
modern Maps SDK patterns

In un caso di questo tipo, trascinare progressivamente il vecchio software attraverso una lunga sequenza di upgrade può essere meno conveniente che ricostruire l'applicazione partendo dai requisiti verificati.

Questo introduce una distinzione fondamentale:

CODE MIGRATION
    legacy implementation
          |
          v
    transformed implementation


BEHAVIORAL MIGRATION
    observable behavior
          |
          v
    formal specification
          |
          v
    new implementation

Nel secondo caso il vecchio codice non è più il progetto della nuova applicazione.

Diventa una delle fonti di evidenza utilizzate per ricostruirne le specifiche.

Il legacy diventa un sistema da osservare

Tradizionalmente, quando dobbiamo migrare un'applicazione, iniziamo dal repository:

repository
   |
   +-- source
   +-- dependencies
   +-- configuration
   +-- build
   +-- documentation

Ma un'applicazione reale contiene conoscenza che non è necessariamente evidente dal codice.

Per esempio:

source code
configuration
runtime state
external services
ArcGIS Portal items
WebMap / WebScene
user interaction
browser behavior
CSS / layout
historical workarounds

Il comportamento effettivo dell'applicazione è quindi qualcosa di più simile a:

Application Behavior =
    Code
  + Configuration
  + Runtime
  + Data
  + External Services
  + UI State
  + User Interaction

Ed è qui che entra in gioco il coding agent.

Nel workflow Esri l'agente non deve limitarsi a leggere JavaScript e TypeScript.

Deve eseguire realmente l'applicazione.

Browser automation come strumento di reverse engineering

Esri utilizza un browser integrato e Playwright per esplorare l'applicazione legacy.

L'agente deve:

  • avviare l'applicazione;
  • navigarne le funzionalità;
  • attivare controlli e workflow;
  • osservare gli stati della UI;
  • verificare il comportamento della mappa;
  • catturare screenshot;
  • correlare quello che osserva con il sorgente;
  • individuare risorse ArcGIS e configurazioni esterne.

Gli screenshot diventano quindi qualcosa di molto più importante della semplice documentazione.

Diventano evidence artifacts.

Requirement
    |
    +-- source evidence
    +-- runtime evidence
    +-- screenshot evidence
    +-- configuration evidence

Il PRD risultante non descrive soltanto ciò che il codice sembra voler fare.

Descrive ciò che l'applicazione effettivamente fa.

Il PRD come Behavioral Contract

Prima di generare qualsiasi nuova applicazione, Esri fa produrre all'agente un vero Product Requirements Document.

Il prompt impone una regola particolarmente importante: documentare il comportamento esistente senza proporre subito nuove tecnologie, redesign, miglioramenti o nuove architetture.

Inoltre l'agente deve distinguere chiaramente ciò che è stato verificato da ciò che è soltanto dedotto oppure non determinabile.

Questo trasforma il PRD in qualcosa che, dal punto di vista architetturale, possiamo definire:

Behavioral Contract

tra:

legacy implementation
        |
        v
       PRD
        |
        v
new implementation

Il nuovo sistema non deve necessariamente replicare l'implementazione.

Deve soddisfare il contratto comportamentale.

Verified, Assumption, Unknown

Una delle scelte più intelligenti è evitare che l'LLM presenti ogni deduzione come un fatto.

Nel PRD reale del Building Viewer Esri distingue categorie quali:

Verified
Specified correction
Assumption
Unknown

Questa distinzione è estremamente importante nell'uso professionale degli agenti.

Un modello potrebbe facilmente trasformare:

inference

in:

requirement

e successivamente trasformare quel requisito inventato in codice perfettamente funzionante.

Il risultato sarebbe tecnicamente corretto ma funzionalmente sbagliato.

La provenance dell'informazione deve quindi diventare parte della specifica.

Una possibile estensione enterprise potrebbe essere:

Requirement R-042

Behavior:
Selecting floor 2 filters the building.

Evidence:
[x] Source inspection
[x] Runtime verification
[x] Screenshot
[x] ArcGIS service query

Confidence:
VERIFIED

Dependencies:
WebScene: ...
Layer: ...
Field: BldgLevel

Validation:
Playwright test BV-FLOOR-002

A questo punto il PRD comincia ad assomigliare più a una specifica eseguibile che a un normale documento di progetto.

Il Data & Configuration Inventory è fondamentale nel GIS

Qui il caso ArcGIS diventa particolarmente interessante.

Un'applicazione GIS raramente è contenuta interamente nel repository.

Una parte importante dell'architettura può vivere dentro:

ArcGIS Online / Enterprise
        |
        +-- WebMap
        +-- WebScene
        +-- FeatureLayer
        +-- SceneLayer
        +-- ElevationLayer
        +-- Portal Items
        +-- Renderers
        +-- Popups
        +-- Expressions
        +-- Service Configuration

Per questo Esri chiede esplicitamente all'agente di costruire un Data & Configuration Inventory.

Nel PRD del Building Viewer vengono inventariati elementi quali:

  • Portal;
  • WebScene ID;
  • URL REST;
  • spatial reference;
  • elevation source;
  • SceneServer;
  • FeatureServer;
  • layer ID;
  • visibility;
  • definition expression;
  • configurazioni applicative;
  • risorse esterne.

Il documento arriva quindi a ricostruire relazioni funzionali come:

UI floor
   |
   v
level_id
   |
   v
FeatureLayer filter

oppure:

UI floor
   |
   v
BldgLevel
   |
   v
BuildingSceneLayer filtering

Questa è una lezione importante per qualsiasi migrazione GIS:

il repository Git non coincide con il sistema.

Il sistema reale è piuttosto:

Git repository
      +
Portal configuration
      +
WebMap / WebScene JSON
      +
REST services
      +
external data
      +
runtime behavior

Un agente che analizzi soltanto il repository vede quindi soltanto una parte dell'architettura.

Dal PRD alla nuova applicazione

Solo dopo questa fase Esri passa alla generazione.

La nuova applicazione viene creata utilizzando @arcgis/create con Vite e uno stack moderno, mantenendola separata dal progetto originale.

Legacy App
     |
     | discovery
     v
   PRD
     |
     | generation
     v
Clean Project
     |
     v
Modern SDK

Questo riduce un problema tipico delle migrazioni automatiche: la legacy contamination.

Se chiedessimo semplicemente:

convert this Dojo application to modern TypeScript

il modello potrebbe produrre:

legacy architecture
      +
TypeScript syntax
      +
modern build

ottenendo un'applicazione apparentemente moderna, ma concettualmente ancora legacy.

Widget thinking vs Component thinking

Questo problema è particolarmente evidente nel Maps SDK.

Un agente può facilmente ricadere nei pattern che ha già visto più spesso, per esempio:

  • vecchi widget;
  • classi legacy;
  • codice custom che reinventa funzionalità già presenti nei nuovi componenti;
  • pattern di inizializzazione appartenenti a versioni precedenti dell'SDK.

Esri non ha risolto il problema continuando ad allungare il prompt della singola conversazione.

Ha modificato le istruzioni persistenti del repository.

Ed è probabilmente una delle parti più interessanti dell'intero esperimento.

.github/copilot-instructions.md come Architecture Policy

Nel repository Building Viewer è presente:

.github/copilot-instructions.md

In altri ambienti lo stesso concetto può essere rappresentato da:

AGENTS.md

Il file contiene conoscenza persistente relativa al progetto.

Non:

"correggi questo componente"

ma:

"questo è il modo corretto di sviluppare in questo repository"

Le istruzioni possono stabilire, per esempio:

  • quali versioni di @arcgis/core e @arcgis/map-components utilizzare;
  • quali pattern non devono più essere introdotti;
  • quando preferire i Map Components;
  • come validare il codice;
  • quali requisiti di sicurezza rispettare.

Quindi:

Prompt
    = task context

copilot-instructions.md
    = architectural context

È una distinzione fondamentale.

Architecture as Instructions

Da un punto di vista enterprise, possiamo spingere questo concetto molto più avanti.

Un repository potrebbe contenere:

AGENTS.md

architecture/
    principles.md
    security.md
    arcgis-patterns.md
    testing.md
    observability.md

con regole come:

DO use ArcGIS Components

DO NOT use deprecated widgets

DO NOT place secrets in browser code

DO validate browser console

DO execute type checking

DO verify against screenshots

DO inspect ArcGIS service metadata

DO keep changes scoped

L'agente non riceve quindi soltanto una richiesta.

Riceve una policy architetturale versionata insieme al codice.

Possiamo quasi considerarla:

Architecture Policy as Code

Correggere l'agente, non soltanto il codice

Questo cambia anche il modo di lavorare quando l'AI commette ripetutamente lo stesso errore.

Workflow ingenuo:

Agent generates wrong pattern
        |
        v
developer fixes prompt
        |
        v
agent generates another wrong pattern
        |
        v
developer fixes prompt again

Workflow più maturo:

Agent generates wrong pattern
        |
        v
identify systemic misconception
        |
        v
update AGENTS.md / copilot-instructions
        |
        v
future generations inherit correction

In pratica il feedback non modifica soltanto l'output.

Modifica il sistema che produce gli output successivi.

Questo assomiglia molto più alla gestione di una engineering organization che al normale prompting.

Visual validation non significa semplicemente pixel comparison

Dopo la generazione Esri confronta vecchia e nuova applicazione utilizzando browser e screenshot.

Ma in una GIS application la validazione visuale deve essere interpretata con attenzione.

Una schermata apparentemente identica può nascondere differenze sostanziali:

camera position
zoom
layer visibility
definitionExpression
renderer
popup behavior
hitTest
floor filtering
WebScene state
service errors
console errors

Per questo una pipeline realmente robusta dovrebbe combinare:

Visual Validation
        +
Functional Validation
        +
GIS State Validation
        +
Network Validation
        +
Console Validation

Per esempio:

Playwright
   |
   +-- click Floor 2
   +-- capture screenshot
   +-- inspect visible controls
   +-- verify selected state
   +-- inspect browser console
   +-- inspect failed requests
   +-- verify expected layer filter

Qui l'AI agent non sostituisce i test.

Può diventare il coordinatore dei diversi strumenti di verifica.

Una possibile pipeline CI/CD

Il pattern mostrato da Esri può essere ulteriormente industrializzato.

                    LEGACY APPLICATION
                           |
                           v
                +--------------------+
                | Discovery Agent    |
                +--------------------+
                  |       |       |
                  v       v       v
                Code   Browser   ArcGIS REST
                  \       |       /
                   \      |      /
                    v     v     v
                 VERIFIED PRD
                       |
                       v
               Architecture Rules
                       |
                       v
                Generation Agent
                       |
                       v
                  New Application
                       |
          +------------+------------+
          |            |            |
          v            v            v
       Build        Playwright    Security
       Typecheck     Tests         Checks
          |            |            |
          +------------+------------+
                       |
                       v
                Visual Regression
                       |
                       v
                Human Review Gate
                       |
                       v
                    Deploy

A questo punto non stiamo più parlando semplicemente di Copilot.

Stiamo parlando di una agentic application-modernization pipeline.

Il ruolo della sicurezza

Il file di istruzioni utilizzato da Esri contiene anche indicazioni esplicite sulla sicurezza.

Un punto fondamentale per le applicazioni JavaScript è il seguente: una API key utilizzata dal browser è necessariamente disponibile al client.

Inserirla in una build-time environment variable può evitare di commetterla direttamente nel repository, ma non trasforma il bundle JavaScript in un secret store.

OAuth client secret, credenziali applicative e token confidenziali devono invece rimanere fuori da:

  • browser;
  • bundle;
  • log;
  • commit;
  • prompt e contesto dell'assistente.

Questo diventa ancora più importante con gli agenti.

Un discovery agent potrebbe infatti avere accesso contemporaneamente a:

repository
environment
browser
network
configuration
logs
Portal

Il modello di sicurezza dovrebbe quindi ragionare esplicitamente su:

Agent permissions
      |
      +-- filesystem scope
      +-- repository scope
      +-- browser scope
      +-- network scope
      +-- credentials
      +-- Portal privileges
      +-- command execution

Il principio dovrebbe essere sempre:

least privilege
+
isolated environment
+
auditable actions
+
human approval for sensitive operations

Attenzione: il PRD può diventare il nuovo single point of failure

Il workflow è potente, ma introduce anche un rischio interessante.

Legacy
   |
   v
PRD
   |
   v
New Application

Un errore nel PRD può propagarsi direttamente nella nuova implementazione.

Il problema quindi si sposta:

prima:
"il codice generato è corretto?"

dopo:
"la specifica generata è corretta?"

È probabilmente comunque un miglioramento, perché una specifica è più semplice da revisionare rispetto a migliaia di righe di codice.

Ma il PRD deve essere trattato come un artefatto critico:

PRD
 |
 +-- machine generated
 +-- evidence linked
 +-- human reviewed
 +-- version controlled
 +-- test traceable

Requirement → Evidence → Test

L'evoluzione naturale del pattern Esri potrebbe essere la completa tracciabilità:

Requirement
    |
    v
Evidence
    |
    v
Generated implementation
    |
    v
Automated test

Per esempio:

REQ-GIS-017

"When floor 3 is selected,
only floor 3 content is visible."

        |
        +-- source evidence
        +-- runtime screenshot
        +-- service configuration
        |
        v
Playwright test
        |
        v
ArcGIS runtime assertion

Avremmo quindi una vera catena:

Legacy behavior
      |
      v
Evidence
      |
      v
Requirement
      |
      v
Implementation
      |
      v
Test
      |
      v
Validation

Ed è probabilmente qui che l'agentic software engineering diventa realmente interessante per applicazioni enterprise.

Non è solo un pattern ArcGIS

Sebbene Esri lo mostri sul Building Viewer, il modello è molto più generale.

Potrebbe funzionare altrettanto bene per:

  • ASP.NET WebForms → Blazor;
  • AngularJS → Angular;
  • jQuery → React;
  • ArcGIS JavaScript legacy → ArcGIS Components;
  • old Java application → modern services;
  • desktop client → web application.

La condizione fondamentale è che il sistema legacy sia ancora sufficientemente eseguibile da poter essere osservato.

In questo caso il runtime stesso diventa una forma di documentazione.

Dal source-driven development all'evidence-driven modernization

È forse questo il cambiamento concettuale più interessante.

Tradizionalmente:

Source Code
     |
     v
Migration

Con questo modello:

             Source Code
                  |
Runtime ----------+
                  |
Configuration ----+
                  |
External Data ----+
                  |
Screenshots ------+
                  |
                  v
               Evidence
                  |
                  v
          Behavioral Model
                  |
                  v
             New System

La migrazione diventa quindi evidence-driven.

E questo può essere particolarmente efficace nei sistemi con dieci o quindici anni di storia, dove il codice racconta soltanto una parte della verità.

Una conseguenza interessante per ArcGIS Enterprise

Nel mondo ArcGIS questo approccio potrebbe diventare ancora più potente.

Un discovery agent specializzato potrebbe interrogare automaticamente:

Portal REST API
ArcGIS Server REST
WebMap JSON
WebScene JSON
FeatureServer
MapServer
SceneServer
ImageServer

e costruire un dependency graph:

Application
    |
    +-- WebMap
    |     |
    |     +-- FeatureLayer
    |     +-- MapImageLayer
    |
    +-- WebScene
    |     |
    |     +-- SceneLayer
    |     +-- ElevationLayer
    |
    +-- OAuth Application
    |
    +-- External API

A quel punto il PRD potrebbe essere affiancato da una vera:

GIS Application Dependency Graph

utilizzabile non soltanto per la migrazione, ma anche per:

  • impact analysis;
  • security assessment;
  • dependency auditing;
  • upgrade planning;
  • disaster recovery;
  • documentazione automatica;
  • individuazione di servizi legacy.

La lezione architetturale

L'aspetto più interessante di Rethinking Application Migrations non è il fatto che Esri abbia usato GitHub Copilot o uno specifico frontier model.

Il workflow è in larga misura indipendente dal modello.

Contano soprattutto:

  • contesto;
  • istruzioni;
  • strumenti;
  • evidenze;
  • validazione.

La vera innovazione è il cambio di astrazione:

"convert this code"

diventa:

"understand this system"
        |
        v
"prove what you understood"
        |
        v
"formalize its behavior"
        |
        v
"rebuild it with modern primitives"
        |
        v
"prove that the new system behaves correctly"

Ed è una differenza enorme.

Il coding agent smette di essere soltanto un generatore di codice.

Diventa contemporaneamente:

reverse engineer
requirements analyst
browser operator
developer
tester
architecture assistant

mentre l'architect mantiene la responsabilità delle decisioni, delle policy e dei criteri di accettazione.

Conclusione

Il pattern mostrato da Esri può essere riassunto così:

Legacy App
   |
   v
Runtime Discovery
   |
   v
Evidence Collection
   |
   v
Verified Behavioral PRD
   |
   v
Architecture Instructions
   |
   v
Clean Reimplementation
   |
   v
Visual + Functional Validation
   |
   v
Human Review

Non è semplicemente un modo più veloce di riscrivere una vecchia applicazione.

È un possibile modello per la modernizzazione agentica del software.

E per il mondo GIS è particolarmente interessante, perché una ArcGIS application non è quasi mai soltanto il suo codice: è codice, configurazione, Portal items, servizi REST, dati, WebMap, WebScene e comportamento runtime.

La vera domanda per un coding agent, quindi, non dovrebbe più essere:

“Riesci a convertire questa applicazione?”

ma:

“Riesci prima a dimostrare di aver capito esattamente che cosa questa applicazione fa?”

Solo dopo ha senso lasciargli scrivere quella nuova.


Fonte principale:
Esri — Rethinking Application Migrations, 30 settembre 2026
https://www.esri.com/arcgis-blog/products/js-api-arcgis/geoai/rethinking-application-migrations

Building Viewer — PRD:
https://github.com/Esri/building-viewer/blob/main/prd/PRD.md

Repository instructions:
https://github.com/Esri/building-viewer/blob/main/.github/copilot-instructions.md