Why Run Identifiers Need a Design
A run identifier is often the first thing a team sees when locating or discussing a model fit. A name such as final2 may be short, but it does not say what model, data, or estimation settings it refers to. A name based only on the time of execution can distinguish some executions, but it does not explain what differs scientifically or computationally. A useful identifier should be stable, interpretable, and specific enough to separate runs that are meaningfully different.
Here, a model run means an execution of a specified model against specified inputs and analysis settings. The identifier design problem is to decide which features define a distinct run for the work at hand, and then encode those features consistently. The identifier is not a summary of whether the run succeeded, what estimates it produced, or when it happened.
This definition depends on a deliberate choice of identity fields. Stability does not mean that a name somehow captures every detail of a computation. It means the chosen fields and their formatting rules are explicit. If two datasets have different contents but are both called data.csv, a name that records only the filename cannot distinguish them. Stable naming therefore requires stable labels or versions for the model, data, and settings being identified.
Choose the Identity Before the Name
Start by deciding which differences matter for the scientific or computational question. In a typical estimation workflow, candidate identity fields might include a project or study label, a model version, a data version, the estimation method and important options, and a random seed when the seed defines a distinct stochastic replicate. Include fields when changing them should make the run a different candidate for review or comparison. Exclude fields that are incidental to the run's definition, such as the machine that happened to execute it, a display label, or the time it started.
The correct set is purpose-dependent. If a run is intended to reproduce a particular stochastic computation, the seed is often essential. If the computation is deterministic under the specified inputs and settings, adding an arbitrary seed field can imply a distinction that has no effect. Similarly, a model version should change when a model change is intended to define a new candidate; a cosmetic filename change need not create a new model identity if the content and versioning policy say otherwise.
A useful design separates run specification from execution occurrence. The specification describes the model, inputs, and settings. Re-running the same specification can therefore retain the same stable identifier. If a workflow also needs to tell separate execution attempts apart, that is a different identity problem and should not be solved by silently changing the specification identifier. A timestamp can be recorded as an execution detail, but it is not a substitute for specifying what was run.
Constructing a Readable Identifier
Use labeled fields rather than concatenating unexplained fragments. A grammar such as study=...|model=...|data=...|analysis=...|seed=... makes the role of each value visible. Choose a fixed field order, fixed separators, and a defined character policy. For example, a team could require lowercase ASCII letters, digits, and hyphens within values; use a reserved separator between labeled fields; and replace spaces consistently. If values can contain the separator, either escape it by a documented rule or prohibit it in field values. These choices prevent two different field combinations from being rendered as the same string.
Canonicalization is the process of converting equivalent input representations to one standard form before constructing the identifier. A rule might convert all field names and permitted text values to lowercase, trim leading and trailing spaces, and represent a missing value with an explicit token such as none. The rule must be applied consistently. Otherwise, for instance, FOCE and foce might generate different names despite being intended to mean the same setting, or a blank field might be confused with an omitted field.
Keep labels human-readable without relying on local shorthand that another analyst could interpret differently. If a method has a standard unambiguous name, use it or define a consistent short code in the naming convention. A compact code such as est1 is not informative unless its meaning is stable and documented. Shortening is useful only when it preserves unambiguous distinctions.
Worked Example: Naming Two Estimation Specifications
Suppose a hypothetical team is fitting a model for study pk17. It has model version mm03-v2.1 and data version ds2026q1-r1. The analysis uses first-order conditional estimation with interaction, and this deterministic fit has no seed that defines a replicate. The team chooses the following fixed fields and order: study, model, data, analysis.
Using lowercase labels, a vertical bar between fields, and hyphens within values gives:
This identifier states the key distinctions directly. If the same four canonical field values are submitted again, the construction rule returns exactly the same string; no clock reading or machine name is involved. Now suppose the data are revised and assigned the explicit version ds2026q1-r2. Replacing only the data field gives:
The identifiers differ at the data field, so the revised input is not mistaken for the earlier specification. This conclusion depends on the data version label actually changing when the data content relevant to the run changes. If both datasets were labeled ds2026q1-r1, these names would not expose the difference.
Why the Naming Rule Must Be Unambiguous
The central correctness requirement can be stated precisely. Let \(K\) be the ordered collection of fields selected to define a run, and let \(g(K)\) be the string produced by the naming rule. The rule is adequate over a set of intended runs if distinct run specifications in that set map to distinct identifiers. In other words, for any two specifications \(K_1\) and \(K_2\), if the workflow considers them different, then \(g(K_1)\ne g(K_2)\).
This condition is sometimes called injectivity over the intended scope. It explains why the choice of fields matters more than a decorative format. If the model version is omitted, two runs with different model versions can have the same name. If separators are not handled consistently, different values can also collapse to the same string.
For example, suppose an unsafe rule simply joins two values with a hyphen. The pairs (a-b, c) and (a, b-c) both become a-b-c. The formatting loses information even though both fields were nominally included. A labeled, delimited format with a restriction or escaping rule avoids this ambiguity.
Worked Example: Why a Timestamp May Not Distinguish Executions
Consider two hypothetical executions that start at 14:12:05 and 14:12:50 on the same date. Suppose the naming rule records only the date and minute, producing a format like 2026-10-28-1412. Both executions receive that exact timestamp-based name because the recorded timestamps are equal at minute resolution.
Thus, the claim that repeating a specification later yields a different timestamp-based name is true only when the recorded timestamp values differ. A timestamp format with sufficient resolution can reduce the chance of identical recorded values, but finite resolution, simultaneous executions, clock behavior, or formatting choices can still create collisions. If unique occurrence names are required, the workflow must use sufficient timestamp resolution and handle possible collisions rather than assuming the clock guarantees uniqueness.
More importantly, the timestamp alone does not say whether the executions used different data, models, or settings. A specification-based identifier gives the same name to the same specified run, regardless of when it is executed. If the aim is to identify distinct execution occurrences rather than specifications, that should be stated explicitly and handled as a separate naming requirement.
Replicates, Mutable Results, and Alternatives
When stochastic computations are intentionally replicated, the seed can be part of the identity fields. Suppose the same model, data, and estimation settings are run with seeds 104729 and 104759. If those seeds define distinct planned replicates, the identifiers should differ at the seed field. Conversely, if an execution is merely repeated with the same seed and all other fields unchanged, it has the same specification identifier. The identifier alone should not be asked to distinguish separate attempts of that identical specification.
Worked Example: Encoding Two Stochastic Replicates
Use the hypothetical study, model, data, and analysis fields from the first example, but now assume the fitting procedure uses a random seed and the workflow treats each seed as a distinct replicate. Add a final field labeled seed. For seed 104729, the identifier is:
For seed 104759, only the seed value changes:
The strings differ because the declared replicate-defining input differs. If the team instead reruns seed 104729 with identical model, data, and settings, the specification rule returns the first identifier again. This is consistent: the identifier names the specification, not the number of times that specification has been attempted.
Some common alternatives are useful in limited roles, but each has a trade-off.
| Approach | Strength | Limitation |
|---|---|---|
| Sequential labels such as run-001 | Compact and easy to assign within a controlled registry | Does not reveal what differs; numbering rules must prevent duplicate assignment and may not remain stable across independent workspaces |
| Timestamp-only labels | Can help order recorded execution times | Do not describe the specification; two events can share a recorded timestamp at the chosen resolution |
| Descriptive field-based labels | Human-readable and can expose intended distinctions | Can become long; require strict field, ordering, and canonicalization rules |
| Content-derived digest | Can compactly represent a precisely defined input representation | Usually opaque to a reader and depends on exactly what content is included and how it is serialized |
A digest can be used as a supplementary check or compact suffix, but it does not replace the need to define the run identity. If a readable name omits a scientifically important setting, appending a digest without explaining its inputs does not tell a reader what that distinction means.
Diagnostics and Common Failure Modes
Before adopting a naming convention, test it with pairs of specifications that should and should not have different identifiers. Change one field at a time: the model version, data version, estimation method, an important option, and the seed when relevant. Confirm that every intended distinction changes the name. Then submit equivalent values in different surface forms, such as uppercase and lowercase method labels or values with surrounding spaces, and verify that the canonicalization rule behaves as intended.
A practical review should also check for ambiguous abbreviations, missing-value conventions, delimiter handling, and overly long names that are likely to be manually truncated. If long names are unavoidable, keep the essential fields visible and use a consistent scheme rather than dropping fields ad hoc. An identifier that is truncated differently in two systems can lose the very distinction it was designed to preserve.
- Ambiguous labels: A name such as m3-d1-e2 is not self-explanatory unless each code has one stable meaning. Use explicit labels or a rigorously maintained code convention.
- Omitted versions: A model filename or dataset filename can be reused. Include a version or another stable distinction that changes when the relevant content changes.
- Unstable formatting: Different field order, case, or missing-value representation can give the same specification multiple names. Fix the order and canonicalization rules.
- Mutable outcome fields: Do not make the identifier depend on convergence status, objective-function value, or estimated parameters. These are results of execution, not inputs defining the intended specification, and may be unknown when the run is named.
- Timestamp collisions: Do not assume a timestamp string is unique. Its distinguishing power is limited by the values actually recorded and their resolution.
A useful naming convention is not necessarily the shortest possible string. It is a rule that analysts can apply consistently and that makes the intended differences inspectable without changing the name merely because the run was launched at a different time or produced a different outcome.
Check Your Understanding
Answer each question using the distinction between a run specification and an execution occurrence.
- A team changes the dataset version but keeps the model, method, and seed unchanged. Which field should change in a specification-based identifier, and why?
- Two executions start at 09:31:10 and 09:31:45. A naming rule records only the date and minute. Are their timestamp-based names guaranteed to differ? Explain.
- A naming rule joins two unlabeled fields with a hyphen. Give two different field pairs that can produce the same string, and state one way to prevent this ambiguity.
- A fit is repeated with the same model, data, method, settings, and seed. Should a specification-based identifier change merely because it is a new execution? Explain.
- Why is convergence status a poor field for an identifier intended to name the planned run specification?
Solutions. (1) The data-version field should change because the revised dataset is an intended input distinction; the identifier changes if that field is included as essential. (2) No. Both starts are recorded in the same date-and-minute interval, so the timestamp strings can be identical. They differ only if the recorded timestamp values differ; uniqueness requires adequate resolution and collision handling. (3) The pairs (a-b, c) and (a, b-c) both join to a-b-c. Labeled fields with a reserved separator, plus a rule for escaping or prohibiting that separator inside values, prevent the ambiguity. (4) No. The specification fields are unchanged, so the stable specification identifier remains the same; distinguishing execution attempts is a separate requirement. (5) Convergence status is an outcome that is not generally known before execution and can change across attempts of the same specification, so it should not define the planned run's identity.