LICENSE
README.md
pyproject.toml
src/slurmforge/__init__.py
src/slurmforge/control_job_contract.py
src/slurmforge/control_paths.py
src/slurmforge/errors.py
src/slurmforge/gate_task_map_contract.py
src/slurmforge/identity.py
src/slurmforge/launcher.py
src/slurmforge/overrides.py
src/slurmforge/record_fields.py
src/slurmforge/release_policy_contract.py
src/slurmforge/root_paths.py
src/slurmforge/submission_paths.py
src/slurmforge/workflow_contract.py
src/slurmforge.egg-info/PKG-INFO
src/slurmforge.egg-info/SOURCES.txt
src/slurmforge.egg-info/dependency_links.txt
src/slurmforge.egg-info/entry_points.txt
src/slurmforge.egg-info/requires.txt
src/slurmforge.egg-info/top_level.txt
src/slurmforge/cli/__init__.py
src/slurmforge/cli/args.py
src/slurmforge/cli/builders.py
src/slurmforge/cli/dry_run.py
src/slurmforge/cli/estimate.py
src/slurmforge/cli/eval.py
src/slurmforge/cli/init.py
src/slurmforge/cli/pipeline.py
src/slurmforge/cli/plan.py
src/slurmforge/cli/render.py
src/slurmforge/cli/requests.py
src/slurmforge/cli/resubmit.py
src/slurmforge/cli/run.py
src/slurmforge/cli/status.py
src/slurmforge/cli/train.py
src/slurmforge/cli/validate.py
src/slurmforge/config_contract/__init__.py
src/slurmforge/config_contract/default_values.py
src/slurmforge/config_contract/keys.py
src/slurmforge/config_contract/models.py
src/slurmforge/config_contract/option_sets.py
src/slurmforge/config_contract/registry.py
src/slurmforge/config_contract/starter_io.py
src/slurmforge/config_contract/workflows.py
src/slurmforge/config_contract/fields/__init__.py
src/slurmforge/config_contract/fields/dispatch.py
src/slurmforge/config_contract/fields/hardware.py
src/slurmforge/config_contract/fields/identity.py
src/slurmforge/config_contract/fields/launcher.py
src/slurmforge/config_contract/fields/notifications.py
src/slurmforge/config_contract/fields/resources.py
src/slurmforge/config_contract/fields/runs.py
src/slurmforge/config_contract/fields/runtime.py
src/slurmforge/config_contract/fields/sizing.py
src/slurmforge/config_contract/fields/stage_gpu.py
src/slurmforge/config_contract/fields/stage_io.py
src/slurmforge/config_contract/fields/stage_io_base.py
src/slurmforge/config_contract/fields/stage_io_starter.py
src/slurmforge/config_contract/fields/stages.py
src/slurmforge/config_contract/fields/storage.py
src/slurmforge/contracts/__init__.py
src/slurmforge/contracts/inputs.py
src/slurmforge/contracts/notifications.py
src/slurmforge/contracts/output_selectors.py
src/slurmforge/contracts/outputs.py
src/slurmforge/contracts/runs.py
src/slurmforge/control/__init__.py
src/slurmforge/control/control_submission_ledger.py
src/slurmforge/control/control_submission_records.py
src/slurmforge/control/control_submission_submit.py
src/slurmforge/control/dependencies.py
src/slurmforge/control/dispatch_budget.py
src/slurmforge/control/dispatch_materialization.py
src/slurmforge/control/dispatch_pack.py
src/slurmforge/control/dispatch_queue.py
src/slurmforge/control/dispatch_submit.py
src/slurmforge/control/finalization.py
src/slurmforge/control/gate_runtime.py
src/slurmforge/control/gates.py
src/slurmforge/control/initial_prepare.py
src/slurmforge/control/initial_submit.py
src/slurmforge/control/instance_reconcile.py
src/slurmforge/control/project.py
src/slurmforge/control/stage_submit.py
src/slurmforge/control/state.py
src/slurmforge/control/state_model.py
src/slurmforge/control/terminal_notification.py
src/slurmforge/control/workflow.py
src/slurmforge/control/workflow_status_projection.py
src/slurmforge/docs_render/__init__.py
src/slurmforge/docs_render/config_doc.py
src/slurmforge/docs_render/config_reference.py
src/slurmforge/docs_render/markers.py
src/slurmforge/docs_render/quickstart.py
src/slurmforge/docs_render/submission.py
src/slurmforge/emit/__init__.py
src/slurmforge/emit/pipeline_gate.py
src/slurmforge/emit/pipeline_notification.py
src/slurmforge/emit/sbatch_helpers.py
src/slurmforge/emit/stage.py
src/slurmforge/emit/stage_render/__init__.py
src/slurmforge/emit/stage_render/group.py
src/slurmforge/emit/stage_render/headers.py
src/slurmforge/emit/stage_render/notification.py
src/slurmforge/executor/__init__.py
src/slurmforge/executor/attempt.py
src/slurmforge/executor/bindings.py
src/slurmforge/executor/environment.py
src/slurmforge/executor/finalize.py
src/slurmforge/executor/instances.py
src/slurmforge/executor/runner.py
src/slurmforge/executor/stage.py
src/slurmforge/executor/launcher/__init__.py
src/slurmforge/executor/launcher/args.py
src/slurmforge/executor/launcher/command.py
src/slurmforge/executor/launcher/mpirun.py
src/slurmforge/executor/launcher/shell.py
src/slurmforge/executor/launcher/srun.py
src/slurmforge/executor/launcher/torchrun.py
src/slurmforge/inputs/__init__.py
src/slurmforge/inputs/models.py
src/slurmforge/inputs/serde.py
src/slurmforge/inputs/verifier.py
src/slurmforge/inputs/verification/__init__.py
src/slurmforge/inputs/verification/digests.py
src/slurmforge/inputs/verification/path_checks.py
src/slurmforge/inputs/verification/records.py
src/slurmforge/io/__init__.py
src/slurmforge/io/diagnostics.py
src/slurmforge/io/hash.py
src/slurmforge/io/json.py
src/slurmforge/io/schema.py
src/slurmforge/io/time.py
src/slurmforge/lineage/__init__.py
src/slurmforge/lineage/builders.py
src/slurmforge/lineage/paths.py
src/slurmforge/lineage/query.py
src/slurmforge/lineage/records.py
src/slurmforge/materialization/__init__.py
src/slurmforge/materialization/sourced.py
src/slurmforge/materialization/stage_batch.py
src/slurmforge/materialization/train_eval.py
src/slurmforge/notifications/__init__.py
src/slurmforge/notifications/models.py
src/slurmforge/notifications/policy.py
src/slurmforge/notifications/read_model.py
src/slurmforge/notifications/records.py
src/slurmforge/notifications/summary.py
src/slurmforge/orchestration/__init__.py
src/slurmforge/orchestration/audit.py
src/slurmforge/orchestration/estimate.py
src/slurmforge/orchestration/launch.py
src/slurmforge/orchestration/pipeline.py
src/slurmforge/orchestration/pipeline_build.py
src/slurmforge/orchestration/results.py
src/slurmforge/orchestration/stage_build.py
src/slurmforge/orchestration/status_format.py
src/slurmforge/orchestration/status_read_model.py
src/slurmforge/orchestration/status_view.py
src/slurmforge/outputs/__init__.py
src/slurmforge/outputs/artifact_store.py
src/slurmforge/outputs/models.py
src/slurmforge/outputs/records.py
src/slurmforge/outputs/selection.py
src/slurmforge/outputs/discovery/__init__.py
src/slurmforge/outputs/discovery/context.py
src/slurmforge/outputs/discovery/models.py
src/slurmforge/outputs/discovery/registry.py
src/slurmforge/outputs/discovery/service.py
src/slurmforge/outputs/discovery/writer.py
src/slurmforge/outputs/discovery/handlers/__init__.py
src/slurmforge/outputs/discovery/handlers/common.py
src/slurmforge/outputs/discovery/handlers/file.py
src/slurmforge/outputs/discovery/handlers/files.py
src/slurmforge/outputs/discovery/handlers/manifest.py
src/slurmforge/outputs/discovery/handlers/metric.py
src/slurmforge/planner/__init__.py
src/slurmforge/planner/audit.py
src/slurmforge/planner/audit_models.py
src/slurmforge/planner/budget.py
src/slurmforge/planner/identifiers.py
src/slurmforge/planner/sources.py
src/slurmforge/planner/stage_batch.py
src/slurmforge/planner/summaries.py
src/slurmforge/planner/train_eval_pipeline.py
src/slurmforge/planner/payloads/__init__.py
src/slurmforge/planner/payloads/bindings.py
src/slurmforge/planner/payloads/entry.py
src/slurmforge/planner/payloads/launcher.py
src/slurmforge/planner/payloads/notifications.py
src/slurmforge/planner/payloads/resources.py
src/slurmforge/planner/payloads/runtime.py
src/slurmforge/plans/__init__.py
src/slurmforge/plans/budget.py
src/slurmforge/plans/launcher.py
src/slurmforge/plans/notifications.py
src/slurmforge/plans/outputs.py
src/slurmforge/plans/resources.py
src/slurmforge/plans/runtime.py
src/slurmforge/plans/sources.py
src/slurmforge/plans/stage.py
src/slurmforge/plans/train_eval.py
src/slurmforge/plans/serde/__init__.py
src/slurmforge/plans/serde/budget.py
src/slurmforge/plans/serde/common.py
src/slurmforge/plans/serde/launcher.py
src/slurmforge/plans/serde/notifications.py
src/slurmforge/plans/serde/outputs.py
src/slurmforge/plans/serde/resources.py
src/slurmforge/plans/serde/runtime.py
src/slurmforge/plans/serde/stage.py
src/slurmforge/plans/serde/train_eval.py
src/slurmforge/resolver/__init__.py
src/slurmforge/resolver/binding_builders.py
src/slurmforge/resolver/defaults.py
src/slurmforge/resolver/models.py
src/slurmforge/resolver/output_refs.py
src/slurmforge/resolver/prior_source.py
src/slurmforge/resolver/train_eval_pipeline.py
src/slurmforge/resolver/upstream.py
src/slurmforge/resolver/explicit/__init__.py
src/slurmforge/resolver/explicit/external_path.py
src/slurmforge/resolver/explicit/run.py
src/slurmforge/resolver/explicit/stage_batch.py
src/slurmforge/resource_estimates/__init__.py
src/slurmforge/resource_estimates/build.py
src/slurmforge/resource_estimates/models.py
src/slurmforge/resource_estimates/render.py
src/slurmforge/root_model/__init__.py
src/slurmforge/root_model/aggregation.py
src/slurmforge/root_model/detection.py
src/slurmforge/root_model/manifest.py
src/slurmforge/root_model/models.py
src/slurmforge/root_model/notifications.py
src/slurmforge/root_model/root_ref.py
src/slurmforge/root_model/runs.py
src/slurmforge/root_model/seed.py
src/slurmforge/root_model/snapshots.py
src/slurmforge/runtime/__init__.py
src/slurmforge/runtime/probe.py
src/slurmforge/sizing/__init__.py
src/slurmforge/sizing/gpu.py
src/slurmforge/sizing/models.py
src/slurmforge/slurm/__init__.py
src/slurmforge/slurm/client.py
src/slurmforge/slurm/models.py
src/slurmforge/slurm/parsers.py
src/slurmforge/slurm/protocol.py
src/slurmforge/spec/__init__.py
src/slurmforge/spec/parse_artifact_store.py
src/slurmforge/spec/parse_common.py
src/slurmforge/spec/parse_dispatch.py
src/slurmforge/spec/parse_notifications.py
src/slurmforge/spec/parse_resources.py
src/slurmforge/spec/parse_runs.py
src/slurmforge/spec/parse_runtime.py
src/slurmforge/spec/parse_sections.py
src/slurmforge/spec/parser.py
src/slurmforge/spec/queries.py
src/slurmforge/spec/run_expansion.py
src/slurmforge/spec/run_ids.py
src/slurmforge/spec/run_paths.py
src/slurmforge/spec/sizing.py
src/slurmforge/spec/snapshot.py
src/slurmforge/spec/validation.py
src/slurmforge/spec/validation_common.py
src/slurmforge/spec/validation_inputs.py
src/slurmforge/spec/validation_launcher.py
src/slurmforge/spec/validation_notifications.py
src/slurmforge/spec/validation_outputs.py
src/slurmforge/spec/validation_resources.py
src/slurmforge/spec/validation_runs.py
src/slurmforge/spec/validation_runtime.py
src/slurmforge/spec/validation_stage.py
src/slurmforge/spec/validation_topology.py
src/slurmforge/spec/models/__init__.py
src/slurmforge/spec/models/common.py
src/slurmforge/spec/models/entry.py
src/slurmforge/spec/models/environment.py
src/slurmforge/spec/models/experiment.py
src/slurmforge/spec/models/notifications.py
src/slurmforge/spec/models/orchestration.py
src/slurmforge/spec/models/resources.py
src/slurmforge/spec/models/runs.py
src/slurmforge/spec/models/runtime.py
src/slurmforge/spec/models/sizing.py
src/slurmforge/spec/models/stages.py
src/slurmforge/spec/models/storage.py
src/slurmforge/spec/stage_parse/__init__.py
src/slurmforge/spec/stage_parse/before.py
src/slurmforge/spec/stage_parse/entry.py
src/slurmforge/spec/stage_parse/gpu_sizing.py
src/slurmforge/spec/stage_parse/inputs.py
src/slurmforge/spec/stage_parse/launcher.py
src/slurmforge/spec/stage_parse/outputs.py
src/slurmforge/spec/stage_parse/stage.py
src/slurmforge/starter/__init__.py
src/slurmforge/starter/catalog.py
src/slurmforge/starter/config_comments.py
src/slurmforge/starter/config_examples.py
src/slurmforge/starter/errors.py
src/slurmforge/starter/models.py
src/slurmforge/starter/render.py
src/slurmforge/starter/writers.py
src/slurmforge/starter/config_yaml/__init__.py
src/slurmforge/starter/config_yaml/render.py
src/slurmforge/starter/config_yaml/scalar.py
src/slurmforge/starter/config_yaml/sections.py
src/slurmforge/starter/config_yaml/stages/__init__.py
src/slurmforge/starter/config_yaml/stages/build.py
src/slurmforge/starter/config_yaml/stages/entry.py
src/slurmforge/starter/config_yaml/stages/inputs.py
src/slurmforge/starter/config_yaml/stages/outputs.py
src/slurmforge/starter/config_yaml/stages/resources.py
src/slurmforge/starter/examples/__init__.py
src/slurmforge/starter/examples/advanced.py
src/slurmforge/starter/examples/render.py
src/slurmforge/starter/templates/__init__.py
src/slurmforge/starter/templates/base.py
src/slurmforge/starter/templates/config_guide.py
src/slurmforge/starter/templates/eval_checkpoint.py
src/slurmforge/starter/templates/readme.py
src/slurmforge/starter/templates/resources.py
src/slurmforge/starter/templates/script_render.py
src/slurmforge/starter/templates/scripts.py
src/slurmforge/starter/templates/stage_specs.py
src/slurmforge/starter/templates/train_eval.py
src/slurmforge/starter/templates/train_only.py
src/slurmforge/starter/templates/assets/__init__.py
src/slurmforge/starter/templates/assets/eval.py
src/slurmforge/starter/templates/assets/train.py
src/slurmforge/status/__init__.py
src/slurmforge/status/machine.py
src/slurmforge/status/models.py
src/slurmforge/status/query.py
src/slurmforge/status/reader.py
src/slurmforge/status/reconcile.py
src/slurmforge/status/reconcile_attempts.py
src/slurmforge/status/reconcile_decision.py
src/slurmforge/status/reconcile_observations.py
src/slurmforge/status/reconcile_rules.py
src/slurmforge/status/serde.py
src/slurmforge/status/slurm_observations.py
src/slurmforge/storage/__init__.py
src/slurmforge/storage/batch_layout.py
src/slurmforge/storage/batch_materialization_records.py
src/slurmforge/storage/batch_registry.py
src/slurmforge/storage/derived_roots.py
src/slurmforge/storage/execution_catalog.py
src/slurmforge/storage/paths.py
src/slurmforge/storage/plan_reader.py
src/slurmforge/storage/runtime_batches.py
src/slurmforge/storage/train_eval_pipeline_layout.py
src/slurmforge/storage/workflow.py
src/slurmforge/storage/workflow_state_constants.py
src/slurmforge/storage/workflow_state_factory.py
src/slurmforge/storage/workflow_state_models.py
src/slurmforge/storage/workflow_state_mutations.py
src/slurmforge/storage/workflow_state_serde.py
src/slurmforge/storage/workflow_state_validation.py
src/slurmforge/storage/workflow_status_records.py
src/slurmforge/submission/__init__.py
src/slurmforge/submission/dependencies.py
src/slurmforge/submission/dependency_tree.py
src/slurmforge/submission/generation.py
src/slurmforge/submission/ledger.py
src/slurmforge/submission/ledger_records.py
src/slurmforge/submission/models.py
src/slurmforge/submission/notification_mail.py
src/slurmforge/submission/notifications.py
src/slurmforge/submission/queueing.py
src/slurmforge/submission/ready.py
src/slurmforge/submission/reconcile.py
src/slurmforge/submission/state.py
src/slurmforge/submission/submit_manifest.py
src/slurmforge/submission/submit_policy.py
src/slurmforge/submission/submit_transition.py
src/slurmforge/submission/submitter.py