VAST · GPT-5.6-Terra · C2

Vastopolis outbreak investigation — C2 · ATWL + example

C2

Raw session log. Atwl spec + one worked example (hitl).

4 turns (2 user · 2 assistant) json raw log

1 Researcher

You have received two files: the ATWL specification, which defines a formal language for representing visual analytics workflows, and an example workflow expressed in ATWL. Please read both carefully before we proceed.

The ATWL specification describes the language's artifact types, transform intents, actor designations, loop constructs, and syntax. The example workflow illustrates how these elements are used together to describe a specific visual analytics process. Note that the example represents one type of workflow among many possible; its specific analytical structure reflects its particular task and should not be treated as a template that must be followed for other tasks. What the example illustrates is how the language is used — the syntax, the vocabulary, and the conventions for organising artifacts, transforms, and loops — not what analytical structure any given task requires.

In the next message I will describe a specific visual analytics design task. Your job will be to design an analytical workflow that addresses the task, and to express your recommendation both in natural language (for readability) and in ATWL (for structural precision). The natural-language description should explain the analytical logic of the workflow; the ATWL representation should formally specify the artifacts, transforms, loops, actors, and control flow.

Before we proceed, could you briefly confirm that you have understood the ATWL specification and the example, and let me know if you have any questions about the language or the syntax?

2 Model

I have understood the ATWL specification and the example workflow.

ATWL represents visual-analytics workflows through: - Artifacts: entities, features, arrangements, visualisations, patterns, models, knowledge, and specifications. - Transforms: each with one generic intent, optional manner, explicit inputs/outputs, and a human, machine, or hybrid actor. - Control flow: loops, conditionals, and assignments for iterative refinement. - Workflow templates: concise summaries of the primary analytical stages.

I also understand that the example demonstrates ATWL syntax and conventions—not a required analytical structure. For the next task, I will derive a workflow appropriate to its own analytical goals, explain its logic in natural language, and provide a formally structured ATWL specification.

I have no questions about the language or syntax at this stage.

3 Researcher

A public health team in Vastopolis, a metropolitan area of about two million residents, has observed a sharp increase in flu-like illnesses over the past few days, with several deaths believed to be associated with the current outbreak. The team wants to understand where the outbreak started and how the infection is being transmitted (person-to-person, airborne, waterborne, or something else) so that emergency management resources can be deployed appropriately.

The available data consists of: geolocated microblog messages posted from mobile devices over a period of several days, each with a timestamp, GPS coordinates, and text content; a map of the metropolitan area showing highways, hospitals, landmarks, and water bodies; population statistics for 13 city zones; and daily weather observations including wind speed and direction.

The analyst will need to inspect intermediate results visually and use domain knowledge to interpret patterns and make judgements at each stage.

Design an analytical workflow for this problem.

4 Model

Building models for hypotheses

I'm considering how to build models based on different hypotheses. For a person-to-person model, I might look at factors like population density and how locations are connected by roads. Microblogs don't provide much on contacts or mobility, so I’d use a statistical diffusion model focusing on lag proximity and population along highways. For airborne diffusion, I’d consider wind direction and how it affects downwind areas. Waterborne models might rely on proximity and downstream effects.

Evaluating relevance loops

I'm considering how to handle a return to the relevance loop or a recompute if the posts aren't adequate. There's talk of ATWL control being nested in an overall loop, but that might be overkill. It seems the requirement is for an analyst to inspect intermediate stages, rather than formalizing every possible backtracking. I also see that there's a visual relevance and visual hypothesis loop in play here that needs attention.

Considering model artifact updates

I'm thinking about the potential need for model artifact versions within the loop for M_competing. It seems like using the same reference rather than just assigning values could be useful. Maybe I should take the initial output of M_classifier and then use the refined version from M_r. As I loop through, I could fit the latest model with the most updated S in each iteration. That could help streamline the process!

Planning design output

The question is about designing a recommendation for "where the outbreak started and how it was transmitted." I have a candidate source and a clear mechanism in my posterior rankings, which is a good start! I think I might need around 400 lines for the output. However, I want to aim for clarity and brevity, so I’ll try to condense it down to about 230 lines. I’ll use code-fenced text with the atwl language identifier, avoiding any math or boxed elements.

Analytical logic

This workflow treats microblogs as a syndromic proxy, not as confirmed infection records. It first identifies messages likely to describe flu-like illness, then aggregates them into zone-by-day outbreak indicators normalized by population.

The analyst visually examines maps and time series to identify candidate origin areas based on the earliest sustained excess of illness-related activity—not simply the first isolated post. The workflow then compares alternative transmission explanations:

  • Person-to-person: spread through adjacent or highly connected zones, population density, and transport corridors.
  • Airborne: downwind and time-lagged propagation consistent with observed wind.
  • Water-associated: clustering near water bodies or spatial patterns plausibly associated with water infrastructure.
  • Other/local source: a localized point-source pattern near a landmark, facility, or event area.

The models provide comparative evidence rather than causal proof. The analyst iteratively inspects evidence, adjusts assumptions or lags, and may conclude that the available data cannot reliably distinguish transmission routes. The final output identifies candidate source locations, ranks transmission explanations with uncertainty, recommends resource deployment, and specifies additional data required for confirmation—especially confirmed case, death, contact, environmental, and water-quality data.

workflow vastopolis-flu-outbreak-investigation
  template: loop(characterise -> visualise -> abstract -> assess) ->
            define-unit -> define-unit -> characterise ->
            contextualise -> visualise -> abstract ->
            loop(build-model -> characterise -> visualise -> abstract -> assess) ->
            generate-knowledge
  description: "Human-in-the-loop investigation of a suspected flu-like
    outbreak using geolocated microblogs as a syndromic surveillance proxy.
    The workflow identifies candidate origins and compares person-to-person,
    airborne, water-associated, and other local-source explanations while
    preserving uncertainty."

# ============================================================================
# INPUT DATA, CONTEXT, AND PRIOR KNOWLEDGE
# ============================================================================

artifact D_posts : entities
  origin: given
  internal structure: elementary
  embedment: {space, time}
  features:
    - id: timestamp
      value structure: atomic
      value type: temporal
      description: "Time at which the message was posted"
    - id: location
      value structure: atomic
      value type: spatial
      description: "GPS coordinate associated with the mobile device"
    - id: text
      value structure: atomic
      value type: text
      description: "Microblog message content"
  description: "Geolocated microblog messages posted during the suspected
    outbreak period"

artifact D_zones : entities
  origin: given
  internal structure: region
  embedment: space
  features:
    - id: zone_id
      value structure: atomic
      value type: reference
      description: "Identifier of one of the 13 metropolitan zones"
    - id: population
      value structure: atomic
      value type: numeric
      description: "Resident population of the zone"
    - id: geometry
      value structure: atomic
      value type: spatial
      description: "Zone boundary geometry"
  description: "Metropolitan zones used for population-normalised
    aggregation and emergency-resource planning"

artifact D_geography : entities
  origin: given
  internal structure: elementary
  embedment: space
  features:
    - id: geographic_feature_type
      value structure: atomic
      value type: categorical
      description: "Highway, hospital, landmark, water body, or other map feature"
    - id: geometry
      value structure: atomic
      value type: spatial
      description: "Spatial geometry of the geographic feature"
  description: "Reference map features, including highways, hospitals,
    landmarks, and water bodies"

artifact D_weather : entities
  origin: given
  internal structure: elementary
  embedment: time
  features:
    - id: wind_speed
      value structure: atomic
      value type: numeric
      description: "Observed daily wind speed"
    - id: wind_direction
      value structure: atomic
      value type: spatial
      description: "Observed daily wind direction"
  description: "Daily weather observations during the investigation period"

artifact K_epidemiology : knowledge(D_posts, D_zones, D_weather)
  origin: given
  representation form: "domain rules and expected signatures"
  description: "Public-health knowledge about flu-like symptom language,
    plausible reporting biases, plausible transmission signatures, and the
    distinction between syndromic signals and confirmed infections"

artifact S_relevance : specification
  origin: given
  representation form: "method choice and thresholds"
  description: "Initial rules and model settings for identifying posts likely
    to describe flu-like illness, including symptom terms, negation handling,
    language variants, confidence threshold, and exclusion criteria"

artifact S_hypothesis : specification
  origin: given
  representation form: "comparative modelling configuration"
  description: "Initial temporal lags, spatial neighbourhood definitions,
    candidate transmission mechanisms, uncertainty treatment, and criteria
    for comparing person-to-person, airborne, water-associated, and
    local-source explanations"

# ============================================================================
# STEP 1: ITERATIVELY IDENTIFY ILLNESS-RELATED MICROBLOG POSTS
# ============================================================================

loop L_relevance_refinement:
  purpose: "Develop an interpretable and sufficiently reliable syndromic
    signal from unstructured microblog text"
  until: "The analyst judges that illness-related messages are adequately
    distinguished from unrelated, historical, sarcastic, and non-local posts"
  body:

    transform T_score_posts :
      intent: characterise
      manner: "text encoding and illness relevance scoring"
      input: D_posts, K_epidemiology, S_relevance
      output: F_illness_score
      actor: hybrid
      description: "Extract symptom expressions, illness mentions, negation,
        severity language, and relevance confidence from post text"

    artifact F_illness_score : feature(D_posts)
      value structure: vector
      value type: {numeric, categorical}
      representation form: "illness relevance score and linguistic indicators"
      description: "Per-post probability of describing a current local
        flu-like illness and associated symptom-language indicators"

    transform T_visualise_posts :
      intent: visualise
      manner: "linked text and map inspection"
      input: D_posts, F_illness_score
      output: V_post_relevance
      actor: machine
      description: "Show sampled messages, relevance scores, locations, and
        posting times so the analyst can inspect false positives and omissions"

    artifact V_post_relevance : visualisation(D_posts, F_illness_score)
      layout: "linked message list, map, and time histogram"
      form: "text records, coloured map points, and bars"
      encoding: "colour indicates illness relevance score; map position comes
        from GPS coordinates; time histogram shows posting volume"
      description: "Interactive inspection view for validating the syndromic
        message-identification process"

    transform T_interpret_language :
      intent: abstract
      manner: "perception-and-interpretation"
      input: V_post_relevance, F_illness_score, K_epidemiology
      output: P_language_patterns
      actor: human
      description: "Identify meaningful symptom vocabulary, ambiguous phrases,
        reporting artefacts, and systematic false-positive message types"

    artifact P_language_patterns : pattern(D_posts, F_illness_score)
      representation form: "annotated linguistic categories"
      description: "Observed illness-language patterns and misleading message
        categories relevant to flu-like syndromic surveillance"

    transform T_assess_relevance :
      intent: assess
      manner: "judge classification adequacy"
      input: V_post_relevance, P_language_patterns, F_illness_score
      output: K_relevance_quality, S_relevance_r
      actor: human
      description: "Assess whether the relevance signal is sufficiently
        credible for aggregate surveillance and, if needed, formulate
        revised scoring rules or thresholds"

    artifact K_relevance_quality : knowledge(F_illness_score, V_post_relevance)
      representation form: "quality judgment"
      description: "Analyst judgment about the adequacy, bias, and limitations
        of the illness-message relevance classification"

    artifact S_relevance_r : specification
      representation form: "revised method choice and thresholds"
      description: "Updated linguistic rules, confidence threshold, or
        exclusion criteria for illness-message identification"

    if K_relevance_quality indicates refinement needed:
      then:
        assign:
          S_relevance := S_relevance_r
      else:
        exit loop L_relevance_refinement

end loop L_relevance_refinement

# ============================================================================
# STEP 2: DEFINE OUTBREAK UNITS AND COMPUTE SPATIOTEMPORAL INDICATORS
# ============================================================================

transform T_select_illness_posts :
  intent: define-unit
  manner: "filter by illness relevance"
  input: D_posts, F_illness_score, S_relevance
  output: D_illness_posts
  actor: hybrid
  description: "Retain posts judged sufficiently likely to describe a
    current flu-like illness"

artifact D_illness_posts : entities
  internal structure: elementary
  embedment: {space, time}
  features:
    - id: illness_confidence
      value structure: atomic
      value type: numeric
      description: "Confidence that the post describes flu-like illness"
    - id: symptom_terms
      value structure: list
      value type: text
      description: "Extracted symptom and illness expressions"
  description: "Filtered geolocated posts forming the syndromic surveillance
    signal for the outbreak investigation"

transform T_aggregate_zone_days :
  intent: define-unit
  manner: "space-time aggregation by zone and day"
  input: D_illness_posts, D_zones
  output: D_zone_days
  actor: machine
  description: "Aggregate illness-related posts into daily episodes for each
    city zone, retaining constituent messages for drill-down inspection"

artifact D_zone_days : entities
  internal structure: episode
  embedment: {space, time}
  features:
    - id: zone_id
      value structure: atomic
      value type: reference
      description: "Zone represented by the zone-day episode"
    - id: date
      value structure: atomic
      value type: temporal
      description: "Calendar day represented by the episode"
  description: "Zone-by-day syndromic surveillance episodes containing
    illness-related microblog messages"

transform T_characterise_outbreak :
  intent: characterise
  manner: "population-normalised outbreak profiling"
  input: D_zone_days, D_zones
  output: F_outbreak_signal
  actor: machine
  description: "Compute illness-post counts, population-normalised rates,
    temporal changes, excess activity, and uncertainty caused by low volume"

artifact F_outbreak_signal : feature(D_zone_days)
  value structure: vector
  value type: numeric
  representation form: "daily syndromic incidence profile"
  description: "Counts, rates per population, growth measures, anomaly scores,
    and uncertainty indicators for each zone-day"

transform T_characterise_context :
  intent: characterise
  manner: "derive environmental and propagation relations"
  input: D_zone_days, D_zones, D_geography, D_weather
  output: F_exposure_context, F_propagation_relations
  actor: machine
  description: "Derive zone-day descriptors and lagged relations involving
    population density, spatial adjacency, highways, hospitals, water
    proximity, wind direction, and wind speed"

artifact F_exposure_context : feature(D_zone_days)
  value structure: vector
  value type: {numeric, categorical}
  description: "Population, geographic, weather, and infrastructure context
    associated with each zone-day"

artifact F_propagation_relations : feature(D_zone_days)
  value structure: relational configuration
  representation form: "directed lagged zone-day relation graph"
  description: "Candidate propagation relations between zone-days based on
    adjacency, transport connectivity, wind alignment, and water proximity"

# ============================================================================
# STEP 3: VISUALLY IDENTIFY CANDIDATE ORIGIN AREAS AND DIFFUSION PATTERNS
# ============================================================================

transform T_arrange_zone_days :
  intent: contextualise
  manner: "map-based"
  input: D_zone_days, D_zones
  output: A_zone_map
  actor: machine
  description: "Place each zone-day episode in its corresponding metropolitan
    zone so time-filtered outbreak maps can be inspected"

artifact A_zone_map : arrangement(D_zone_days)
  context: D_zones
  principle: "zone identifier mapped to zone geometry"
  description: "Map arrangement of zone-day outbreak episodes"

transform T_visualise_situation :
  intent: visualise
  manner: "coordinated spatiotemporal outbreak display"
  input: A_zone_map, F_outbreak_signal, F_exposure_context,
         D_geography, D_weather
  output: V_outbreak_situation
  actor: machine
  description: "Display animated and time-linked maps, zone time series,
    wind vectors, population-normalised rates, highways, hospitals, and
    water bodies"

artifact V_outbreak_situation : visualisation(A_zone_map, F_outbreak_signal,
    F_exposure_context, D_geography, D_weather)
  layout: "linked metropolitan map, zone time series, and temporal overview"
  form: "choropleth regions, proportional symbols, line graphs, and wind vectors"
  encoding: "zone colour and symbol size show population-normalised illness
    activity; time controls select dates; overlays show geographic features
    and observed wind direction"
  description: "Interactive situational-awareness display for locating early
    sustained activity and visually inspecting possible spread pathways"

transform T_abstract_observed_patterns :
  intent: abstract
  manner: "perception-and-interpretation"
  input: V_outbreak_situation, F_outbreak_signal, F_propagation_relations
  output: P_observed_diffusion
  actor: human
  description: "Identify candidate source zones, timing of sustained excess,
    wave-like spread, spatial clusters, anomalies, and patterns inconsistent
    with a single simple outbreak explanation"

artifact P_observed_diffusion : pattern(D_zone_days, F_outbreak_signal)
  representation form: "candidate foci and spatiotemporal pattern descriptions"
  description: "Analyst-identified candidate origin areas and observed
    diffusion structures, explicitly distinguished from confirmed sources"

# ============================================================================
# STEP 4: ITERATIVELY COMPARE TRANSMISSION EXPLANATIONS
# ============================================================================

loop L_hypothesis_comparison:
  purpose: "Compare plausible transmission mechanisms and determine whether
    the available evidence supports a defensible operational conclusion"
  until: "A best-supported explanation, or a justified conclusion that the
    data cannot distinguish mechanisms, has been reached with documented
    uncertainty"
  body:

    transform T_build_mechanism_models :
      intent: build-model
      manner: "fit competing spatiotemporal transmission models"
      input: F_outbreak_signal, F_exposure_context, F_propagation_relations,
             P_observed_diffusion, K_epidemiology, S_hypothesis
      output: M_mechanism_models
      actor: hybrid
      description: "Fit and compare models representing person-to-person
        diffusion, wind-associated airborne spread, water-associated
        clustering, and localized or other point-source mechanisms"

    artifact M_mechanism_models : model(F_outbreak_signal,
        F_exposure_context, F_propagation_relations)
      model type: "comparative spatiotemporal explanatory models"
      representation form: "set of competing lagged diffusion and source models"
      description: "Alternative formal explanations of observed zone-day
        illness activity; model comparison measures evidence rather than
        proving a causal transmission route"

    transform T_characterise_model_evidence :
      intent: characterise
      manner: "compute model fit and diagnostic evidence"
      input: D_zone_days, F_outbreak_signal, F_exposure_context,
             F_propagation_relations, M_mechanism_models
      output: F_hypothesis_evidence
      actor: machine
      description: "Calculate comparative fit, residuals, uncertainty,
        predicted propagation, and local evidence for each transmission
        hypothesis"

    artifact F_hypothesis_evidence : feature(D_zone_days)
      value structure: vector
      value type: numeric
      representation form: "hypothesis fit, residual, and uncertainty profiles"
      description: "Zone-day evidence indicating how well competing
        explanations account for observed syndromic activity"

    transform T_visualise_hypothesis_evidence :
      intent: visualise
      manner: "comparative model diagnostics display"
      input: A_zone_map, F_outbreak_signal, F_hypothesis_evidence,
             M_mechanism_models, D_geography, D_weather
      output: V_hypothesis_evidence
      actor: machine
      description: "Compare observed and predicted spread, residual maps,
        temporal lags, downwind alignment, water proximity, and transport
        connectivity in coordinated views"

    artifact V_hypothesis_evidence : visualisation(A_zone_map,
        F_outbreak_signal, F_hypothesis_evidence, M_mechanism_models,
        D_geography, D_weather)
      layout: "linked observed-versus-predicted maps, timelines, and
        hypothesis comparison panels"
      form: "choropleths, flow arrows, residual marks, line graphs, and
        comparative score plots"
      encoding: "map panels show observed and model-predicted zone activity;
        arrows show candidate propagation relations; colour and residual
        marks show local model agreement or disagreement"
      description: "Interactive evidence display used to inspect whether
        apparent transmission signatures are coherent, robust, and plausible"

    transform T_interpret_mechanism_evidence :
      intent: abstract
      manner: "perception-and-interpretation"
      input: V_hypothesis_evidence, F_hypothesis_evidence,
             K_epidemiology
      output: P_mechanism_evidence
      actor: human
      description: "Interpret model evidence in public-health context;
        identify support, contradictions, confounding, and uncertainty for
        each candidate transmission mechanism"

    artifact P_mechanism_evidence : pattern(M_mechanism_models,
        F_hypothesis_evidence)
      representation form: "ranked mechanism evidence statements"
      description: "Interpreted regularities supporting or weakening
        person-to-person, airborne, water-associated, or local-source
        explanations"

    transform T_assess_hypotheses :
      intent: assess
      manner: "evaluate explanatory adequacy and operational usefulness"
      input: V_hypothesis_evidence, P_mechanism_evidence,
             M_mechanism_models, K_epidemiology
      output: K_hypothesis_assessment, S_hypothesis_r
      actor: human
      description: "Judge whether model assumptions, evidence, uncertainty,
        and visual explanations are adequate for a response decision;
        formulate revised lags, constraints, or comparison settings if needed"

    artifact K_hypothesis_assessment : knowledge(M_mechanism_models,
        P_mechanism_evidence)
      representation form: "quality judgment and uncertainty assessment"
      description: "Assessment of whether the evidence adequately distinguishes
        mechanisms, identifies a plausible candidate source, and supports
        emergency action"

    artifact S_hypothesis_r : specification
      representation form: "revised comparative modelling configuration"
      description: "Updated temporal lags, spatial relations, constraints,
        or robustness checks required for another hypothesis-comparison cycle"

    if K_hypothesis_assessment indicates further comparison needed:
      then:
        assign:
          S_hypothesis := S_hypothesis_r
      else:
        exit loop L_hypothesis_comparison

end loop L_hypothesis_comparison

# ============================================================================
# STEP 5: PRODUCE OPERATIONAL FINDINGS AND DATA-REQUEST RECOMMENDATIONS
# ============================================================================

transform T_generate_response_knowledge :
  intent: generate-knowledge
  manner: "formulate-statements and recommendations"
  input: P_observed_diffusion, P_mechanism_evidence,
         K_hypothesis_assessment, K_relevance_quality,
         M_mechanism_models, D_zones, D_geography
  output: K_outbreak_assessment, K_response_recommendations,
          K_confirmation_data_needs
  actor: human
  description: "Formulate a public-health assessment that states candidate
    origin zones, ranked transmission explanations, confidence and caveats,
    recommended deployment actions, and the additional evidence needed to
    validate the conclusions"

artifact K_outbreak_assessment : knowledge(P_observed_diffusion,
    P_mechanism_evidence, M_mechanism_models)
  representation form: "qualified situational assessment"
  description: "Candidate outbreak origin area or areas, timing of emergence,
    ranked transmission explanations, supporting evidence, contradictory
    evidence, and explicit uncertainty"

artifact K_response_recommendations : knowledge(K_outbreak_assessment,
    D_zones, D_geography)
  representation form: "prioritised emergency-response recommendations"
  description: "Recommended deployment of testing, clinical capacity,
    communications, environmental investigation, and surveillance resources
    conditional on the best-supported mechanism and affected zones"

artifact K_confirmation_data_needs : knowledge(K_outbreak_assessment)
  representation form: "data-collection recommendations"
  description: "Required confirmation data, such as confirmed case and death
    line lists, laboratory results, contact information, mobility data,
    water-quality samples, water-network information, and environmental
    sampling results"