VAST · Claude Sonnet 5 · C6++

Vastopolis outbreak investigation — C6++ · implemented

C6++

Designed by Claude Sonnet 5. Attempt to implement the model's own C6+ self-critique as a revised ATWL representation (continuing the C6+ chat). ↓ download raw .atwl

Workflow header & template

workflow vastopolis-outbreak-origin-and-transmission template: characterise (extract-symptom-features) → loop(assess → characterise (refine-lexicon)) → define-unit (filter-illness-events) → define-unit (daily-episodes) → characterise (daily-profile) → define-unit (cluster-days) → contextualise (calendar) → visualise → abstract → generate-knowledge → loop(define-unit (derive-places) → characterise → contextualise → visualise → assess) → abstract (origin-candidates) → assess (origin-uniqueness) → define-unit (origin-candidates) → characterise (downwind-alignment) → loop(define-unit (lag-windows) → characterise (cross-impact) → visualise → assess) → generate-knowledge (airborne-evidence) → loop(characterise (social-mentions) → assess) → define-unit (social-network) → visualise → contextualise (map) → visualise (water-overlay) → abstract (waterborne-pattern) → characterise (zone-incidence) → loop(define-unit (zone-grouping) → characterise (growth-and-residuals) → visualise → abstract (spread-and-p2p-pattern) → generate-knowledge (checklist) → assess) → generate-knowledge (final-report) description: "Visual analytics workflow for identifying the spatio-temporal origin of a flu-like outbreak in Vastopolis from geolocated microblogs, and for adjudicating among candidate transmission mechanisms (airborne, person-to-person, waterborne) using map, population, and wind data. Revised to externalise key clustering/grouping decisions as specifications with assess-driven refinement, to surface origin-candidate ambiguity explicitly, and to make hypothesis comparison across mechanisms iterative rather than a single linear pass."

Input Artifacts

artifact D_microblogs : entities origin: given internal structure: elementary embedment: {space, time} features: - id: text_content value structure: atomic value type: text description: "Raw message text" description: "Geolocated microblog messages posted from mobile devices over several days, each with timestamp, GPS coordinates, and text content" artifact D_map_features : entities origin: given internal structure: elementary embedment: space features: - id: feature_type value structure: atomic value type: categorical description: "Category of map feature: highway, hospital, landmark, water body, water-service area" description: "Static geographic features of the Vastopolis metropolitan area, used as map context" artifact D_zones : entities origin: given internal structure: region embedment: space features: - id: population value structure: atomic value type: numeric description: "Resident population of the zone" description: "13 city zones of Vastopolis with population statistics" artifact D_weather : entities origin: given internal structure: elementary embedment: time features: - id: wind_speed value structure: atomic value type: numeric description: "Daily wind speed" - id: wind_direction value structure: atomic value type: {numeric, spatial} description: "Daily wind direction (bearing)" description: "Daily weather observations including wind speed and direction" artifact D_calendar : entities origin: given internal structure: elementary embedment: time features: - id: date value structure: atomic value type: temporal description: "Calendar date" description: "Calendar days spanning the observation period, used as arrangement context" artifact S_symptom_lexicon : specification origin: given representation form: "keyword lexicon" description: "Flu-related symptom terms and severity indicators (fever, cough, vomiting, hospital, death, etc.) used to seed text extraction" # ============================================================================ # STAGE A: EXTRACT AND VALIDATE ILLNESS-REPORT EVENTS FROM TEXT # (unchanged from previous stage) # ============================================================================ transform T_extract_symptoms : intent: characterise manner: "extract (keyword/entity extraction of symptom and severity terms)" input: D_microblogs, S_symptom_lexicon output: F_symptom_features actor: machine description: "Extract symptom mentions, severity indicators (hospitalization, death), and embedded place references from message text" artifact F_symptom_features : feature(D_microblogs) value structure: vector value type: {categorical, ordinal, text} description: "Per-message symptom type(s), severity level, and any embedded place mentions" loop L_extraction_validation: purpose: "Validate and correct automatically extracted symptom/severity indicators against raw message text before trusting the derived event set" until: "Sampled false positive/negative rate in extracted indicators is acceptable to the analyst" body: transform T_assess_extraction : intent: assess manner: "sample and inspect raw text against extracted indicators" input: F_symptom_features, D_microblogs output: K_extraction_quality actor: human description: "Sample messages and check extracted symptom/severity labels against raw text for false positives and false negatives" artifact K_extraction_quality : knowledge(F_symptom_features) representation form: "quality judgment" description: "Judgment of whether extraction lexicon/rules yield an acceptable false positive/negative rate" if K_extraction_quality indicates refinement needed: then: transform T_refine_lexicon : intent: characterise manner: "refine extraction lexicon/rules" input: D_microblogs, S_symptom_lexicon, K_extraction_quality output: F_symptom_features_r, S_symptom_lexicon_r actor: human description: "Adjust keyword lexicon or extraction rules based on observed errors and re-extract" artifact F_symptom_features_r : feature(D_microblogs) value structure: vector value type: {categorical, ordinal, text} description: "Updated per-message symptom/severity/place-mention indicators" artifact S_symptom_lexicon_r : specification representation form: "keyword lexicon" description: "Revised symptom lexicon" assign: F_symptom_features := F_symptom_features_r S_symptom_lexicon := S_symptom_lexicon_r else: exit loop L_extraction_validation end loop L_extraction_validation transform T_define_illness_events : intent: define-unit manner: "filter messages with validated symptom/severity indicators" input: D_microblogs, F_symptom_features output: D_illness_events actor: hybrid description: "Retain only messages carrying validated illness-related indicators as geolocated, time-stamped illness-report events" artifact D_illness_events : entities internal structure: elementary embedment: {space, time} features: - id: symptom_type value structure: atomic value type: categorical description: "Symptom type(s) mentioned" - id: severity value structure: atomic value type: ordinal description: "Severity level (mild vs. severe/hospitalization/death)" - id: raw_text value structure: atomic value type: text description: "Original message text retained for drill-down" description: "Geolocated, time-stamped illness-report events derived from validated microblog messages" # ============================================================================ # STAGE B: TEMPORAL OVERVIEW - ONSET DETECTION # (unchanged; deliberately left linear - see revision notes) # ============================================================================ transform T_define_days : intent: define-unit manner: "time-partitioning into per-zone daily episodes" input: D_illness_events, D_zones output: D_days actor: machine description: "Aggregate illness events into hourly/6-hour bins and group into daily episodes per zone" artifact D_days : entities internal structure: episode embedment: {set, time} features: - id: hourly_counts value structure: vector value type: numeric description: "Hourly (or 6-hour) event counts within the day, per zone" description: "Per-zone daily episodes of illness-event counts" transform T_characterise_daily_profile : intent: characterise manner: "profile" input: D_days output: F_daily_profile actor: machine description: "Normalise hourly count vectors into comparable daily shape profiles" artifact F_daily_profile : feature(D_days) value structure: vector value type: numeric representation form: "daily count profile" description: "Normalized daily profile shape used for baseline-deviation clustering" transform T_cluster_days : intent: define-unit manner: "cluster-by-similarity of daily profile shape" input: D_days, F_daily_profile output: D_day_clusters, F_day_cluster_label actor: machine description: "Cluster days by profile shape so that days deviating from the pre-outbreak baseline pattern are separated out" artifact D_day_clusters : entities internal structure: group/cluster embedment: set description: "Groups of days with similar profile shape (baseline vs. deviating clusters)" artifact F_day_cluster_label : feature(D_days) value structure: atomic value type: categorical description: "Cluster membership label (baseline vs. deviating) for each day" transform T_arrange_calendar : intent: contextualise manner: "calendar-based" input: D_days, D_calendar output: A_calendar actor: machine description: "Position each per-zone daily episode in its corresponding calendar cell" artifact A_calendar : arrangement(D_days) context: D_calendar principle: "calendar(date, zone)" description: "Calendar-based arrangement of daily episodes per zone" transform T_vis_calendar : intent: visualise manner: "coloured-marks" input: A_calendar, F_day_cluster_label output: V_calendar_clusters actor: machine description: "Calendar view showing cluster membership of each day, per zone" artifact V_calendar_clusters : visualisation(A_calendar, F_day_cluster_label) layout: "calendar grid per zone" form: "coloured marks" encoding: "layout: from A_calendar; colour: from F_day_cluster_label" description: "Visual overview for spotting onset day(s) and earliest-deviating zones" transform T_abstract_onset : intent: abstract manner: "perception-and-interpretation" input: V_calendar_clusters output: P_onset_pattern actor: human description: "Identify the earliest day(s) and zone(s) whose profile breaks from the baseline pattern" artifact P_onset_pattern : pattern(D_days) representation form: "textual description" description: "Description of onset day(s) and earliest-deviating zone(s)" transform T_knowledge_onset : intent: generate-knowledge manner: "formulate-statements" input: P_onset_pattern output: K_onset_candidates actor: human description: "Formulate candidate onset time window and earliest zone(s) as a soft working hypothesis, to be cross-checked against place-level evidence in Stage C" artifact K_onset_candidates : knowledge(D_days) representation form: "statements" description: "Candidate onset time window and earliest-affected zone(s)" # ============================================================================ # STAGE C: SIGNIFICANT-PLACE DERIVATION (REVISED) # Recommendation 1 implemented here: clustering criteria externalised as a # specification, with an assess-driven refinement loop. # Recommendation 2 implemented here: explicit assessment of origin-candidate # uniqueness/ambiguity after clustering has stabilised. # ============================================================================ artifact S_place_clustering : specification origin: given representation form: "parameter settings" description: "Spatial and temporal distance thresholds (and minimum event count) used to derive candidate places from illness events via density-based clustering" loop L_place_derivation: purpose: "Calibrate spatio-temporal clustering criteria so that derived place clusters are coherent, stable, and support reliable per-place incidence time series" until: "Place clusters are spatially/temporally coherent and their membership is stable under minor variation of the clustering thresholds" body: transform T_define_places : intent: define-unit manner: "derive-places (spatio-temporal density clustering)" input: D_illness_events, S_place_clustering output: D_places, F_place_membership actor: machine description: "Cluster illness events jointly by spatial and temporal proximity into candidate significant places, treating isolated events as noise" artifact D_places : entities internal structure: group/cluster embedment: space features: - id: place_extent value structure: atomic value type: spatial description: "Spatial hull/buffer delineating the place" - id: onset_time value structure: atomic value type: temporal description: "Earliest event time within the place cluster" description: "Candidate significant places derived from illness events under the current clustering specification" artifact F_place_membership : feature(D_illness_events) value structure: atomic value type: reference description: "Assignment of each illness event to a place cluster (or noise)" transform T_characterise_place_timeseries : intent: characterise manner: "aggregate" input: D_places, D_illness_events, F_place_membership output: F_place_timeseries actor: machine description: "Compute per-place time series of event counts" artifact F_place_timeseries : feature(D_places) value structure: vector value type: numeric representation form: "time series per place" description: "Event-count time series per candidate place" transform T_characterise_place_incidence : intent: characterise manner: "normalise by population" input: D_places, D_zones, F_place_timeseries output: F_place_incidence actor: machine description: "Normalise place-level event counts by zone population to obtain per-capita incidence" artifact F_place_incidence : feature(D_places) value structure: vector value type: numeric description: "Per-capita incidence time series per place" transform T_arrange_map_places : intent: contextualise manner: "map-based" input: D_places, D_map_features output: A_map_places actor: machine description: "Overlay candidate places on the map context" artifact A_map_places : arrangement(D_places) context: D_map_features principle: "geographic coordinates" description: "Spatial arrangement of candidate places relative to map features" transform T_vis_map_hotspots : intent: visualise manner: "coloured-marks" input: A_map_places, F_place_incidence, D_map_features output: V_map_hotspots actor: machine description: "Map view of candidate places sized/coloured by onset time and per-capita incidence, overlaid on landmarks and water bodies" artifact V_map_hotspots : visualisation(A_map_places, F_place_incidence, D_map_features) layout: "geographic map" form: "coloured marks with size/time encoding" encoding: "position: from A_map_places; colour/size: from F_place_incidence and onset_time; background: D_map_features" description: "Visual basis for judging cluster coherence and for later identifying candidate origin place(s)" transform T_assess_place_clusters : intent: assess manner: "evaluate clustering coherence and stability" input: V_map_hotspots, D_places, F_place_incidence output: K_place_quality actor: human description: "Judge whether place clusters are spatially/temporally coherent, interpretable, and stable under minor threshold changes; decide whether the clustering specification needs adjustment" artifact K_place_quality : knowledge(D_places) representation form: "quality judgment" description: "Judgment of clustering adequacy and stability" if K_place_quality indicates refinement needed: then: transform T_refine_place_clustering : intent: generate-knowledge manner: "adjust parameter settings" input: K_place_quality, S_place_clustering output: S_place_clustering_r actor: human description: "Adjust spatial/temporal distance thresholds based on observed over- or under-segmentation" artifact S_place_clustering_r : specification representation form: "parameter settings" description: "Revised place-clustering thresholds" assign: S_place_clustering := S_place_clustering_r else: exit loop L_place_derivation end loop L_place_derivation transform T_abstract_origin_candidates : intent: abstract manner: "perception-and-interpretation" input: V_map_hotspots output: P_origin_candidates actor: human description: "Identify the earliest and most severe place cluster(s) and note whether each coincides with a specific fixed feature (e.g., reservoir, festival ground) versus diffuse residential spread; more than one candidate may be identified" artifact P_origin_candidates : pattern(D_places) representation form: "textual description" description: "Candidate origin place(s), their co-location with map features, and earliest onset time" transform T_assess_origin_uniqueness : intent: assess manner: "evaluate confidence and uniqueness of origin candidates" input: P_origin_candidates output: K_origin_confidence actor: human description: "Judge whether a single dominant earliest cluster stands out as the origin, or whether several competing candidates remain equally plausible; this judgment is not resolved by further threshold tuning, since it reflects genuine ambiguity in the data rather than a clustering artifact" artifact K_origin_confidence : knowledge(P_origin_candidates) representation form: "quality judgment" description: "Assessment of whether the origin is uniquely identified or remains ambiguous among several candidates" transform T_define_origin_candidates : intent: define-unit manner: "filter/select retained candidate origin places" input: D_places, P_origin_candidates, K_origin_confidence output: D_origin_candidates actor: human description: "Finalise the (possibly plural) set of candidate origin places to be carried forward into mechanism testing; if multiple candidates survive, later stages are applied to each retained candidate rather than forcing a single choice" artifact D_origin_candidates : entities internal structure: elementary embedment: space features: - id: confidence_rank value structure: atomic value type: ordinal description: "Analyst-assigned confidence ranking among retained candidates" description: "Retained candidate origin place(s) carried forward into Stage E and Stage F waterborne testing" # ============================================================================ # STAGE E: WIND-SPREAD CROSS-IMPACT ANALYSIS (AIRBORNE HYPOTHESIS) # Adapted to operate relative to D_origin_candidates (possibly plural); # otherwise structurally unchanged from previous revision. # ============================================================================ transform T_characterise_downwind_alignment : intent: characterise manner: "compute directional alignment relative to wind" input: D_zones, D_weather, D_origin_candidates output: F_downwind_alignment actor: machine description: "For each zone, candidate origin, and day, compute how well the zone's bearing from the candidate origin matches that day's wind direction" artifact F_downwind_alignment : feature(D_zones) value structure: matrix value type: numeric representation form: "daily alignment score per zone per candidate origin" description: "Downwind alignment score per zone relative to each retained candidate origin" artifact S_lag_spec : specification origin: given representation form: "parameter settings" description: "Initial window length, lag range, and tolerance interval for cross-impact analysis between wind and incidence/alignment series" loop L_wind_analysis: purpose: "Compute and calibrate the wind-incidence cross-impact pattern, for each retained candidate origin, to test the airborne transmission hypothesis" until: "Impact matrix is stable/interpretable enough to support a judgment on the airborne hypothesis for each candidate origin" body: transform T_define_lag_windows : intent: define-unit manner: "time-partitioning into sliding windows" input: D_weather, F_downwind_alignment, S_lag_spec output: D_windows actor: machine description: "Partition the wind series and each zone/candidate response series into sliding comparison windows over a range of plausible incubation lags" artifact D_windows : entities internal structure: episode embedment: time features: - id: lag value structure: atomic value type: numeric description: "Lag offset applied in this window" description: "Sliding time windows used to compare the wind series with each zone/candidate response series at varying lags" transform T_characterise_cross_impact : intent: characterise manner: "compute lagged association (tolerance-based)" input: D_windows, D_weather, F_downwind_alignment, S_lag_spec output: F_impact_matrix actor: machine description: "Compute a tolerance-based association measure between the wind base series and each zone's response series, per candidate origin, across the window/lag grid" artifact F_impact_matrix : feature(D_zones) value structure: matrix value type: numeric representation form: "time x lag impact matrix per candidate origin (Ikat-style)" description: "Per-zone, per-candidate matrix of association strength across time windows and lags" transform T_vis_impact : intent: visualise manner: "matrix-plot" input: F_impact_matrix output: V_wind_impact actor: machine description: "Ikat-style visualisation of the time x lag impact matrix for each zone/candidate combination" artifact V_wind_impact : visualisation(F_impact_matrix) layout: "time x lag grid, per zone and candidate origin" form: "matrix plot" encoding: "cell colour: from F_impact_matrix association strength" description: "Visual display for inspecting whether downwind zones show a consistent positive impact at a plausible lag" transform T_assess_impact : intent: assess manner: "evaluate stability and interpretability of impact pattern" input: V_wind_impact, D_weather, F_downwind_alignment output: K_impact_quality actor: human description: "Judge whether current window/lag/tolerance settings yield a stable, interpretable impact pattern" artifact K_impact_quality : knowledge(F_impact_matrix) representation form: "quality judgment" description: "Judgment of impact-matrix stability/interpretability" if K_impact_quality indicates refinement needed: then: transform T_refine_lag_spec : intent: generate-knowledge manner: "adjust parameter settings" input: K_impact_quality, S_lag_spec output: S_lag_spec_r actor: human description: "Adjust window length, lag range, or tolerance" artifact S_lag_spec_r : specification representation form: "parameter settings" description: "Revised window/lag/tolerance settings" assign: S_lag_spec := S_lag_spec_r else: exit loop L_wind_analysis end loop L_wind_analysis transform T_knowledge_airborne : intent: generate-knowledge manner: "formulate-statements" input: V_wind_impact, F_impact_matrix output: K_airborne_evidence actor: human description: "Formulate, per candidate origin, a statement on whether downwind zones show a consistent lagged impact from wind, supporting or refuting airborne transmission from that candidate" artifact K_airborne_evidence : knowledge(F_impact_matrix, D_origin_candidates) representation form: "statements" description: "Evidence for or against airborne transmission, per candidate origin; computed once and treated as fixed evidence in the mechanism-comparison loop below" # ============================================================================ # STAGE F PART 1: PERSON-TO-PERSON EVIDENCE (SOCIAL NETWORK) # Recommendation 3 implemented here: extraction-validation loop added, # mirroring Stage A. # ============================================================================ artifact S_social_lexicon : specification origin: given representation form: "keyword/pattern lexicon" description: "Seed patterns for detecting social/co-location mentions (coworkers, family, shared venues, shared transit lines) in illness- event text" loop L_social_extraction: purpose: "Validate and correct automatically extracted social/co-location mentions against raw message text before trusting the derived co-occurrence structure" until: "Sampled false positive/negative rate in extracted social mentions is acceptable to the analyst" body: transform T_characterise_social_mentions : intent: characterise manner: "extract (co-location/social mentions from text)" input: D_illness_events, S_social_lexicon output: F_social_mentions actor: hybrid description: "Extract mentions of shared social context from illness-event text" artifact F_social_mentions : feature(D_illness_events) value structure: list value type: {text, categorical} description: "Extracted social/co-location references per illness event" transform T_assess_social_extraction : intent: assess manner: "sample and inspect raw text against extracted mentions" input: F_social_mentions, D_illness_events output: K_social_quality actor: human description: "Sample events and check extracted social mentions against raw text for false positives/negatives (e.g., ambiguous pronoun references, unrelated group mentions)" artifact K_social_quality : knowledge(F_social_mentions) representation form: "quality judgment" description: "Judgment of whether extraction acceptably captures genuine social/co-location references" if K_social_quality indicates refinement needed: then: transform T_refine_social_lexicon : intent: characterise manner: "refine extraction lexicon/rules" input: D_illness_events, S_social_lexicon, K_social_quality output: F_social_mentions_r, S_social_lexicon_r actor: human description: "Adjust social-mention lexicon/rules based on observed errors and re-extract" artifact F_social_mentions_r : feature(D_illness_events) value structure: list value type: {text, categorical} description: "Updated social/co-location references" artifact S_social_lexicon_r : specification representation form: "keyword/pattern lexicon" description: "Revised social-mention lexicon" assign: F_social_mentions := F_social_mentions_r S_social_lexicon := S_social_lexicon_r else: exit loop L_social_extraction end loop L_social_extraction transform T_define_social_network : intent: define-unit manner: "derive relational structure from co-occurrence mentions" input: D_illness_events, F_social_mentions output: D_social_network actor: hybrid description: "Build a light co-occurrence network of people/places mentioned together across illness events" artifact D_social_network : entities internal structure: formation features: - id: edge_weight value structure: atomic value type: numeric description: "Strength of co-occurrence link" description: "Co-occurrence network of persons/places mentioned together in illness reports" transform T_vis_social_network : intent: visualise manner: "node-link-diagram" input: D_social_network output: V_social_network actor: machine description: "Node-link visualisation of the social/co-location co-occurrence network; computed once and reused as fixed evidence inside the mechanism-comparison loop below" artifact V_social_network : visualisation(D_social_network) layout: "force-directed network layout" form: "node-link diagram" encoding: "edges: from D_social_network edge_weight" description: "Visualisation for inspecting chains of social/mobility contact among cases" # ============================================================================ # STAGE F PART 2: WATERBORNE EVIDENCE # Adapted to overlay the finalised D_origin_candidates rather than all # places; otherwise unchanged in substance. # ============================================================================ transform T_arrange_map_origin_candidates : intent: contextualise manner: "map-based" input: D_origin_candidates, D_map_features output: A_map_origin_candidates actor: machine description: "Position retained candidate origins on the map context, including the water-body and water-service-area layers" artifact A_map_origin_candidates : arrangement(D_origin_candidates) context: D_map_features principle: "geographic coordinates" description: "Spatial arrangement of candidate origins relative to water bodies and service areas" transform T_vis_water_overlay : intent: visualise manner: "map-based overlay" input: A_map_origin_candidates, D_map_features output: V_water_overlay actor: machine description: "Overlay candidate origin(s) directly on the water-body layer and any known water-service-area boundaries" artifact V_water_overlay : visualisation(A_map_origin_candidates, D_map_features) layout: "geographic map" form: "coloured marks over water/service-area layer" encoding: "candidate-origin marks: from A_map_origin_candidates; background: water bodies/service areas from D_map_features" description: "Visual check of whether candidate origins are coincident with water sources or service-area boundaries" transform T_abstract_waterborne_pattern : intent: abstract manner: "perception-and-interpretation" input: V_water_overlay, D_origin_candidates output: P_waterborne_pattern actor: human description: "Assess, per candidate origin, whether it coincides with a water source and whether the map suggests water-service-area alignment rather than road proximity or social chains; computed once and reused as fixed evidence in the mechanism-comparison loop below" artifact P_waterborne_pattern : pattern(D_origin_candidates) representation form: "textual description" description: "Evidence for/against waterborne transmission, per candidate origin" # ============================================================================ # STAGE D+F SYNTHESIS: ITERATIVE ZONE-GROUPING AND MECHANISM COMPARISON # Substantially restructured (recommendations 4 and 5): the former linear # Stage D (zone grouping/growth modelling) and the mechanism-comparison step # of former Stage F are merged into a single loop that redefines the # zone-grouping criterion when evidence is inconclusive, and that folds the # conclusiveness check directly into the loop's own assess step rather than # treating it as a separate downstream step. # ============================================================================ transform T_characterise_zone_incidence : intent: characterise manner: "aggregate and normalise by population" input: D_zones, D_illness_events output: F_zone_incidence actor: machine description: "Compute per-capita incidence time series for each of the 13 zones; computed once, independent of the grouping criterion used below" artifact F_zone_incidence : feature(D_zones) value structure: vector value type: numeric representation form: "time series per zone" description: "Daily per-capita incidence time series per zone" transform T_arrange_map_zones : intent: contextualise manner: "map-based" input: D_zones, D_map_features output: A_map_zones actor: machine description: "Position zones on the map context, including highways and water-service areas; positions are fixed regardless of grouping criterion, so this is computed once outside the loop" artifact A_map_zones : arrangement(D_zones) context: D_map_features principle: "geographic coordinates" description: "Spatial arrangement of zones relative to map features" artifact S_zone_grouping : specification origin: given representation form: "method choice" description: "Criterion currently used to group the 13 zones: initially 'temporal-incidence-similarity'; alternatives to be tried if evidence remains inconclusive include 'water-service-area' and 'mobility-network-proximity'" loop L_hypothesis_testing: purpose: "Iteratively test whether the current zone-grouping criterion, combined with the fixed airborne and waterborne evidence lines, yields conclusive support for one transmission mechanism; if not, redefine the zone-grouping criterion and re-test" until: "The mechanism-comparison checklist is conclusive for a single dominant transmission mechanism, or all analytically motivated alternative grouping criteria have been tried without resolving the ambiguity" body: transform T_define_zone_groups : intent: define-unit manner: "cluster/group zones according to current criterion" input: D_zones, F_zone_incidence, D_map_features, S_zone_grouping output: D_zone_groups, F_zone_group_label actor: machine description: "Group the 13 zones according to the current criterion (temporal-incidence similarity, water-service area, or mobility-network proximity)" artifact D_zone_groups : entities internal structure: group/cluster embedment: space description: "Groups of zones under the current grouping criterion" artifact F_zone_group_label : feature(D_zones) value structure: atomic value type: categorical description: "Group label for each zone under the current criterion" transform T_vis_zone_groups : intent: visualise manner: "coloured-marks" input: A_map_zones, F_zone_group_label, D_map_features output: V_zone_groups_map actor: machine description: "Map view of zones coloured by current group, overlaid on the highway network, to check spatial contiguity vs. dispersion" artifact V_zone_groups_map : visualisation(A_map_zones, F_zone_group_label, D_map_features) layout: "geographic map" form: "coloured region marks" encoding: "position: from A_map_zones; colour: from F_zone_group_label; background: highway layer" description: "Visual check of zone-group spatial coherence relative to roads/water areas under the current criterion" transform T_build_growth_model : intent: build-model manner: "fit-growth-curve" input: F_zone_incidence, D_zone_groups output: M_growth actor: machine description: "Fit a growth curve to each zone group's representative incidence curve" artifact M_growth : model(F_zone_incidence, D_zone_groups) model type: "growth model" representation form: "exponential/logistic curve parameters per group" description: "Growth model of outbreak expansion per zone group under the current grouping criterion" transform T_characterise_residuals : intent: characterise manner: "compute-statistics (residuals)" input: F_zone_incidence, M_growth output: F_growth_residuals actor: machine description: "Compute residuals of observed incidence relative to the fitted group growth curve" artifact F_growth_residuals : feature(D_zones) value structure: vector value type: numeric description: "Residual time series per zone" transform T_vis_residuals : intent: visualise manner: "line-graph / coloured-marks on map" input: F_growth_residuals, A_map_zones output: V_residuals_map actor: machine description: "Highlight zones with large residuals relative to the current grouping's growth model" artifact V_residuals_map : visualisation(F_growth_residuals, A_map_zones) layout: "geographic map / aligned timelines" form: "coloured marks / line graph" encoding: "colour/line deviation: from F_growth_residuals; position: from A_map_zones" description: "Highlights zones deviating from the current grouping's dominant growth pattern" transform T_abstract_spread_pattern : intent: abstract manner: "perception-and-interpretation" input: V_zone_groups_map, V_residuals_map, D_map_features output: P_spread_pattern actor: human description: "Interpret whether the current zone grouping follows the highway/mobility network or the water-service-area layout, and whether it plausibly explains the observed growth pattern" artifact P_spread_pattern : pattern(D_zone_groups, F_growth_residuals) representation form: "textual description" description: "Description of spread geometry under the current grouping criterion" transform T_abstract_p2p_pattern : intent: abstract manner: "perception-and-interpretation" input: V_social_network, V_zone_groups_map output: P_p2p_pattern actor: human description: "Assess, against the current zone-groups map, whether cases chain along social/mobility links and whether spatial growth tracks the highway/transit network" artifact P_p2p_pattern : pattern(D_social_network, D_zone_groups) representation form: "textual description" description: "Evidence for/against person-to-person transmission under the current grouping criterion" transform T_knowledge_mechanism_checklist : intent: generate-knowledge manner: "formulate-statements (comparison checklist)" input: K_airborne_evidence, P_p2p_pattern, P_waterborne_pattern, P_spread_pattern output: K_mechanism_assessment actor: human description: "Compile a diagnostic checklist comparing the expected signature of each mechanism against observed evidence: the airborne and waterborne evidence lines are fixed across iterations, while the person-to-person and spread-pattern evidence reflect the current zone-grouping criterion" artifact K_mechanism_assessment : knowledge(K_airborne_evidence, P_p2p_pattern, P_waterborne_pattern, P_spread_pattern) representation form: "comparison checklist / statements" description: "Structured comparison of candidate transmission mechanisms against observed diagnostic signatures, under the current zone-grouping criterion" transform T_assess_conclusiveness : intent: assess manner: "evaluate decisiveness of mechanism comparison" input: K_mechanism_assessment output: K_conclusiveness actor: human description: "Judge whether the checklist evidence decisively favours one mechanism, or remains ambiguous (e.g., moderate support for two mechanisms simultaneously); if ambiguous, judge whether an untried grouping criterion could plausibly discriminate further" artifact K_conclusiveness : knowledge(K_mechanism_assessment) representation form: "quality judgment" description: "Judgment of whether the mechanism comparison is decisive, and if not, whether further grouping criteria remain worth testing" if K_conclusiveness indicates inconclusive and untried criteria remain: then: transform T_refine_zone_grouping : intent: generate-knowledge manner: "select alternative grouping criterion" input: K_conclusiveness, S_zone_grouping output: S_zone_grouping_r actor: human description: "Select the next untried grouping criterion (e.g., switch from temporal-incidence similarity to water-service-area or mobility-network proximity) based on which evidence line remains ambiguous" artifact S_zone_grouping_r : specification representation form: "method choice" description: "Revised zone-grouping criterion" assign: S_zone_grouping := S_zone_grouping_r else: exit loop L_hypothesis_testing end loop L_hypothesis_testing

Stage G: Synthesis And Reporting

transform T_synthesise_report : intent: generate-knowledge manner: "write-summary" input: K_onset_candidates, P_origin_candidates, K_mechanism_assessment, K_conclusiveness output: K_final_report actor: human description: "Synthesise the probable origin place(s) and time window, the dominant spread pattern, the best-supported transmission mechanism (or the residual ambiguity, if evidence remained inconclusive after exhausting alternative grouping criteria), into an evidence-linked report for emergency management" artifact K_final_report : knowledge(D_origin_candidates, D_zone_groups, K_mechanism_assessment) representation form: "statements / report" description: "Evidence-linked report on outbreak origin, spread pattern, and most probable transmission mechanism, to guide deployment of emergency management resources"