Glossary¶
One name per concept, used the same way in the docs, in the code, and in the dashboard. If a page and this table disagree, this table is right.
The vocabulary¶
| Term (EN) | 中文 | One-line definition | Details |
|---|---|---|---|
B = f(P, E) |
行为 = f(人群, 环境) | The identity the runtime implements: a step's behaviour B_t is the behaviour function applied to the fixed population and the current environment, with E_{t+1} = g(E_t, B_t) closing the loop. |
Overview |
| population (P) | 人群 | The pool of personas built once per run by PopulationProvider.build(seed), each carrying a persistent agent_id that is never reused — the longitudinal key. |
Anatomy of a Study |
| environment (E) | 环境 | The world the population acts in, declared as tagged EnvironmentLayers on two axes (modality ∈ {physical, information} × scope ∈ {macro, local}) plus the exogenous entries scheduled on them. |
Overview |
| behaviour function (f) | 行为函数 | The mapping from a persona and its Observation to one typed Action, implemented by a study's DecisionModel.decide_batch — LLM, rule, or hybrid (Action.source ∈ {llm, rule, fallback, replay}). |
Architecture |
| study state (σ) | 研究状态 | Everything a study is — σ = (P, E_{0:T}, f, Θ) — which on disk is the set of artifacts in the study workspace; an edit rewrites it as σ_{k+1} = h(a_k, σ_k). |
Versions & the research loop |
| step | 步 | One iteration of the five phases exogenous update → observe → decide → apply → record; step 0 is materialization only (P and E_0, no decisions), and a run has n_steps of them (default 5). |
One step, five phases |
| panel row | 面板行 | One TrajectoryRecord per agent per step — (agent_id, step) is the primary key — landing in DuckDB as panel(agent_id, step, state, action_kind, action_payload). |
One step, five phases |
| intervention | 干预 | One entry in the environment bundle that changes E from outside — either a ScheduledEvent or a Broadcast — applied in phase 1 of its at_step, before anyone observes, so the whole step faces one state. |
Intervention & branching |
| scheduled event | 定时事件 | The numeric intervention: ScheduledEvent(at_step, target_layer, op ∈ {set, add, multiply, add_pct, replace_source}, selector, property_name, value, note), validated against the declared layer names. |
Intervention & branching |
| broadcast | 广播 | The information intervention: Broadcast(message_id, content, channel="news", at_step, ttl=1, audience) — visible for ttl steps, delivered to macro_information when audience == "all", otherwise to the matching agents' local_information. |
Intervention & branching |
| branch | 分支 | A version node whose only difference from its parent is environment entries at at_step ≥ fork_step, and which inherits the parent's earlier steps by replay (kind: "branch" in versions.json). |
Intervention & branching |
| fork step | 分叉步 | fork_step — the first step a branch computes for itself (warm_start.resume_from + 1, must be ≥ 1); before it the branch is its parent, from it on it is the counterfactual. |
Intervention & branching |
| replay | 重放 | Re-running the parent version's stored actions for the inherited steps — phases 1, 4 and 5 only, no model call and no spend — so the inherited history reproduces the parent exactly (Action.source == "replay"). |
Intervention & branching |
| version | 版本 | A version node that starts from a cold run at step 0 (kind: "version") — what any edit other than a late environment-only one produces: a change to P, to f, to run settings Θ, or to E before the fork step. |
Versions & the research loop |
| fork | 派生 | Study-level reuse only: fork_study() copies a matched or reference: true study into a new study_id with its own version history and leaves the source read-only. |
Versions & the research loop |
| study workspace | 研究工作区 | studies/<study_id>/ — the directory holding every artifact of one study, and therefore the study's complete state. |
Anatomy of a Study |
| artifact | 工件 | The one validated document a stage writes (study.yaml, environment.json, population.json + roster.jsonl, simulation.json, study.duckdb, report.md), written and re-read through write_artifact / validate_handoff. |
Anatomy of a Study |
| stage / skill | 阶段 / 技能 | One pipeline step: a /sv-* skill that reads upstream artifacts, writes exactly one artifact of its own, and pauses at a gate — sv-init, sv-build-model, sv-build-environment, sv-build-population, sv-run, sv-report, plus /sv-iterate for changing a study that already exists (/sv-lit and /sv-paper sit under the report stage). |
Architecture |
| grounding | 真实世界锚定 | grounding/grounding.json — the merge-friendly sidecar recording each real-world fact the study rests on, with basis ∈ {sourced, proxy, assumed} and source.via ∈ {event_service, web_search, provider, user}. |
Grounding & Provenance |
| resource manifest | 资源清单 | resources.json — the ResourceManifest declaring, by name, the mcp_servers / datasets / tools a study actually used (endpoints and keys stay out of it). |
External Capabilities |
| review gate | 待复核 | The rule that marks a stage carried over from the parent version as review when it sits at or after the version's resume_from_stage and has no narrative written in this version — it holds the pipeline pointer until the stage is re-authored or explicitly verified. |
Versions & the research loop |
| Population service | 人群池服务 | The build-time MCP (user_pool_survey_mcp) that routes an attribute request across the registered persona pools, reports coverage, and samples P to target distributions. |
External Capabilities |
| Event service | 事件信号服务 | The build-time service (event_tool) returning structured macro / news / market data — list_sources, get_data, get_source_detail, search_web — which the runtime loop never calls. |
External Capabilities |
Branch vs. version vs. fork¶
The three words are not interchangeable. The difference is what may change and what is re-run.
| what may change | earlier steps | cost of a run | written by | |
|---|---|---|---|---|
| branch 分支 | environment entries at at_step ≥ fork_step only |
inherited from the parent by replay | only fork_step..n_steps |
create_branch(study_dir, note, fork_step=…) |
| version 版本 | anything in σ — P, f, Θ, or E before the fork step | none, the run is cold | every step | create_version(study_dir, note, …) |
| fork 派生 | a whole new study, source untouched | not applicable — a new study | every step of the new study | fork_study(studies_root, src_id, new_id) |
A branch that breaks the rule becomes a version
check_branch_invariant() re-checks the branch contract before the run:
population bundle and roster, the study's *.py code, the fixed keys of
simulation.json (seed, decision_ref, collector_ref,
interaction_rounds, store_ref, engine_args, …) and every environment
entry at at_step < fork_step must match the parent. n_steps may differ,
and new layers may be added. A violation is downgraded, not raised: the
entry becomes kind: "version", warm_start is cleared, the run goes cold,
and downgraded_from_branch records why.
Wording we retired¶
| Do not write | Write instead | Why |
|---|---|---|
| warm start | replay | The mechanism is user-facing as "the branch inherits its parent's steps"; the class name WarmStartSpec is kept only so artifacts written earlier still load. |
| policy shock, event injection | intervention | An intervention is exactly a ScheduledEvent or a Broadcast in the environment bundle — nothing else. |
| sub-experiment, variant, "fork" for a version node | branch or version | fork is reserved for the study level. |