{
  "chat_uuid": "81cd3a0e-f359-4d99-b587-b4902c01b515",
  "history": [
    {
      "content": "You have received three files: the ATWL specification, which defines a formal language for representing visual analytics workflows; an example workflow expressed in ATWL; and a document titled ATWL Library: Titles and ATWL Representations, which contains 53 visual analytics workflows drawn from the published research literature, each formalised in ATWL. The library was curated by our research group.\n\nPlease read all three carefully before we proceed.\n\nThe 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.\n\nThe library is a resource of formalised workflows that you may consult when designing your recommendation. Each library workflow addresses a specific analytical problem in a specific domain. You may draw on the library to identify workflow structures, iteration patterns, artifact typing conventions, or methodological approaches that could inform your recommendation for the target task. You may combine elements from multiple library workflows, adapt them, or design new elements as the task requires. You are not obliged to use the library, but you should treat it as a substantive source of design ideas.\n\nIn 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. Where you draw on specific library workflows, please cite them by name so the sources of your recommendation are traceable.\n\nBefore we proceed, could you briefly confirm that you have absorbed the specification, the example, and the library, and let me know if you have any questions about the language, the syntax, or the library before the task is described?\n\nYou need to reply in English.",
      "role": "user"
    },
    {
      "content": "I've read all three documents carefully: the ATWL specification (artifact types, transform intents, control structures, syntax), the example workflow (behaviour-pattern-recognition-in-time-series, illustrating iterative feature engineering and model refinement for trajectory classification), and the full 53-workflow library.\n\nA few observations that will inform how I use these materials once you describe the task:\n\n**On the specification**: I've absorbed the distinctions that matter most for producing precise ATWL — particularly the difference between internal structure and embedment for entities; the difference between pattern (descriptive regularity), knowledge (interpreted statement — evaluative from assess vs. substantive from generate-knowledge), and specification (control knowledge); and the loop/conditional/assignment conventions including the two termination styles (explicit assessment vs. implicit).\n\n**On the example**: I understand this illustrates one particular analytical shape (episode definition → iterative clustering/feature refinement → exemplar labeling → supervised model training → iterative model refinement → synthesis) suited to its specific task (behavioral pattern recognition in trajectories). I won't treat its structure as a mandatory template.\n\n**On the library**: I now have a working sense of the range of structural idioms available — e.g., cluster-calendar's single refinement loop with explicit parameter adjustment; MobilityGraphs' and van Andrienko's ST-analysis-modelling's nested loops for multi-phase analysis; EventFlow's and IVESA's progressive simplification loops; StratomeX's and Coral's query-guided cohort/element accumulation patterns; DPVis' and SOMFlow's hierarchical/provenance-tree exploration with flow graphs; ParaGlide's and Tuner's response-surface sampling-and-refinement loops; the RelEx/Kokiri/VBridge family of comparison-and-explanation workflows; and several human-in-the-loop labeling workflows (DaedalusData, active gaze labeling, image-based projection labeling) that combine embedding, clustering, and progressive labeling loops. This gives me a decent palette of precedents to draw on depending on what your task calls for.\n\nI don't have clarifying questions about the language or library at this point — the specification is detailed enough and the library examples are extensive enough that I feel ready to proceed. I'm ready for you to describe the design task.",
      "role": "assistant"
    },
    {
      "content": "The IEEE VIS conferences (Vis, InfoVis, VAST, SciVis) have accumulated 3596 papers between 1990 and 2024. Each paper record contains the list of authors, publication year, title, abstract, keywords, and citations. Author names have been disambiguated against DBLP (unique author identifiers are provided alongside the raw name strings).\n\nA research analyst studying the intellectual structure of the visualization community wants to identify the major communities of collaborating researchers and characterise how they have evolved. The analyst expects that a community typically has a relatively stable core of leading researchers who continue collaborating across many years, while other members may move between communities over time or contribute to several communities simultaneously. Each community should also be associated with its major research foci — the topics or problem areas that characterise its work.\n\nThe analyst wants to answer questions such as: how many distinct communities can be identified? How stable is each community's core, and who are its leaders? What are its main research foci, and how have they evolved? How does membership overlap between communities, and how does it change over time? Do communities merge, split, or dissolve, and if so, when and why?\n\nThe analyst will need to inspect intermediate results visually and use domain knowledge to interpret patterns and make judgements at each stage.\n\nDesign an analytical workflow for this problem.",
      "role": "user"
    },
    {
      "content": "<think>I'm breaking down the problem: I need to analyze co-authorship networks across IEEE VIS papers from 1990-2024 to identify research communities, track how they evolve over time, understand their stability and leadership, and detect when communities merge, split, or dissolve.\n\nThis is a dynamic network analysis problem—similar to approaches like EventThread for tracking community evolution and branching patterns. I'll need community detection algorithms on the co-authorship graphs, temporal tracking to monitor membership changes and leadership shifts, topic modeling on abstracts and keywords to characterize each community's research focus, and methods to identify structural events like mergers and splits.\n\nNow I'm thinking through the actual workflow. I'd construct sliding-window snapshots of the co-authorship network over time, apply community detection to each window to find clusters of collaborating researchers, then track communities across windows by matching author membership overlap to identify continuity, merges, splits, and dissolutions. This creates an evolution graph showing how communities form, persist, and transform.\n\nFor each community, I'd identify its stable core members (those appearing across many consecutive windows) and key leaders based on centrality metrics or publication impact. Then I'd aggregate the papers from community members and apply topic modeling to characterize their research focus areas. Finally, I'd visualize this evolution using something like a Sankey or alluvial diagram showing how communities flow and transform over time, similar to existing temporal network visualization approaches.\n\nSince community detection involves tunable parameters like resolution and window size, I need to build in iterative refinement loops where I can assess results and adjust settings. This lets me zoom into individual communities to examine their timeline, membership stability, and how their research focus shifts—all with human guidance steering the process.\n\nEventThread's approach to decomposing temporal stages into threads with branching and merging is directly applicable here: I can treat communities as threads and time windows as stages, giving me a strong structural template for the workflow. I'm pulling in visualization techniques from related work—NodeTrix for inspecting community structure within single time windows, Kokiri for characterizing what makes communities distinct through feature importance, and topic modeling approaches for understanding research focus. Now I'm laying out the actual workflow: starting with data preparation where I define overlapping time windows over the paper corpus.\n\nFor each window, I construct a co-authorship network and run community detection with iterative parameter tuning to assess quality. Then I track how communities evolve by computing overlap metrics like Jaccard similarity between consecutive time periods to identify merges, splits, and persistence patterns. Continuing with centrality measures like betweenness to identify leaders within each community window, then visualizing core member stability through a heatmap and highlighting leadership roles in the network view. Next I'll aggregate the papers' metadata by community and time window to apply topic modeling and track how research foci evolve across each community's lineage. Then I need to compute membership overlap between communities at the individual researcher level—capturing who moved between communities or participated in multiple ones simultaneously—and display this as trajectories through communities over time. After that comes an interactive validation phase where analysts can drill into specific lineages, inspect members and papers, and iteratively refine parameters like window size and detection thresholds. Finally I'll synthesize the findings by documenting the number of distinct communities discovered and characterizing them through metrics like core size, persistence, leadership patterns, research focus evolution, and the timing of merge/split/dissolve events.\n\nNow I'm thinking through how to structure this as an ATWL representation with appropriate artifacts and transforms. I need to define the data artifacts first—starting with papers as the foundational entity, where each paper contains authors, title, abstract, keywords, and citations.\n\nAuthors could be extracted as a derived entity set from the papers through a transformation that disambiguates them using DBLP IDs. I also need to establish time windows as either a specification artifact defining window size and stride, or as context entities that get used during arrangement operations.\n\nFor the co-authorship networks, I'm modeling these as entities with a graph formation structure indexed by time — essentially network snapshots where each window gets its own author collaboration graph with nodes representing authors and edges representing co-authorship relationships. This mirrors the snapshot approach from other workflows, where I can represent the network structure and temporal embedment as relational configuration features.\n\nNow I'm setting up community detection by applying a clustering transform on these networks with configurable parameters, which produces community entities grouped by cluster and positioned within each time window. Each community tracks its member authors, size, and modularity contribution. Then I'll visualize these communities using a node-link or NodeTrix-style layout to assess the quality of the clustering, iterating on the resolution parameter to balance modularity and interpretability. Finally, I'm computing how communities evolve across consecutive time windows by measuring pairwise overlaps between them, capturing this evolution as a relational feature across the temporal dimension.\n\nNext I'm matching communities across windows to form lineages—treating these as super-entities that represent a community's identity over time, similar to how threads work in EventThread. Each lineage is an ordered sequence of community instances tracked as a set. Then I'll classify the transitions between consecutive communities in each lineage, categorizing them as merge, split, birth, dissolve, or continue events. After that I'm visualizing this evolution using an alluvial or flow diagram...\n\nFor core and leadership identification, I'm using author membership data across windows to extract persistent members and compute centrality-based leaders per window. I'll visualize core stability as a heatmap showing author presence across time for each lineage, and highlight leadership positions in the network. Then I'm applying topic modeling on the aggregated text from community members' papers to extract topic weights per community-window and track how research foci evolve. Finally, I'm examining membership overlap across communities to trace individual-level author trajectories...\n\nI need to wrap this in a parameter refinement loop covering window size, community detection resolution, and overlap-matching thresholds, then synthesize findings from the entire pipeline. The structure should follow precedents like MobilityGraphs with nested loops or EventThread's decompose-cluster-abstraction pattern.\n\nNow I'm sketching out a template that chains together the key operations: starting with window definition and author extraction to build co-authorship networks, then looping through community detection with modularity assessment and visualization, computing inter-window overlaps to track lineage formation, classifying transitions, arranging the evolution timeline with flow diagrams, extracting stability metrics and core members, building topic models per lineage-window, tracking author trajectories, and continuing with abstraction steps...\n\nThe complexity mirrors what I see in other library workflows like ST_analysis_modelling, which also nest loops for grouping and evaluation. I'm thinking about how to structure this with an outer loop for community detection that iteratively clusters the co-authorship networks per window, adjusting the resolution parameter globally across all windows using aggregate assessment statistics rather than per-window tuning, to maintain consistent methodology throughout.\n\nThen I'd have a separate step to link communities into lineages and classify events—deterministic given an overlap threshold, though that threshold might need some calibration. After that comes the topic modeling loop similar to cluster-calendar's pattern with iterative refinement for choosing the number of topics. Finally, a synthesis step to wrap everything together.\n\nI'm aiming for a moderately detailed workflow comparable to MobilityGraphs or ST_analysis_modelling—two-phase with nested loops—plus natural language documentation. I also need to think through how communities have evolved over time and what drove those changes.\n\nFor the evolution piece, I need to correlate merges and splits with topic shifts and leader departures, treating this as an abstraction step that links transition types to research focus changes. Now I'm drafting the citations to existing library workflows I'm drawing from: EventThread for the thread branching and merging via tensor decomposition, StratomeX for the column-band overlap visualization across time windows, and MobilityGraphs for the two-phase clustering structure with iterative refinement loops.\n\nI'm also pulling from cluster-calendar for the iterative clustering assessment and adjustment pattern, UTOPIAN for the topic modeling loop to characterize research foci, SOMFlow for hierarchical exploration and provenance tracking, and NodeTrix for inspecting community structure within individual time windows using a hybrid node-link and matrix view.\n\nNow I'm ready to write out the full ATWL specification, being careful with the syntax for artifact declarations, transforms, loops, and conditionals. Let me start planning the artifact IDs.\n\nI'm defining the papers dataset as an entity collection with authors, year, title, abstract, keywords, and citation counts as features—using reference types for author IDs even though authors aren't yet declared as separate entities. I'm also setting up the window configuration as a specification artifact where the analyst provides initial parameters like a 3-year sliding window with 1-year stride.\n\nNow I'm laying out the transformation pipeline: first, a define-unit transform that partitions the papers into time windows based on the configuration, creating a new entity collection with window IDs and year ranges. Next, I need to extract authors as distinct entities, which is also a define-unit operation rather than a characterization step.\n\nThen I'm building the co-authorship networks per window—another define-unit transform that aggregates the papers and authors into per-window network snapshots, where each network has nodes representing authors and weighted edges capturing co-authorship relationships. The graph structure itself should be represented as a relational configuration feature within the network entities.\n\nNow I'm setting up an iterative loop for community detection that applies graph clustering algorithms like Louvain to each window's network, adjusting the resolution parameter to find balanced, interpretable community sizes across all time windows.\n\nI need to define the data structure for communities properly — each community instance belongs to a specific time window and contains member authors. The community label should map each author to their assigned community within that window, which I'm modeling as a feature of the network artifact itself rather than the author artifact, since community membership is window-dependent.\n\nFor the quality assessment task, I'm computing modularity and size-distribution statistics across all windows to characterize the community structure, with the output being a numeric vector feature attached to the communities artifact.\n\nNow I'm setting up visualization using small-multiples network views with a hybrid NodeTrix representation to handle dense communities, then assessing the results by evaluating size distribution, modularity, and interpretability across windows. If the quality metrics suggest the parameters need tuning, I'll adjust the resolution or algorithm settings and loop back; otherwise I move forward. This follows the same iterative refinement pattern as the cluster-calendar approach.\n\nFor inter-window overlaps, I'm computing Jaccard similarity between community member sets in consecutive time windows to create a directed overlap graph showing how communities relate across adjacent periods. Then I'll match these communities into lineages by linking instances above an overlap threshold and classifying each transition as a continuation, merge, split, birth, or dissolution event.\n\nEach lineage tracks an ordered sequence of community instances through time with metadata like lineage ID and window span, while the transition events form a categorical sequence labeling how that lineage evolved. Since the matching threshold itself needs calibration, I'm considering whether to add a small tuning loop or just include an assessment step to evaluate different threshold values.\n\nFor visualization, I'll arrange the community lineages as columns across time windows with connecting bands sized by overlap in a StratomeX-style layout, plus an alluvial diagram to highlight the merge, split, birth, and dissolution events.\n\nNow for the core and leadership analysis: I need to compute which authors appear consistently across windows within each lineage to identify stable core members, and calculate centrality metrics within each community's subgraph to find the leading researchers.\n\nI'm creating a heatmap visualization showing author presence across time windows per lineage, with leaders highlighted for emphasis.\n\nMoving into research foci, I'll aggregate the titles, abstracts, and keywords from papers authored by community members within each window, then apply topic modeling to identify the research themes within each community instance.\n\nThe topic modeling loop involves fitting an NMF model to the aggregated text corpus, visualizing the topic-term matrix and how topic weights evolve across lineages over time, then interpreting and naming the discovered topics as research foci labels. I'll assess the quality of these topics by evaluating their coherence and distinctiveness across lineages, and if needed, refine the parameters and re-fit the model.\n\nNext I'm reconstructing each author's trajectory through the communities and lineages they belonged to over their career, identifying who moved between communities or participated in multiple simultaneously. I'll arrange these trajectories against the lineage timeline to visualize cross-community mobility, then extract patterns of researcher movement, key bridging authors, and instances of simultaneous multi-community participation.\n\nNow I'm moving into the final interpretation loop where I explore all the visualizations together—the evolution diagram, stability views, topic timelines, and trajectory view—to understand merges, splits, and dissolutions in the context of research focus shifts and leadership changes. I need to assess whether the identified communities, their stability patterns, research foci, and transition events adequately answer the analyst's original questions, and if not, I'll adjust the matching threshold, window configuration, or drill deeper into specific lineages.\n\nOnce I have sufficient evidence, I'll synthesize all the findings—the evolution patterns, mobility patterns, research foci, core members, and transition events—into a coherent set of statements that constitute the final knowledge output. For D_time_windows, the internal structure is an episode (bounded interval) with time embedment, similar to how days work in the cluster-calendar example. D_authors and D_papers both have elementary internal structure, but papers need {set, time} embedment since they're identified by publication and positioned temporally, following the same pattern as patient records in the D2 example.\n\nI'm deciding to use {set, time} for consistency with other collections that have temporal attributes, even though just \"time\" would work since papers are really time-indexed data. Now I'm adding features to D_papers: an authors field (list reference), year (temporal), title (text), and more.\n\nI should also consider whether S_window_config needs to be marked as given with its representation form. Before writing out the full ATWL text, I'm realizing that F_quality should be a feature of D_networks rather than D_communities, since modularity and other quality metrics apply to the whole partition within a window, not individual communities. This makes more sense structurally.\n\nFor F_community_label, since community detection partitions authors within each window, I can represent this as a feature of D_authors with a vector value structure—one entry per window showing which community the author belongs to in that window, with sparse entries for inactive windows. This mirrors how T_detect_communities outputs both D_communities and F_community_label, similar to the clustering pattern in time-series analysis.\n\nF_overlap as a feature of D_communities captures pairwise overlaps between communities across adjacent windows using a directed overlap graph with Jaccard similarity—consistent with how F_similarities works in other workflows. S_matching_params specifies the threshold settings (like Jaccard >= 0.3) for linking communities across time. Now I'm thinking through T_match_lineages, which takes D_communities, F_overlap, and S_matching_params as inputs to produce the lineage output.\n\nI'm considering whether to add a dedicated calibration loop for the matching threshold. It makes sense to include one right after computing overlaps, similar to how parameter tuning works in other parts of the system—this keeps the threshold adjustment focused and avoids nesting it too deeply into the broader interpretation loop. The loop would run the matching step with a light visualization to assess the results, then exit with the final threshold before building the full evolution visualization. urally plausible — avoiding excessive fragmentation or spurious over-merging. The loop body runs through matching lineages, arranging their evolution, visualizing it, and assessing quality; if refinement is needed, I adjust the matching parameters and reassign the lineage data, otherwise I exit. This mirrors the grouping loop pattern nicely and keeps visualization integrated within the calibration process rather than duplicating it.\n\nNow I'm laying out the full structure in three phases: first setting up the papers, time windows, authors, and networks; then running a community detection loop that detects communities, computes quality metrics, visualizes them, assesses the results, and refines parameters if needed; and finally moving into lineage tracking where I compute overlaps between communities.\n\nFor the lineage phase, I'm matching lineages based on transition events, arranging the evolution, visualizing it, and assessing quality before potentially refining the matching parameters. Then in the final phase, I'm characterizing the core members and leaders, visualizing their stability over time, and extracting patterns from that stability data.\n\nMoving into topic modeling, I'm aggregating the text corpus, fitting a topic model with initial parameters, visualizing the topics, abstracting the research foci, and assessing topic quality—again with a refinement loop if needed. After that, I'm deriving author trajectories and beginning to analyze individual-level mobility and overlap patterns.\n\nThen in the interpretation phase, I'm combining all the findings—evolution, stability, research foci, and mobility patterns—to understand the causal mechanisms behind lineage mergers, splits, and dissolutions. I assess whether I have enough information, and if not, I can loop back to refine earlier phases like the window configuration before potentially rerunning parts of the pipeline.\n\nOnce that's complete, I synthesize everything into final knowledge outputs. This mirrors the nested loop structure I see in similar analysis frameworks, where each phase progressively refines one aspect before reaching a comprehensive synthesis.\n\nNow I'm working on a template notation that captures the overall intent using loop syntax...\n\nWriting template notation... I'll skip the explicit knowledge artifact for domain interpretation since the analyst's expertise is already implicit in the workflow. For the membership overlap question, the community-to-community overlap computed in Phase C combined with author-level mobility tracking in Phase F should address both the structural changes and temporal dynamics. I'm also considering whether communities merge, split, or dissolve—\n\nthis ties back to research focus shifts in Phase E and leadership turnover in Phase D, which Phase G will integrate. I should also refine the leader identification to incorporate citation counts and publication metrics alongside centrality measures, since citations were explicitly provided as an important attribute.\n\nI need to capture how many distinct communities emerge from the analysis — pulling this from the lineage counts in Phase D and the community detection outputs in Phase F — and make sure this gets highlighted in the final findings. Now I'll structure the full response with natural language explanation first, then the ATWL specification, making sure to cite the specific library workflows that support each recommendation step. Writing ATWL syntax...</think>\n\n# Analytical Workflow: Discovering and Characterising Collaboration Communities in the IEEE VIS Literature\n\n## Analytical logic (natural-language overview)\n\nThe task has two intertwined layers: (1) detecting **who collaborates with whom, and how those groupings change over a 35-year span**, and (2) **interpreting** those groupings — their stability, leadership, research focus, and their merge/split/dissolve dynamics. This calls for a workflow that alternates between computational network/text analysis and human interpretation, with several rounds of parameter calibration. I model it in six stages:\n\n**A. Data preparation.** From the paper records, I extract authors as first-class analysis units and partition the publication timeline into time windows (the \"unit of temporal resolution\" at which communities will be defined). For each window I build a co-authorship network (nodes = active authors, edges = weighted co-authorship). This treats \"papers\" and \"authors\" as different levels of analysis, following the convention (used throughout the library, e.g. in *cluster-calendar* and *reducing-snapshots-to-points*) of first defining the right analysis unit before computing anything else.\n\n**B. Per-window community detection (iterative).** A graph community-detection algorithm (e.g. Louvain) is applied to each window's network. Because resolution parameters strongly affect whether communities are meaningful (too fragmented / too coarse), this is wrapped in a refinement loop with visual assessment of modularity, size distribution and interpretability — directly modelled on the calibration loop in ***cluster-calendar*** and the parameter-adjustment loops in ***MobilityGraphs***.\n\n**C. Cross-window lineage tracking (iterative).** Communities detected independently in each window are not yet \"the same community over time.\" I compute pairwise membership overlap (Jaccard similarity) between communities in temporally adjacent windows and link them above a calibrated threshold into **lineages** — persistent community identities — while explicitly classifying each linkage as *continuation*, *merge*, *split*, *birth*, or *dissolution*. This is the structural heart of the workflow and is modelled closely on ***EventThread***'s tensor-decomposition-into-threads-with-branching/merging pattern (there: stages→threads; here: windows→lineages) and visualised as a column-band diagram in the manner of ***StratomeX*** (there: overlapping patient stratifications; here: overlapping community memberships across adjacent windows), overlaid with an alluvial/flow view as in ***EventThread*** and ***SOMFlow***. The overlap/matching threshold is itself calibrated in a small loop, mirroring the parameter-refinement pattern in ***ST_analysis_modelling***.\n\n**D. Core stability and leadership.** For each lineage, I compute each member's presence frequency across the lineage's windows to distinguish a **stable core** from transient participants, and compute within-community centrality (degree/betweenness) combined with publication/citation volume to identify **leaders** per window. This is visualised as an author × time-window presence matrix (heatmap), directly analogous to the state-persistence and role-identification steps in ***DPVis*** and the actor-role analysis in ***NodeTrix***, whose hybrid node-link/matrix representation is also recommended for drilling into any single dense community instance.\n\n**E. Research foci via topic modelling (iterative).** Titles, abstracts and keywords of papers authored by each community's members (within each window) are aggregated into a corpus per community instance, and a topic model (NMF) is fit and iteratively refined — following the interactive topic-modelling loop of ***UTOPIAN (interactive-topic-modeling)*** — producing named research-focus labels that can be tracked along each lineage's timeline to show topical evolution or drift.\n\n**F. Individual-level mobility and cross-community overlap.** Beyond window-to-window community overlap (stage C), I reconstruct each author's personal trajectory through lineages over their career (which lineages they belonged to, whether simultaneously or sequentially), revealing bridging authors and multi-community membership — addressing \"how does membership overlap change over time\" at the individual level.\n\n**G. Integrated interpretation loop.** The analyst brings the evolution diagram, stability heatmap, topic timelines and mobility view together to interpret *why* particular merges/splits/dissolutions occurred (e.g., a split coinciding with a topical bifurcation, or a dissolution coinciding with core-member attrition), iterating on window size or matching thresholds if the picture is unclear — an \"implicit termination\" loop, since the stopping criterion (\"sufficient holistic understanding\") is not reducible to a single assessable artifact, following the convention used for exploratory synthesis loops in e.g. ***MotionExplorer*** and ***episode-based-temporal-analysis***.\n\n**H. Knowledge synthesis.** Final statements about the number and character of communities, core stability, leadership, foci evolution, overlap patterns, and merge/split/dissolve events with their likely drivers.\n\n---\n\n## ATWL Representation\n\n```\nworkflow vis-community-evolution-analysis\n\n  template: define-unit (windows, authors, networks) →\n            loop(define-unit (detect communities) → characterise (quality) →\n                 visualise → assess) →\n            characterise (overlaps) →\n            loop(define-unit (match lineages) → contextualise → visualise →\n                 assess) →\n            characterise (core & leaders) → visualise → abstract →\n            loop(build-model (topics) → visualise → abstract → assess) →\n            characterise (author trajectories) → contextualise → visualise →\n            abstract →\n            loop(abstract (integrate) → assess) →\n            generate-knowledge\n\n  description: \"Identify communities of collaborating researchers in the\n    IEEE VIS literature (1990-2024) via time-windowed co-authorship\n    networks, track their evolution (continuation, merger, splitting,\n    birth, dissolution) across windows, characterise core stability,\n    leadership, research foci, and cross-community researcher mobility\"\n\n# ============================================================================\n# INPUT\n# ============================================================================\n\nartifact D_papers : entities\n  origin: given\n  internal structure: elementary\n  embedment: {set, time}\n  features:\n    - id: f_authors\n      value structure: list\n      value type: reference\n      description: \"DBLP-disambiguated author identifiers\"\n    - id: f_year\n      value structure: atomic\n      value type: temporal\n      description: \"Publication year\"\n    - id: f_title\n      value structure: atomic\n      value type: text\n      description: \"Paper title\"\n    - id: f_abstract\n      value structure: atomic\n      value type: text\n      description: \"Paper abstract\"\n    - id: f_keywords\n      value structure: list\n      value type: text\n      description: \"Author-supplied keywords\"\n    - id: f_citations\n      value structure: atomic\n      value type: numeric\n      description: \"Citation count\"\n  description: \"3596 IEEE VIS/InfoVis/VAST/SciVis papers (1990-2024) with\n    disambiguated author lists\"\n\nartifact S_window_config : specification\n  origin: given\n  representation form: \"parameter settings\"\n  description: \"Initial time-window scheme: window length and stride\n    (e.g. 3-year sliding windows, 1-year stride) for constructing\n    successive co-authorship snapshots\"\n\n# ============================================================================\n# PHASE A: UNITS OF ANALYSIS - WINDOWS, AUTHORS, NETWORKS\n# ============================================================================\n\ntransform T_define_windows :\n  intent: define-unit\n  manner: \"time-partitioning into sliding windows\"\n  input: D_papers, S_window_config\n  output: D_time_windows\n  actor: machine\n  description: \"Partition the publication timeline into overlapping\n    multi-year windows serving as the temporal resolution for community\n    detection\"\n\nartifact D_time_windows : entities\n  internal structure: episode\n  embedment: time\n  features:\n    - id: f_window_id\n      value structure: atomic\n      value type: categorical\n      description: \"Window identifier\"\n    - id: f_year_range\n      value structure: vector\n      value type: temporal\n      description: \"Start and end year of the window\"\n  description: \"Bounded multi-year intervals over which co-authorship\n    networks and communities are computed\"\n\ntransform T_extract_authors :\n  intent: define-unit\n  manner: \"extract\"\n  input: D_papers\n  output: D_authors\n  actor: machine\n  description: \"Extract unique disambiguated authors as first-class\n    analysis units\"\n\nartifact D_authors : entities\n  internal structure: elementary\n  embedment: set\n  features:\n    - id: f_total_papers\n      value structure: atomic\n      value type: numeric\n      description: \"Total number of papers authored\"\n    - id: f_career_span\n      value structure: vector\n      value type: temporal\n      description: \"First and last publication year\"\n  description: \"Individual researchers, disambiguated via DBLP identifiers\"\n\ntransform T_build_networks :\n  intent: define-unit\n  manner: \"aggregate co-authorship into per-window network snapshots\"\n  input: D_papers, D_authors, D_time_windows\n  output: D_networks\n  actor: machine\n  description: \"Construct one weighted co-authorship network per time\n    window: nodes are authors active in the window, edges are weighted by\n    number of jointly authored papers\"\n\nartifact D_networks : entities\n  internal structure: formation\n  embedment: time\n  features:\n    - id: f_coauthor_graph\n      value structure: relational configuration\n      value type: {reference, numeric}\n      representation form: \"weighted undirected co-authorship graph\"\n      description: \"Author nodes with co-authorship-count edge weights for\n        this window\"\n  description: \"Temporal sequence of co-authorship network snapshots, one\n    per time window\"\n\n# ============================================================================\n# PHASE B: PER-WINDOW COMMUNITY DETECTION (ITERATIVE CALIBRATION)\n# ============================================================================\n\nartifact S_community_params : specification\n  origin: given\n  representation form: \"parameter settings\"\n  description: \"Community-detection algorithm choice and resolution\n    parameter (e.g. Louvain modularity resolution) applied uniformly across\n    all window networks\"\n\nloop L_community_detection:\n  purpose: \"Calibrate community-detection resolution so that communities\n    are neither over-fragmented nor overly coarse, and remain interpretable\n    across the whole time span\"\n  until: \"Modularity, size distribution, and visual interpretability of\n    communities are satisfactory across the majority of time windows\"\n  body:\n\n    transform T_detect_communities :\n      intent: define-unit\n      manner: \"graph community detection (modularity optimisation, e.g.\n        Louvain), applied independently per window\"\n      input: D_networks, S_community_params\n      output: D_communities, F_community_label\n      actor: machine\n      description: \"Partition each window's co-authorship network into\n        communities of densely collaborating authors\"\n\n    artifact D_communities : entities\n      internal structure: group/cluster\n      embedment: {set, time}\n      features:\n        - id: f_window_id\n          value structure: atomic\n          value type: reference\n          description: \"Time window this community instance belongs to\"\n        - id: f_size\n          value structure: atomic\n          value type: numeric\n          description: \"Number of member authors\"\n      description: \"Community instances: groups of authors detected as\n        densely collaborating within one specific time window\"\n\n    artifact F_community_label : feature(D_authors)\n      value structure: vector\n      value type: categorical\n      description: \"Per-window community-assignment sequence for each\n        author across all time windows in which they were active\"\n\n    transform T_compute_quality :\n      intent: characterise\n      manner: \"compute-statistics (modularity, size distribution)\"\n      input: D_communities, D_networks\n      output: F_quality\n      actor: machine\n      description: \"Compute per-window modularity score, community count,\n        mean/variance of community size, and singleton-author fraction\"\n\n    artifact F_quality : feature(D_networks)\n      value structure: vector\n      value type: numeric\n      description: \"Per-window community-detection quality metrics\"\n\n    transform T_visualise_communities :\n      intent: visualise\n      manner: \"small-multiples node-link / hybrid NodeTrix-style views per\n        window\"\n      input: D_networks, D_communities, F_community_label\n      output: V_communities\n      actor: machine\n      description: \"Display each window's network with communities\n        colour-coded; densest communities optionally shown as matrices\n        (NodeTrix-style) to reveal internal collaboration structure\"\n\n    artifact V_communities : visualisation(D_networks, D_communities,\n        F_community_label)\n      layout: \"small multiples, one panel per time window\"\n      form: \"node-link diagrams with colour-coded community membership;\n        NodeTrix-style hybrid matrix insets for dense communities\"\n      encoding: \"node colour: community label; node size: author\n        publication count; matrix cell: intra-community co-authorship\n        count\"\n      description: \"Per-window overview supporting visual judgment of\n        community coherence and granularity\"\n\n    transform T_assess_communities :\n      intent: assess\n      manner: \"evaluate-clustering-quality\"\n      input: V_communities, F_quality\n      output: K_community_quality\n      actor: human\n      description: \"Judge whether modularity, size distribution, and\n        visual coherence of communities are acceptable across windows\"\n\n    artifact K_community_quality : knowledge(D_communities)\n      representation form: \"quality judgment\"\n      description: \"Assessment of whether current resolution parameter\n        yields interpretable, appropriately granular communities\"\n\n    if K_community_quality indicates refinement needed:\n      then:\n        transform T_adjust_community_params :\n          intent: generate-knowledge\n          manner: \"adjust resolution parameter based on assessment\"\n          input: K_community_quality, S_community_params\n          output: S_community_params_r\n          actor: human\n          description: \"Revise resolution or algorithm choice to correct\n            over-fragmentation or excessive coarseness\"\n\n        artifact S_community_params_r : specification\n          representation form: \"parameter settings\"\n          description: \"Updated community-detection configuration\"\n\n        assign:\n          S_community_params := S_community_params_r\n      else:\n        exit loop L_community_detection\n\nend loop L_community_detection\n\n# ============================================================================\n# PHASE C: CROSS-WINDOW LINEAGE TRACKING (ITERATIVE CALIBRATION)\n# ============================================================================\n\ntransform T_compute_overlaps :\n  intent: characterise\n  manner: \"define-relations (similarity) — Jaccard overlap of member sets\"\n  input: D_communities\n  output: F_overlap\n  actor: machine\n  description: \"Compute pairwise membership-overlap similarity between\n    every pair of community instances in temporally adjacent windows\"\n\nartifact F_overlap : feature(D_communities)\n  value structure: relational configuration\n  value type: numeric\n  representation form: \"directed overlap graph (Jaccard similarity) between\n    community instances of temporally adjacent windows\"\n  description: \"Basis for linking community instances into persistent\n    lineages\"\n\nartifact S_matching_params : specification\n  origin: given\n  representation form: \"parameter settings\"\n  description: \"Overlap threshold above which two community instances in\n    adjacent windows are linked as continuous, and rules for classifying\n    one-to-many / many-to-one links as split / merge\"\n\nloop L_lineage_tracking:\n  purpose: \"Calibrate the overlap threshold so that resulting community\n    lineages and their merge/split/birth/dissolution events are\n    structurally plausible\"\n  until: \"The evolution diagram shows neither excessive fragmentation\n    (spurious births/dissolutions) nor implausible over-merging\"\n  body:\n\n    transform T_match_lineages :\n      intent: define-unit\n      manner: \"link community instances above overlap threshold into\n        lineages; classify each linkage as continuation, merge, split,\n        birth, or dissolution\"\n      input: D_communities, F_overlap, S_matching_params\n      output: D_lineages, F_transition_events\n      actor: machine\n      description: \"Track community identity across windows, producing\n        persistent lineages and typed transition events between\n        consecutive windows\"\n\n    artifact D_lineages : entities\n      internal structure: sequence\n      embedment: set\n      features:\n        - id: f_first_window\n          value structure: atomic\n          value type: reference\n          description: \"Window in which the lineage first appears\"\n        - id: f_last_window\n          value structure: atomic\n          value type: reference\n          description: \"Window in which the lineage last appears (or\n            dissolves)\"\n      description: \"Ordered sequences of community instances across time\n        windows, each sequence representing one persistent community\"\n\n    artifact F_transition_events : feature(D_lineages)\n      value structure: vector\n      value type: categorical\n      description: \"Per-consecutive-window-pair transition type along each\n        lineage: continuation, merge, split, birth, or dissolution\"\n\n    transform T_arrange_evolution :\n      intent: contextualise\n      manner: \"column-band arrangement (StratomeX-style) plus alluvial\n        flow layout (EventThread-style)\"\n      input: D_lineages, D_communities, F_overlap, F_transition_events\n      output: A_evolution\n      actor: machine\n      description: \"Arrange community instances as columns per time window\n        with connecting bands sized by membership overlap, and as an\n        alluvial diagram highlighting branch/merge/dissolution points\"\n\n    artifact A_evolution : arrangement(D_lineages)\n      context: D_time_windows\n      principle: \"horizontal: time windows as columns; vertical: stacked\n        community-instance blocks sized by member count; bands between\n        adjacent columns sized by overlap; alluvial flow shows lineage\n        continuity\"\n      description: \"Temporal arrangement exposing continuity, merges,\n        splits, births, and dissolutions of communities\"\n\n    transform T_visualise_evolution :\n      intent: visualise\n      manner: \"column-band matrix + alluvial diagram\"\n      input: A_evolution\n      output: V_evolution\n      actor: machine\n      description: \"Render the community-evolution diagram with\n        colour-coded lineages and highlighted transition events\"\n\n    artifact V_evolution : visualisation(A_evolution)\n      layout: \"sequence of window columns with connecting overlap bands;\n        alluvial flow overlay\"\n      form: \"stacked blocks, ribbon bands, branch/merge glyphs\"\n      encoding: \"block height: community size; band width: overlap\n        strength; block colour: lineage identity; glyph: transition type\n        (merge/split/birth/dissolution)\"\n      description: \"Primary view for inspecting how communities persist,\n        combine, fragment, or disappear over the 35-year span\"\n\n    transform T_assess_lineages :\n      intent: assess\n      manner: \"evaluate structural plausibility of lineages and events\"\n      input: V_evolution, F_transition_events\n      output: K_lineage_quality\n      actor: human\n      description: \"Judge whether the overlap threshold produces\n        believable lineages, avoiding spurious fragmentation or\n        over-merging\"\n\n    artifact K_lineage_quality : knowledge(D_lineages)\n      representation form: \"quality judgment\"\n      description: \"Assessment of whether current matching threshold\n        yields plausible lineage structure and transition events\"\n\n    if K_lineage_quality indicates refinement needed:\n      then:\n        transform T_adjust_matching_params :\n          intent: generate-knowledge\n          manner: \"adjust overlap threshold based on assessment\"\n          input: K_lineage_quality, S_matching_params\n          output: S_matching_params_r\n          actor: human\n          description: \"Revise the overlap threshold to correct\n            fragmentation or over-merging\"\n\n        artifact S_matching_params_r : specification\n          representation form: \"parameter settings\"\n          description: \"Updated lineage-matching configuration\"\n\n        assign:\n          S_matching_params := S_matching_params_r\n      else:\n        exit loop L_lineage_tracking\n\nend loop L_lineage_tracking\n\n# ============================================================================\n# PHASE D: CORE STABILITY AND LEADERSHIP\n# ============================================================================\n\ntransform T_compute_core :\n  intent: characterise\n  manner: \"compute-statistics (per-author presence frequency; centrality)\"\n  input: D_lineages, D_communities, D_networks, F_community_label\n  output: F_core_members, F_leaders\n  actor: machine\n  description: \"For each lineage, compute each author's presence frequency\n    across the lineage's windows to identify a stable core; compute\n    within-community degree/betweenness centrality combined with\n    publication and citation counts to identify leading researchers per\n    window\"\n\nartifact F_core_members : feature(D_lineages)\n  value structure: list\n  value type: reference\n  description: \"Authors present in a majority of the lineage's time\n    windows, forming its stable core\"\n\nartifact F_leaders : feature(D_communities)\n  value structure: list\n  value type: reference\n  description: \"Most central / most cited authors within each community\n    instance\"\n\ntransform T_visualise_stability :\n  intent: visualise\n  manner: \"author x time-window presence heatmap per lineage\"\n  input: F_core_members, F_leaders, D_lineages\n  output: V_stability\n  actor: machine\n  description: \"Display, per lineage, which authors were present in which\n    windows, with core members and leaders highlighted\"\n\nartifact V_stability : visualisation(F_core_members, F_leaders, D_lineages)\n  layout: \"matrix per lineage: rows = authors, columns = time windows\"\n  form: \"coloured cells with leader markers\"\n  encoding: \"cell colour: membership presence; marker: leader status;\n    row ordering: total presence count (core members at top)\"\n  description: \"Reveals which lineages have a persistent core of leading\n    researchers versus high membership turnover\"\n\ntransform T_abstract_stability :\n  intent: abstract\n  manner: \"perception-and-interpretation\"\n  input: V_stability, F_transition_events\n  output: P_stability_patterns\n  actor: human\n  description: \"Identify lineages with strong stable cores versus high\n    turnover, and relate core/leader changes to transition events\"\n\nartifact P_stability_patterns : pattern(D_lineages)\n  representation form: \"descriptions of stability and leadership patterns\"\n  description: \"Characterisation of each lineage's core stability and\n    leadership continuity or change\"\n\n# ============================================================================\n# PHASE E: RESEARCH FOCI VIA TOPIC MODELLING (ITERATIVE)\n# ============================================================================\n\ntransform T_aggregate_text :\n  intent: characterise\n  manner: \"aggregate\"\n  input: D_communities, D_papers\n  output: F_text_corpus\n  actor: machine\n  description: \"Aggregate titles, abstracts, and keywords of papers\n    authored by each community instance's members within its window\"\n\nartifact F_text_corpus : feature(D_communities)\n  value structure: atomic\n  value type: text\n  description: \"Concatenated title/abstract/keyword text for each community\n    instance's papers\"\n\nartifact S_topic_params : specification\n  origin: given\n  representation form: \"parameter settings\"\n  description: \"Initial topic-modelling configuration (e.g. number of NMF\n    topics, term weighting)\"\n\nloop L_topic_modeling:\n  purpose: \"Fit and refine a topic model producing interpretable,\n    distinctive research-focus labels for community instances\"\n  until: \"Topics are coherent, distinctive, and interpretable as named\n    research foci across community instances\"\n  body:\n\n    transform T_fit_topics :\n      intent: build-model\n      manner: \"fit-topic-model (NMF)\"\n      input: F_text_corpus, S_topic_params\n      output: M_topic_model, F_topic_weights\n      actor: machine\n      description: \"Fit a topic model over community-instance corpora and\n        compute each instance's weight distribution across topics\"\n\n    artifact M_topic_model : model(F_text_corpus)\n      model type: \"topic model\"\n      representation form: \"term-topic and community-topic weight\n        matrices\"\n      description: \"Latent research-theme structure underlying community\n        instances' publications\"\n\n    artifact F_topic_weights : feature(D_communities)\n      value structure: vector\n      value type: numeric\n      description: \"Per-community-instance topic weight distribution\"\n\n    transform T_visualise_topics :\n      intent: visualise\n      manner: \"term-topic matrix + per-lineage topic-weight timeline\"\n      input: M_topic_model, F_topic_weights, D_lineages\n      output: V_topics\n      actor: machine\n      description: \"Display characteristic terms per topic and each\n        lineage's topic-weight evolution over its lifespan\"\n\n    artifact V_topics : visualisation(M_topic_model, F_topic_weights)\n      layout: \"term-topic matrix; per-lineage stacked/line chart over time\"\n      form: \"coloured cells (term weight); coloured area/line chart\"\n      encoding: \"cell colour: term-topic weight; line/area colour: topic\n        identity; height: topic weight within the lineage's window\"\n      description: \"Reveals dominant research foci per community instance\n        and how a lineage's focus shifts over time\"\n\n    transform T_abstract_foci :\n      intent: abstract\n      manner: \"name-patterns\"\n      input: V_topics\n      output: P_research_foci\n      actor: human\n      description: \"Assign interpretable research-focus labels to topics\n        (e.g. 'text/NLP visualization', 'immersive analytics')\"\n\n    artifact P_research_foci : pattern(D_communities, M_topic_model)\n      representation form: \"named research-focus labels per topic and per\n        community instance/lineage\"\n      description: \"Human-interpretable characterisation of each\n        community's dominant research themes and their evolution\"\n\n    transform T_assess_topics :\n      intent: assess\n      manner: \"evaluate topic coherence and interpretability\"\n      input: V_topics, P_research_foci\n      output: K_topic_quality\n      actor: human\n      description: \"Judge whether topics are distinct and interpretable\n        as research foci\"\n\n    artifact K_topic_quality : knowledge(M_topic_model)\n      representation form: \"quality judgment\"\n      description: \"Assessment of topic coherence, distinctiveness, and\n        interpretability\"\n\n    if K_topic_quality indicates refinement needed:\n      then:\n        transform T_adjust_topic_params :\n          intent: generate-knowledge\n          manner: \"adjust number of topics or term weighting\"\n          input: K_topic_quality, S_topic_params\n          output: S_topic_params_r\n          actor: human\n          description: \"Revise topic-model configuration\"\n\n        artifact S_topic_params_r : specification\n          representation form: \"parameter settings\"\n          description: \"Updated topic-modelling configuration\"\n\n        assign:\n          S_topic_params := S_topic_params_r\n      else:\n        exit loop L_topic_modeling\n\nend loop L_topic_modeling\n\n# ============================================================================\n# PHASE F: INDIVIDUAL-LEVEL MOBILITY AND CROSS-COMMUNITY OVERLAP\n# ============================================================================\n\ntransform T_derive_trajectories :\n  intent: characterise\n  manner: \"reconstruct per-author lineage-membership sequences\"\n  input: D_authors, F_community_label, D_lineages\n  output: F_author_trajectories\n  actor: machine\n  description: \"Reconstruct each author's career-long sequence of lineage\n    memberships, capturing sequential moves between communities and\n    simultaneous membership in more than one\"\n\nartifact F_author_trajectories : feature(D_authors)\n  value structure: vector\n  value type: {reference, temporal}\n  description: \"Per-author ordered sequence of (time window, lineage)\n    membership pairs across their career\"\n\ntransform T_arrange_trajectories :\n  intent: contextualise\n  manner: \"relative-time-alignment against lineage timelines\"\n  input: F_author_trajectories, D_lineages\n  output: A_trajectories\n  actor: machine\n  description: \"Position each author's trajectory against the shared\n    lineage timeline for cross-community mobility comparison\"\n\nartifact A_trajectories : arrangement(D_authors)\n  context: D_lineages\n  principle: \"horizontal: time; vertical: lineage identity; author\n    trajectory drawn as a path across lineage rows\"\n  description: \"Arrangement exposing which authors move between, or\n    simultaneously belong to, multiple communities\"\n\ntransform T_visualise_trajectories :\n  intent: visualise\n  manner: \"trajectory lines over lineage timeline\"\n  input: A_trajectories\n  output: V_trajectories\n  actor: machine\n  description: \"Display author trajectories as paths across the lineage\n    timeline, highlighting bridging and multi-community authors\"\n\nartifact V_trajectories : visualisation(A_trajectories)\n  layout: \"lineage rows along vertical axis; time along horizontal axis\"\n  form: \"coloured trajectory lines/paths, one per selected author or\n    author group\"\n  encoding: \"line colour: author identity or role (bridge/core/peripheral);\n    vertical jumps: community changes\"\n  description: \"Reveals which researchers bridge multiple communities and\n    how cross-community membership evolves\"\n\ntransform T_abstract_mobility :\n  intent: abstract\n  manner: \"perception-and-interpretation\"\n  input: V_trajectories\n  output: P_mobility_patterns\n  actor: human\n  description: \"Identify bridging authors, simultaneous multi-community\n    membership, and directional flows of researchers between communities\"\n\nartifact P_mobility_patterns : pattern(D_authors, D_lineages)\n  representation form: \"descriptions of mobility and overlap patterns\"\n  description: \"Characterisation of how individual researchers move\n    between, or belong simultaneously to, multiple communities\"\n\n# ============================================================================\n# PHASE G: INTEGRATED INTERPRETATION\n# ============================================================================\n\nloop L_interpretation:\n  purpose: \"Integrate evolution, stability, research-focus, and mobility\n    views to interpret why communities merge, split, or dissolve, revising\n    earlier configuration choices if the picture remains unclear\"\n  until: \"The analyst has developed a sufficient holistic understanding\n    of community evolution and its drivers\"\n  body:\n\n    transform T_explore_integrated :\n      intent: abstract\n      manner: \"cross-view comparison\"\n      input: V_evolution, V_stability, V_topics, V_trajectories\n      output: P_integrated_findings\n      actor: human\n      description: \"Interpret merge/split/dissolution events in light of\n        co-occurring research-focus shifts, core/leader turnover, and\n        researcher mobility\"\n\n    artifact P_integrated_findings : pattern(D_lineages)\n      representation form: \"causal interpretations of transition events\"\n      description: \"Explanations linking specific merge/split/dissolution\n        events to concurrent topical shifts, leadership changes, or\n        researcher migration\"\n\n    transform T_assess_completeness :\n      intent: assess\n      manner: \"judge sufficiency of holistic understanding\"\n      input: P_integrated_findings\n      output: K_completeness\n      actor: human\n      description: \"Judge whether all major transition events have been\n        satisfactorily interpreted\"\n\n    artifact K_completeness : knowledge(P_integrated_findings)\n      representation form: \"quality judgment\"\n      description: \"Assessment of interpretive completeness\"\n\n    if K_completeness indicates further investigation needed:\n      then:\n        transform T_refine_focus :\n          intent: generate-knowledge\n          manner: \"decide which earlier configuration to revisit (window\n            scheme, matching threshold, or topic granularity)\"\n          input: K_completeness, S_window_config, S_matching_params\n          output: S_window_config_r\n          actor: human\n          description: \"Formulate a revised window or matching\n            configuration to resolve ambiguous transitions\"\n\n        artifact S_window_config_r : specification\n          representation form: \"parameter settings\"\n          description: \"Revised window scheme guiding a further pass\n            through Phases A-G\"\n\n        assign:\n          S_window_config := S_window_config_r\n      else:\n        exit loop L_interpretation\n\nend loop L_interpretation\n\n# ============================================================================\n# PHASE H: KNOWLEDGE SYNTHESIS\n# ============================================================================\n\ntransform T_synthesise :\n  intent: generate-knowledge\n  manner: \"formulate-statements\"\n  input: P_integrated_findings, P_mobility_patterns, P_research_foci,\n    P_stability_patterns, F_transition_events\n  output: K_findings\n  actor: human\n  description: \"Synthesise findings on the number and character of\n    communities, their core stability and leadership, research-focus\n    evolution, cross-community overlap, and the timing and drivers of\n    merges, splits, and dissolutions\"\n\nartifact K_findings : knowledge(P_integrated_findings, P_research_foci)\n  representation form: \"statements and explanations\"\n  description: \"Documented understanding of the intellectual structure of\n    the IEEE VIS community: number of distinct communities, degree of core\n    stability and leadership continuity per community, characteristic and\n    evolving research foci, patterns of membership overlap and researcher\n    mobility across communities, and identified merge/split/dissolution\n    events with plausible drivers\"\n```",
      "role": "assistant"
    },
    {
      "content": "Make a list of the papers from which you have taken relevant approaches.",
      "role": "user"
    },
    {
      "content": "<think>I'm gathering the papers that informed my earlier responses.</think>\n\n# Papers Cited as Sources of Relevant Approaches\n\nThe following library workflows informed specific structural elements of my recommended workflow, as noted in the design rationale:\n\n1. **van Wijk & van Selow (1999)** — *Cluster and calendar based visualization of time series data* (cluster-calendar workflow) — model for the calibration loop with visual assessment of clustering resolution parameters.\n\n2. **von Landesberger, Brodkorb, Roskosch, Andrienko, Andrienko & Kerren (2016)** — *MobilityGraphs: Visual analysis of mass mobility dynamics via spatio-temporal graphs and clustering* — model for the parameter-refinement loop pattern (quality heatmap → assess → adjust) applied to the overlap-threshold calibration.\n\n3. **Guo, Xu, Zhao, Gotz, Zha & Cao (2018)** — *EventThread: Visual Summarization and Stage Analysis of Event Sequence Data* — model for tensor-decomposition-into-threads-with-branching/merging, adapted to community-lineage tracking across time windows (continuation/merge/split/birth/dissolution classification).\n\n4. **Streit, Lex, Gratzl, Partl, Schmalstieg, Pfister, Park & Gehlenborg (2014)** — *StratomeX: Guided Visual Exploration of Genomic Stratifications in Cancer* — model for the column-band arrangement visualising overlapping set memberships across adjacent groupings, adapted from patient stratifications to community memberships across time windows.\n\n5. **Henry, Fekete & McGuffin (2007)** — *NodeTrix: A Hybrid Visualization of Social Networks* — model for the hybrid node-link/matrix representation used to inspect dense community instances and identify actor roles (leaders, bridges).\n\n6. **Kwon, Anand, Severson, Ghosh, Sun, Frohnert, Lundgren & Ng (2021)** — *DPVis: Visual Analytics With Hidden Markov Models for Disease Progression Pathways* — model for state-persistence visualisation and role/leadership identification via matrix-based presence tracking over time.\n\n7. **Choo, Lee, Reddy & Park (2013)** — *UTOPIAN: User-Driven Topic Modeling Based on Interactive Nonnegative Matrix Factorization* — model for the interactive topic-modelling refinement loop used to derive and iteratively adjust research-focus labels.\n\n8. **Andrienko & Andrienko (2013)** — *A visual analytics framework for spatio-temporal analysis and modelling* (ST_analysis_modelling workflow) — model for the nested-loop structure combining iterative clustering refinement with parameter calibration.\n\n9. **Bernard, Barth, Cuba, Meier, Peiris & Shneiderman (2025)** — *IVESA — Visual Analysis of Time-Stamped Event Sequences* — model for the exploratory synthesis loop with implicit termination criterion (\"sufficient holistic understanding\"), used for the integrated interpretation phase.\n\n10. **Bernard, Wilhelm, Krüger, May, Schreck & Kohlhammer (2013)** — *MotionExplorer: Exploratory Search in Human Motion Capture Data Based on Hierarchical Aggregation* — additional reference for exploratory loops with implicit, judgment-based termination conditions.",
      "role": "assistant"
    }
  ]
}