Glossary¶
Use these terms to make an architecture claim precise. Each definition answers three questions where useful:
- what is it
- who owns it
- what does it not prove
The vocabulary follows the artifact route:
flowchart LR
entry["entrypoint"] --> family["rule family"]
family --> binding["module binding"]
binding --> implementation["script or package"]
implementation --> internal["internal contract"]
internal --> public["public file API"]
Evidence terms follow a second route:
flowchart LR
claim["architecture claim"] --> preservation["preservation evidence"]
preservation --> negative["negative evidence"]
negative --> packet["review packet"]
drift["architecture drift"] --> trigger["refactor trigger"]
trigger --> claim
Assembly and execution¶
Entrypoint
The top-level Snakefile that establishes contract gates, shared names, local workflow
assembly, and completion targets. It is executable Python evaluated during parsing, not a
passive table of contents.
Parse time
When Snakemake evaluates workflow Python, config, includes, module declarations, and rule definitions. A successful parse proves that a workflow could be assembled under the current context; it does not prove that a requested target has a valid plan.
Planning time
When requested targets become jobs through wildcards, input functions, checkpoints, resources, and file dependencies. A successful dry-run is planning evidence, not execution or interface evidence.
Execution time
When a planned job runs its shell command, script, notebook, or wrapper in an execution environment. Runtime success does not prove the graph declared every influential file.
Visible assembly
The property that a reviewer can locate config gates, included concerns, module imports, and completion targets without first reconstructing implementation internals.
Include
A parse-time mechanism that contributes definitions to the same local workflow and rule namespace. It helps separate locally owned concerns but does not isolate config, Python names, or ownership automatically.
Default target
The target Snakemake selects when the caller requests no explicit target. It defines a completion promise, not independent proof that the produced artifact deserves trust.
Ownership boundaries¶
Rule family
A locally owned group of rules sharing a file lifecycle, policy owner, or review question.
It is normally assembled with include.
Workflow module
A reusable Snakemake workflow or rule template imported through module and use rule.
Its boundary includes config, files, names, policy, runtime, and evidence.
Module caller
The local workflow that chooses a module, supplies bounded config, imports selected rules, assigns local aliases, and binds repository-specific paths and policy.
use rule binding
The call site where a module-owned rule template becomes a caller-owned local rule. It can override inputs, outputs, parameters, resources, logs, and benchmarks and therefore should reveal local meaning.
Ownership boundary
A division that assigns a decision and its maintenance obligation to one reviewable surface. A directory boundary is not an ownership boundary unless dependencies follow the claimed direction.
Dependency direction
The allowed flow of decisions between owners. For example, a rule may pass explicit arguments into package code; package code should not reach back into global workflow state.
Import ledger
A human-readable inventory of global names an included file consumes. Snakemake does not enforce this interface, so the ledger helps expose include-order and shared-state coupling.
Interface dimension
One aspect of a module contract: config, files, imported names, semantic policy, runtime, or operational evidence. Auditing only input and output paths leaves the interface incomplete.
Files and consumers¶
Declared input
A file named under a rule's input. Snakemake can use its identity and metadata to build
dependency edges and plan reruns.
File influence
Any file whose contents can affect output. Every material file influence should normally
be a declared input; passing its path through params does not declare its contents.
Internal file contract
A path and shape used between rules inside the workflow. It can change through a coordinated refactor when producers, consumers, tests, and guides change together.
Public file API
The documented downstream promise for artifact location, shape, meaning, and evolution.
In the capstone, this boundary is versioned under publish/v1/.
Compatibility
The property that an existing consumer continues to work with the promised meaning. A file can remain parseable while becoming semantically incompatible.
Promotion
The deliberate transition from internal workflow state to a public artifact. Promotion adds a consumer-facing promise; it is not merely a copy operation.
Manifest
An ordered inventory of published members and hashes. It supports membership and integrity review but does not establish the scientific validity of each member.
Atomic publication
A bounded write pattern that validates a sibling candidate before renaming it to the final path. Under tested filesystem assumptions, failure before rename preserves the prior trusted final. It does not guarantee cross-filesystem atomicity or power-loss durability.
Consumer test
A test that approaches only documented public paths and meanings. It catches contract breakage that producer-focused tests can miss.
Implementation and coupling¶
Workflow-adjacent script
An implementation owned by one workflow job and commonly placed under
workflow/scripts/. It may use Snakemake's injected object, so its dependency audit must
include that object's files, config, and context.
Package interface
An ordinary function or command-line contract that has meaning without Snakemake. Package code should accept paths and values rather than discover repository or workflow state.
Hidden coupling
An influential dependency that crosses a boundary without appearing at the expected call site. Examples include broad config passing, undeclared file reads, current-directory assumptions, and import-time environment access.
Ambient input
Context obtained outside declared files and explicit policy, such as clock time, Git state, environment variables, platform, current directory, or a network service. Ambient input must be prohibited, injected, materialized, or documented according to the claim.
Source guard
A targeted test of a source-level architecture claim, such as allowed module config keys. It can reject recurrence of a known coupling pattern but cannot prove all runtime behavior.
Negative evidence
Evidence that a deliberate defect is rejected. A passing valid example establishes less than a valid example paired with a mutation that fails for the expected reason.
Review and change¶
Architecture claim
A falsifiable statement about ownership or dependency direction, such as “modules receive only declared runtime config.” It needs observations that could support or contradict it.
Architecture drift
A growing mismatch between claimed boundaries and actual dependencies. Drift can exist while every job still succeeds.
Refactor trigger
An observed correctness, maintenance, or review failure that justifies changing ownership. File length or aesthetic preference alone is not a trigger.
Preservation evidence
Evidence that a refactor retained the intended parse surface, plan, execution, artifact, or public contract. The relevant levels depend on the boundary changed.
Deliberate deferral
A recorded decision not to refactor yet, with the current safety argument, guarding evidence, and a measurable condition that reopens the decision.
Review packet
A bounded set of claims, source observations, command receipts, decisions, and remaining risks that another reviewer can challenge without oral context.
Confusion pairs¶
| Do not collapse | Distinction |
|---|---|
| include / module | an include assembles one local workflow; a module creates a reusable caller boundary |
| rule family / package | a rule family owns graph contracts; a package owns ordinary software behavior |
| explicit path / declared input | a path can be passed explicitly while its file contents remain absent from the graph |
| completion / trust | reaching the default target does not independently validate its public meaning |
| deterministic shape / compatible meaning | stable JSON formatting does not prevent a semantic breaking change |
| runtime success / honest interface | hidden coupling can execute successfully |
| public artifact / operational evidence | consumers may rely on the former; logs and benchmarks primarily diagnose the run |
| pressure / defect | a crowded entrypoint may deserve review; a missing input edge is a reproducibility defect |
| passing experiment / accepted design | a defect-reproduction experiment should pass when it exposes the intended failure |
| rename / refactor | changing names alters navigation; changing ownership and dependency direction alters architecture |
Retrieval check¶
Without returning to the definitions, explain:
- why
config: configweakens a module caller boundary - why a panel path under
paramsmay create stale output - why
--list-rulescannot establish file API compatibility - why a manifest and consumer test answer different questions
- why a deliberate deferral is stronger than an untracked intention to reorganize later