orca-auto 6.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- orca_auto-6.0.0/LICENSE +21 -0
- orca_auto-6.0.0/MANIFEST.in +1 -0
- orca_auto-6.0.0/PKG-INFO +124 -0
- orca_auto-6.0.0/README.md +63 -0
- orca_auto-6.0.0/pyproject.toml +335 -0
- orca_auto-6.0.0/setup.cfg +4 -0
- orca_auto-6.0.0/src/orca_auto/__init__.py +11 -0
- orca_auto-6.0.0/src/orca_auto/_process_evidence.py +60 -0
- orca_auto-6.0.0/src/orca_auto/_version.py +45 -0
- orca_auto-6.0.0/src/orca_auto/activity/__init__.py +115 -0
- orca_auto-6.0.0/src/orca_auto/activity/_cancel.py +140 -0
- orca_auto-6.0.0/src/orca_auto/activity/_clear.py +142 -0
- orca_auto-6.0.0/src/orca_auto/activity/_collectors.py +104 -0
- orca_auto-6.0.0/src/orca_auto/activity/_list.py +65 -0
- orca_auto-6.0.0/src/orca_auto/activity/_orca.py +305 -0
- orca_auto-6.0.0/src/orca_auto/activity/_queue_records.py +244 -0
- orca_auto-6.0.0/src/orca_auto/activity/_sources.py +129 -0
- orca_auto-6.0.0/src/orca_auto/activity_labels.py +221 -0
- orca_auto-6.0.0/src/orca_auto/activity_rendering.py +171 -0
- orca_auto-6.0.0/src/orca_auto/activity_view.py +296 -0
- orca_auto-6.0.0/src/orca_auto/cli.py +90 -0
- orca_auto-6.0.0/src/orca_auto/cli_handlers.py +355 -0
- orca_auto-6.0.0/src/orca_auto/cli_parsers.py +476 -0
- orca_auto-6.0.0/src/orca_auto/cli_queue.py +527 -0
- orca_auto-6.0.0/src/orca_auto/cli_systemd_apply.py +147 -0
- orca_auto-6.0.0/src/orca_auto/cli_systemd_freshness.py +724 -0
- orca_auto-6.0.0/src/orca_auto/cli_systemd_restart.py +256 -0
- orca_auto-6.0.0/src/orca_auto/cli_systemd_restart_guard.py +219 -0
- orca_auto-6.0.0/src/orca_auto/cli_systemd_status.py +202 -0
- orca_auto-6.0.0/src/orca_auto/cli_systemd_units.py +212 -0
- orca_auto-6.0.0/src/orca_auto/cli_worker_supervision.py +273 -0
- orca_auto-6.0.0/src/orca_auto/cli_workers.py +323 -0
- orca_auto-6.0.0/src/orca_auto/core/__init__.py +1 -0
- orca_auto-6.0.0/src/orca_auto/core/activity.py +154 -0
- orca_auto-6.0.0/src/orca_auto/core/activity_icons.py +41 -0
- orca_auto-6.0.0/src/orca_auto/core/admission/__init__.py +73 -0
- orca_auto-6.0.0/src/orca_auto/core/admission/engine_process.py +486 -0
- orca_auto-6.0.0/src/orca_auto/core/admission/persistence.py +87 -0
- orca_auto-6.0.0/src/orca_auto/core/admission/records.py +159 -0
- orca_auto-6.0.0/src/orca_auto/core/admission/store.py +838 -0
- orca_auto-6.0.0/src/orca_auto/core/app_ids.py +20 -0
- orca_auto-6.0.0/src/orca_auto/core/artifacts.py +44 -0
- orca_auto-6.0.0/src/orca_auto/core/commands/__init__.py +1 -0
- orca_auto-6.0.0/src/orca_auto/core/commands/queue.py +155 -0
- orca_auto-6.0.0/src/orca_auto/core/commands/run_dir.py +332 -0
- orca_auto-6.0.0/src/orca_auto/core/commands/worker_options.py +21 -0
- orca_auto-6.0.0/src/orca_auto/core/config/__init__.py +22 -0
- orca_auto-6.0.0/src/orca_auto/core/config/bounded_yaml.py +140 -0
- orca_auto-6.0.0/src/orca_auto/core/config/discovery.py +73 -0
- orca_auto-6.0.0/src/orca_auto/core/config/engines.py +305 -0
- orca_auto-6.0.0/src/orca_auto/core/config/files.py +386 -0
- orca_auto-6.0.0/src/orca_auto/core/config/schema.py +342 -0
- orca_auto-6.0.0/src/orca_auto/core/config/scratch.py +46 -0
- orca_auto-6.0.0/src/orca_auto/core/engine_catalog.py +179 -0
- orca_auto-6.0.0/src/orca_auto/core/engine_process.py +421 -0
- orca_auto-6.0.0/src/orca_auto/core/engine_runner.py +457 -0
- orca_auto-6.0.0/src/orca_auto/core/engine_runtime.py +57 -0
- orca_auto-6.0.0/src/orca_auto/core/engine_scratch.py +1513 -0
- orca_auto-6.0.0/src/orca_auto/core/engines/__init__.py +50 -0
- orca_auto-6.0.0/src/orca_auto/core/engines/artifacts.py +173 -0
- orca_auto-6.0.0/src/orca_auto/core/engines/command_result.py +67 -0
- orca_auto-6.0.0/src/orca_auto/core/engines/definition_builder.py +164 -0
- orca_auto-6.0.0/src/orca_auto/core/engines/definitions.py +82 -0
- orca_auto-6.0.0/src/orca_auto/core/engines/identity.py +59 -0
- orca_auto-6.0.0/src/orca_auto/core/engines/queue_worker.py +205 -0
- orca_auto-6.0.0/src/orca_auto/core/engines/registry.py +22 -0
- orca_auto-6.0.0/src/orca_auto/core/engines/worker_child.py +109 -0
- orca_auto-6.0.0/src/orca_auto/core/extensions.py +50 -0
- orca_auto-6.0.0/src/orca_auto/core/geometry_limits.py +9 -0
- orca_auto-6.0.0/src/orca_auto/core/indexing/__init__.py +25 -0
- orca_auto-6.0.0/src/orca_auto/core/indexing/engine_artifacts.py +323 -0
- orca_auto-6.0.0/src/orca_auto/core/indexing/engine_job_locations.py +129 -0
- orca_auto-6.0.0/src/orca_auto/core/indexing/engine_records.py +156 -0
- orca_auto-6.0.0/src/orca_auto/core/indexing/engines.py +16 -0
- orca_auto-6.0.0/src/orca_auto/core/indexing/location.py +17 -0
- orca_auto-6.0.0/src/orca_auto/core/indexing/roots.py +168 -0
- orca_auto-6.0.0/src/orca_auto/core/indexing/store.py +260 -0
- orca_auto-6.0.0/src/orca_auto/core/machine_observation.py +296 -0
- orca_auto-6.0.0/src/orca_auto/core/messaging/__init__.py +73 -0
- orca_auto-6.0.0/src/orca_auto/core/messaging/channel.py +33 -0
- orca_auto-6.0.0/src/orca_auto/core/messaging/config_io.py +61 -0
- orca_auto-6.0.0/src/orca_auto/core/messaging/discord_bot.py +155 -0
- orca_auto-6.0.0/src/orca_auto/core/messaging/discord_http.py +120 -0
- orca_auto-6.0.0/src/orca_auto/core/messaging/registry.py +50 -0
- orca_auto-6.0.0/src/orca_auto/core/messaging/render_discord.py +241 -0
- orca_auto-6.0.0/src/orca_auto/core/messaging/richtext.py +139 -0
- orca_auto-6.0.0/src/orca_auto/core/notifications/__init__.py +2 -0
- orca_auto-6.0.0/src/orca_auto/core/notifications/engines.py +278 -0
- orca_auto-6.0.0/src/orca_auto/core/paths/__init__.py +55 -0
- orca_auto-6.0.0/src/orca_auto/core/paths/reserved.py +149 -0
- orca_auto-6.0.0/src/orca_auto/core/paths/validation.py +251 -0
- orca_auto-6.0.0/src/orca_auto/core/paths/workflow.py +327 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/__init__.py +78 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/cancellable.py +269 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/child/__init__.py +1 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/child/execution.py +101 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/child/process.py +220 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/dependencies.py +71 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/engine/__init__.py +1 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/engine/admission.py +139 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/engine/artifacts.py +670 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/engine/child.py +184 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/engine/execution.py +123 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/engine/input_snapshot.py +762 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/engine/lifecycle.py +47 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/engine/runtime.py +389 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/engine/snapshot_intent.py +720 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/engine/worker_execution.py +348 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/enqueue_publication.py +783 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/execution.py +184 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/generation.py +134 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/lifecycle/__init__.py +75 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/lifecycle/hooks.py +80 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/lifecycle/reconcile.py +136 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/lifecycle/shutdown.py +250 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/lifecycle/terminal.py +261 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/metadata.py +105 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/persistence.py +178 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/priority.py +25 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/processes.py +327 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/publication.py +150 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/resource_requests.py +37 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/store.py +1016 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/terminal_sync.py +156 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/types.py +30 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/worker/__init__.py +90 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/worker/admission.py +302 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/worker/execution_dependencies.py +93 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/worker/loop.py +222 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/worker/models.py +49 -0
- orca_auto-6.0.0/src/orca_auto/core/queue/worker/process.py +509 -0
- orca_auto-6.0.0/src/orca_auto/core/state/__init__.py +1 -0
- orca_auto-6.0.0/src/orca_auto/core/state/engine.py +315 -0
- orca_auto-6.0.0/src/orca_auto/core/statuses.py +142 -0
- orca_auto-6.0.0/src/orca_auto/core/terminal.py +162 -0
- orca_auto-6.0.0/src/orca_auto/core/utils/__init__.py +51 -0
- orca_auto-6.0.0/src/orca_auto/core/utils/coercion.py +118 -0
- orca_auto-6.0.0/src/orca_auto/core/utils/lock.py +130 -0
- orca_auto-6.0.0/src/orca_auto/core/utils/persistence.py +192 -0
- orca_auto-6.0.0/src/orca_auto/core/utils/process.py +297 -0
- orca_auto-6.0.0/src/orca_auto/core/utils/process_tracking.py +80 -0
- orca_auto-6.0.0/src/orca_auto/core/workflow_identity.py +12 -0
- orca_auto-6.0.0/src/orca_auto/orca/__init__.py +1 -0
- orca_auto-6.0.0/src/orca_auto/orca/admission_env.py +11 -0
- orca_auto-6.0.0/src/orca_auto/orca/attempt/__init__.py +1 -0
- orca_auto-6.0.0/src/orca_auto/orca/attempt/engine.py +452 -0
- orca_auto-6.0.0/src/orca_auto/orca/attempt/notifications.py +59 -0
- orca_auto-6.0.0/src/orca_auto/orca/attempt/reporting.py +262 -0
- orca_auto-6.0.0/src/orca_auto/orca/attempt/resume.py +95 -0
- orca_auto-6.0.0/src/orca_auto/orca/cli_logging.py +44 -0
- orca_auto-6.0.0/src/orca_auto/orca/commands/__init__.py +0 -0
- orca_auto-6.0.0/src/orca_auto/orca/commands/init.py +369 -0
- orca_auto-6.0.0/src/orca_auto/orca/commands/queue.py +53 -0
- orca_auto-6.0.0/src/orca_auto/orca/commands/run_inp.py +92 -0
- orca_auto-6.0.0/src/orca_auto/orca/completion_rules.py +41 -0
- orca_auto-6.0.0/src/orca_auto/orca/config.py +184 -0
- orca_auto-6.0.0/src/orca_auto/orca/config_validation.py +44 -0
- orca_auto-6.0.0/src/orca_auto/orca/direct_cancel.py +211 -0
- orca_auto-6.0.0/src/orca_auto/orca/engine.py +37 -0
- orca_auto-6.0.0/src/orca_auto/orca/evidence.py +161 -0
- orca_auto-6.0.0/src/orca_auto/orca/execution.py +496 -0
- orca_auto-6.0.0/src/orca_auto/orca/execution_binding.py +1857 -0
- orca_auto-6.0.0/src/orca_auto/orca/frequencies.py +298 -0
- orca_auto-6.0.0/src/orca_auto/orca/inp_rewriter.py +120 -0
- orca_auto-6.0.0/src/orca_auto/orca/input_artifacts.py +81 -0
- orca_auto-6.0.0/src/orca_auto/orca/input_blocks.py +725 -0
- orca_auto-6.0.0/src/orca_auto/orca/input_references.py +291 -0
- orca_auto-6.0.0/src/orca_auto/orca/job_locations/__init__.py +31 -0
- orca_auto-6.0.0/src/orca_auto/orca/job_locations/_artifacts.py +126 -0
- orca_auto-6.0.0/src/orca_auto/orca/job_locations/_contract_context.py +170 -0
- orca_auto-6.0.0/src/orca_auto/orca/job_locations/_contract_payload.py +592 -0
- orca_auto-6.0.0/src/orca_auto/orca/job_locations/_generation.py +148 -0
- orca_auto-6.0.0/src/orca_auto/orca/job_locations/_models.py +73 -0
- orca_auto-6.0.0/src/orca_auto/orca/job_locations/_records.py +363 -0
- orca_auto-6.0.0/src/orca_auto/orca/job_locations/_runtime_context.py +753 -0
- orca_auto-6.0.0/src/orca_auto/orca/job_locations/_tracking.py +37 -0
- orca_auto-6.0.0/src/orca_auto/orca/job_locations/_utils.py +276 -0
- orca_auto-6.0.0/src/orca_auto/orca/job_type.py +29 -0
- orca_auto-6.0.0/src/orca_auto/orca/launch_gate.py +88 -0
- orca_auto-6.0.0/src/orca_auto/orca/molecule_key.py +156 -0
- orca_auto-6.0.0/src/orca_auto/orca/notifications.py +172 -0
- orca_auto-6.0.0/src/orca_auto/orca/orca_chemistry.py +114 -0
- orca_auto-6.0.0/src/orca_auto/orca/orca_opt_progress.py +73 -0
- orca_auto-6.0.0/src/orca_auto/orca/orca_runner.py +531 -0
- orca_auto-6.0.0/src/orca_auto/orca/out_analyzer.py +384 -0
- orca_auto-6.0.0/src/orca_auto/orca/output_status.py +82 -0
- orca_auto-6.0.0/src/orca_auto/orca/parser/__init__.py +270 -0
- orca_auto-6.0.0/src/orca_auto/orca/parser/extractors.py +173 -0
- orca_auto-6.0.0/src/orca_auto/orca/parser/io.py +33 -0
- orca_auto-6.0.0/src/orca_auto/orca/parser/patterns.py +175 -0
- orca_auto-6.0.0/src/orca_auto/orca/queue/__init__.py +1 -0
- orca_auto-6.0.0/src/orca_auto/orca/queue/adapter.py +794 -0
- orca_auto-6.0.0/src/orca_auto/orca/queue/cancellation.py +96 -0
- orca_auto-6.0.0/src/orca_auto/orca/queue/entries.py +154 -0
- orca_auto-6.0.0/src/orca_auto/orca/queue/orphans.py +285 -0
- orca_auto-6.0.0/src/orca_auto/orca/queue/publication_repair.py +204 -0
- orca_auto-6.0.0/src/orca_auto/orca/queue/replay.py +1372 -0
- orca_auto-6.0.0/src/orca_auto/orca/queue/terminal_replay.py +194 -0
- orca_auto-6.0.0/src/orca_auto/orca/queue/worker.py +311 -0
- orca_auto-6.0.0/src/orca_auto/orca/queue/worker_runtime.py +85 -0
- orca_auto-6.0.0/src/orca_auto/orca/queue/worker_tracking.py +243 -0
- orca_auto-6.0.0/src/orca_auto/orca/relaxed_scan.py +251 -0
- orca_auto-6.0.0/src/orca_auto/orca/report/__init__.py +60 -0
- orca_auto-6.0.0/src/orca_auto/orca/report/attempts.py +137 -0
- orca_auto-6.0.0/src/orca_auto/orca/report/composer.py +281 -0
- orca_auto-6.0.0/src/orca_auto/orca/report/frequencies.py +50 -0
- orca_auto-6.0.0/src/orca_auto/orca/report/interaction_energy.py +322 -0
- orca_auto-6.0.0/src/orca_auto/orca/report/irc.py +775 -0
- orca_auto-6.0.0/src/orca_auto/orca/report/neb.py +760 -0
- orca_auto-6.0.0/src/orca_auto/orca/report/opt.py +299 -0
- orca_auto-6.0.0/src/orca_auto/orca/report/render.py +307 -0
- orca_auto-6.0.0/src/orca_auto/orca/report/rmsd.py +366 -0
- orca_auto-6.0.0/src/orca_auto/orca/report/scan.py +304 -0
- orca_auto-6.0.0/src/orca_auto/orca/report/settings.py +52 -0
- orca_auto-6.0.0/src/orca_auto/orca/report/si.py +176 -0
- orca_auto-6.0.0/src/orca_auto/orca/report/sp.py +243 -0
- orca_auto-6.0.0/src/orca_auto/orca/resource_directives.py +239 -0
- orca_auto-6.0.0/src/orca_auto/orca/run_cleanup.py +275 -0
- orca_auto-6.0.0/src/orca_auto/orca/run_context.py +241 -0
- orca_auto-6.0.0/src/orca_auto/orca/run_lock.py +37 -0
- orca_auto-6.0.0/src/orca_auto/orca/run_snapshot.py +328 -0
- orca_auto-6.0.0/src/orca_auto/orca/scratch.py +41 -0
- orca_auto-6.0.0/src/orca_auto/orca/state.py +550 -0
- orca_auto-6.0.0/src/orca_auto/orca/state_machine.py +99 -0
- orca_auto-6.0.0/src/orca_auto/orca/state_reading.py +442 -0
- orca_auto-6.0.0/src/orca_auto/orca/statuses.py +25 -0
- orca_auto-6.0.0/src/orca_auto/orca/submission.py +640 -0
- orca_auto-6.0.0/src/orca_auto/orca/types.py +90 -0
- orca_auto-6.0.0/src/orca_auto/orca/worker_execution.py +806 -0
- orca_auto-6.0.0/src/orca_auto/py.typed +1 -0
- orca_auto-6.0.0/src/orca_auto/systemd_plan.py +515 -0
- orca_auto-6.0.0/src/orca_auto/terminal_table.py +206 -0
- orca_auto-6.0.0/src/orca_auto.egg-info/PKG-INFO +124 -0
- orca_auto-6.0.0/src/orca_auto.egg-info/SOURCES.txt +236 -0
- orca_auto-6.0.0/src/orca_auto.egg-info/dependency_links.txt +1 -0
- orca_auto-6.0.0/src/orca_auto.egg-info/entry_points.txt +2 -0
- orca_auto-6.0.0/src/orca_auto.egg-info/requires.txt +15 -0
- orca_auto-6.0.0/src/orca_auto.egg-info/top_level.txt +1 -0
orca_auto-6.0.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Daehyup Sohn
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
prune extensions
|
orca_auto-6.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: orca_auto
|
|
3
|
+
Version: 6.0.0
|
|
4
|
+
Summary: ORCA_auto core: durable ORCA queues and supervised execution
|
|
5
|
+
Author: Daehyup Sohn
|
|
6
|
+
License: MIT License
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2026 Daehyup Sohn
|
|
9
|
+
|
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
+
in the Software without restriction, including without limitation the rights
|
|
13
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
+
furnished to do so, subject to the following conditions:
|
|
16
|
+
|
|
17
|
+
The above copyright notice and this permission notice shall be included in all
|
|
18
|
+
copies or substantial portions of the Software.
|
|
19
|
+
|
|
20
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
+
SOFTWARE.
|
|
27
|
+
|
|
28
|
+
Project-URL: Homepage, https://github.com/dhsohn/orca_auto
|
|
29
|
+
Project-URL: Repository, https://github.com/dhsohn/orca_auto
|
|
30
|
+
Project-URL: Issues, https://github.com/dhsohn/orca_auto/issues
|
|
31
|
+
Project-URL: Documentation, https://github.com/dhsohn/orca_auto/blob/v6.0.0/docs/INSTALLATION.md
|
|
32
|
+
Project-URL: Changelog, https://github.com/dhsohn/orca_auto/blob/v6.0.0/CHANGELOG.md
|
|
33
|
+
Keywords: orca,dft,computational-chemistry,workflow-automation,cli
|
|
34
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
35
|
+
Classifier: Environment :: Console
|
|
36
|
+
Classifier: Intended Audience :: Science/Research
|
|
37
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
38
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
39
|
+
Classifier: Programming Language :: Python :: 3
|
|
40
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
41
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
42
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
43
|
+
Classifier: Topic :: Scientific/Engineering :: Chemistry
|
|
44
|
+
Requires-Python: >=3.11
|
|
45
|
+
Description-Content-Type: text/markdown
|
|
46
|
+
License-File: LICENSE
|
|
47
|
+
Requires-Dist: PyYAML>=6.0.1
|
|
48
|
+
Provides-Extra: workflows
|
|
49
|
+
Requires-Dist: orca_auto_workflows==6.0.0; extra == "workflows"
|
|
50
|
+
Provides-Extra: dev
|
|
51
|
+
Requires-Dist: build>=1.2.2; extra == "dev"
|
|
52
|
+
Requires-Dist: setuptools>=68.0; extra == "dev"
|
|
53
|
+
Requires-Dist: wheel>=0.45.1; extra == "dev"
|
|
54
|
+
Requires-Dist: import-linter>=2.12; extra == "dev"
|
|
55
|
+
Requires-Dist: mypy>=1.19.1; extra == "dev"
|
|
56
|
+
Requires-Dist: pytest>=9.0; extra == "dev"
|
|
57
|
+
Requires-Dist: pytest-cov>=7.0.0; extra == "dev"
|
|
58
|
+
Requires-Dist: ruff>=0.15.5; extra == "dev"
|
|
59
|
+
Requires-Dist: types-PyYAML>=6.0.12; extra == "dev"
|
|
60
|
+
Dynamic: license-file
|
|
61
|
+
|
|
62
|
+
<p align="center">
|
|
63
|
+
<img src="https://raw.githubusercontent.com/dhsohn/orca_auto/v6.0.0/docs/images/banner.svg" alt="ORCA_auto — Submit durably. Execute reliably. Recover explicitly." width="680">
|
|
64
|
+
</p>
|
|
65
|
+
|
|
66
|
+
<p align="center">
|
|
67
|
+
<a href="https://github.com/dhsohn/orca_auto/actions/workflows/ci.yml"><img src="https://github.com/dhsohn/orca_auto/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
68
|
+
<a href="https://github.com/dhsohn/orca_auto/releases/latest"><img src="https://img.shields.io/github/v/release/dhsohn/orca_auto" alt="Release"></a>
|
|
69
|
+
<a href="https://www.python.org/"><img src="https://img.shields.io/badge/python-3.11%2B-blue.svg" alt="Python 3.11+"></a>
|
|
70
|
+
<a href="https://github.com/dhsohn/orca_auto/blob/v6.0.0/LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="License: MIT"></a>
|
|
71
|
+
</p>
|
|
72
|
+
|
|
73
|
+
<p align="center"><b>English</b> · <a href="https://github.com/dhsohn/orca_auto/blob/v6.0.0/README.ko.md">한국어</a></p>
|
|
74
|
+
|
|
75
|
+
ORCA_auto is a **queue-first runner for ORCA** on Linux/WSL.
|
|
76
|
+
Submit calculations to a durable queue, follow their progress, and inspect
|
|
77
|
+
recorded results and recovery decisions. Input design and chemical judgment
|
|
78
|
+
stay with you.
|
|
79
|
+
|
|
80
|
+
## Features
|
|
81
|
+
|
|
82
|
+
- **Submit and close the terminal.** A successful submission saves the job to
|
|
83
|
+
disk; a supervised worker handles execution.
|
|
84
|
+
- **See what happened.** Check queue status from the CLI and inspect saved
|
|
85
|
+
calculation reports and failure reasons.
|
|
86
|
+
- **Recover with evidence.** Worker or host interruptions follow verified
|
|
87
|
+
recovery paths. Failed ORCA calculations are not automatically retried.
|
|
88
|
+
|
|
89
|
+
## Get started
|
|
90
|
+
|
|
91
|
+
Python **3.11+**, Linux/WSL2, and a separately installed ORCA engine are
|
|
92
|
+
required. Supervised workers use `systemd`.
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
python -m pip install orca_auto==6.0.0
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
- **[Installation details](https://github.com/dhsohn/orca_auto/blob/v6.0.0/docs/INSTALLATION.md)** — install Core from PyPI in a fresh environment.
|
|
99
|
+
- **[Set up workers and submit your first job](https://github.com/dhsohn/orca_auto/blob/v6.0.0/docs/QUICKSTART.md)** — configure a
|
|
100
|
+
source checkout, start services, and inspect the queue.
|
|
101
|
+
|
|
102
|
+
**Upgrading?** Keep running calculations on their current environment. Switch
|
|
103
|
+
only in an idle window; see the [upgrade guide](https://github.com/dhsohn/orca_auto/blob/v6.0.0/docs/RELEASE.md#removing-ts-workflows-in-60).
|
|
104
|
+
|
|
105
|
+
## In the same chemistry ecosystem
|
|
106
|
+
|
|
107
|
+
[Chemvas](https://github.com/dhsohn/Chemvas) for chemical drawings,
|
|
108
|
+
**ORCA_auto** for calculation execution, and
|
|
109
|
+
[LLMdocx](https://github.com/dhsohn/LLMdocx) for research documents are
|
|
110
|
+
independent, local-first companion tools. Data handoffs require explicit
|
|
111
|
+
conversion—not an automatic end-to-end integration.
|
|
112
|
+
[How the tools connect →](https://github.com/dhsohn/orca_auto/blob/v6.0.0/docs/RELATED_WORK.md#local-first-companion-tools)
|
|
113
|
+
|
|
114
|
+
## Documentation
|
|
115
|
+
|
|
116
|
+
[Command reference](https://github.com/dhsohn/orca_auto/blob/v6.0.0/docs/REFERENCE.md) · [Runtime contracts](https://github.com/dhsohn/orca_auto/blob/v6.0.0/docs/PUBLIC_CONTRACTS.md) ·
|
|
117
|
+
[Architecture](https://github.com/dhsohn/orca_auto/blob/v6.0.0/docs/ARCHITECTURE.md) · [Services](https://github.com/dhsohn/orca_auto/blob/v6.0.0/systemd/README.md) ·
|
|
118
|
+
[Discord notifications](https://github.com/dhsohn/orca_auto/blob/v6.0.0/docs/DISCORD_SETUP.md)
|
|
119
|
+
|
|
120
|
+
[Development](https://github.com/dhsohn/orca_auto/blob/v6.0.0/docs/DEVELOPMENT.md) · [Validation](https://github.com/dhsohn/orca_auto/blob/v6.0.0/docs/VALIDATION.md) ·
|
|
121
|
+
[Roadmap](https://github.com/dhsohn/orca_auto/blob/v6.0.0/ROADMAP.md) · [Changelog](https://github.com/dhsohn/orca_auto/blob/v6.0.0/CHANGELOG.md)
|
|
122
|
+
|
|
123
|
+
[Citation](https://github.com/dhsohn/orca_auto/blob/v6.0.0/CITATION.cff) · [Contributing](https://github.com/dhsohn/orca_auto/blob/v6.0.0/CONTRIBUTING.md) ·
|
|
124
|
+
[Support](https://github.com/dhsohn/orca_auto/blob/v6.0.0/SUPPORT.md) · [Security](https://github.com/dhsohn/orca_auto/blob/v6.0.0/SECURITY.md)
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/dhsohn/orca_auto/v6.0.0/docs/images/banner.svg" alt="ORCA_auto — Submit durably. Execute reliably. Recover explicitly." width="680">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<a href="https://github.com/dhsohn/orca_auto/actions/workflows/ci.yml"><img src="https://github.com/dhsohn/orca_auto/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
7
|
+
<a href="https://github.com/dhsohn/orca_auto/releases/latest"><img src="https://img.shields.io/github/v/release/dhsohn/orca_auto" alt="Release"></a>
|
|
8
|
+
<a href="https://www.python.org/"><img src="https://img.shields.io/badge/python-3.11%2B-blue.svg" alt="Python 3.11+"></a>
|
|
9
|
+
<a href="https://github.com/dhsohn/orca_auto/blob/v6.0.0/LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="License: MIT"></a>
|
|
10
|
+
</p>
|
|
11
|
+
|
|
12
|
+
<p align="center"><b>English</b> · <a href="https://github.com/dhsohn/orca_auto/blob/v6.0.0/README.ko.md">한국어</a></p>
|
|
13
|
+
|
|
14
|
+
ORCA_auto is a **queue-first runner for ORCA** on Linux/WSL.
|
|
15
|
+
Submit calculations to a durable queue, follow their progress, and inspect
|
|
16
|
+
recorded results and recovery decisions. Input design and chemical judgment
|
|
17
|
+
stay with you.
|
|
18
|
+
|
|
19
|
+
## Features
|
|
20
|
+
|
|
21
|
+
- **Submit and close the terminal.** A successful submission saves the job to
|
|
22
|
+
disk; a supervised worker handles execution.
|
|
23
|
+
- **See what happened.** Check queue status from the CLI and inspect saved
|
|
24
|
+
calculation reports and failure reasons.
|
|
25
|
+
- **Recover with evidence.** Worker or host interruptions follow verified
|
|
26
|
+
recovery paths. Failed ORCA calculations are not automatically retried.
|
|
27
|
+
|
|
28
|
+
## Get started
|
|
29
|
+
|
|
30
|
+
Python **3.11+**, Linux/WSL2, and a separately installed ORCA engine are
|
|
31
|
+
required. Supervised workers use `systemd`.
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
python -m pip install orca_auto==6.0.0
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
- **[Installation details](https://github.com/dhsohn/orca_auto/blob/v6.0.0/docs/INSTALLATION.md)** — install Core from PyPI in a fresh environment.
|
|
38
|
+
- **[Set up workers and submit your first job](https://github.com/dhsohn/orca_auto/blob/v6.0.0/docs/QUICKSTART.md)** — configure a
|
|
39
|
+
source checkout, start services, and inspect the queue.
|
|
40
|
+
|
|
41
|
+
**Upgrading?** Keep running calculations on their current environment. Switch
|
|
42
|
+
only in an idle window; see the [upgrade guide](https://github.com/dhsohn/orca_auto/blob/v6.0.0/docs/RELEASE.md#removing-ts-workflows-in-60).
|
|
43
|
+
|
|
44
|
+
## In the same chemistry ecosystem
|
|
45
|
+
|
|
46
|
+
[Chemvas](https://github.com/dhsohn/Chemvas) for chemical drawings,
|
|
47
|
+
**ORCA_auto** for calculation execution, and
|
|
48
|
+
[LLMdocx](https://github.com/dhsohn/LLMdocx) for research documents are
|
|
49
|
+
independent, local-first companion tools. Data handoffs require explicit
|
|
50
|
+
conversion—not an automatic end-to-end integration.
|
|
51
|
+
[How the tools connect →](https://github.com/dhsohn/orca_auto/blob/v6.0.0/docs/RELATED_WORK.md#local-first-companion-tools)
|
|
52
|
+
|
|
53
|
+
## Documentation
|
|
54
|
+
|
|
55
|
+
[Command reference](https://github.com/dhsohn/orca_auto/blob/v6.0.0/docs/REFERENCE.md) · [Runtime contracts](https://github.com/dhsohn/orca_auto/blob/v6.0.0/docs/PUBLIC_CONTRACTS.md) ·
|
|
56
|
+
[Architecture](https://github.com/dhsohn/orca_auto/blob/v6.0.0/docs/ARCHITECTURE.md) · [Services](https://github.com/dhsohn/orca_auto/blob/v6.0.0/systemd/README.md) ·
|
|
57
|
+
[Discord notifications](https://github.com/dhsohn/orca_auto/blob/v6.0.0/docs/DISCORD_SETUP.md)
|
|
58
|
+
|
|
59
|
+
[Development](https://github.com/dhsohn/orca_auto/blob/v6.0.0/docs/DEVELOPMENT.md) · [Validation](https://github.com/dhsohn/orca_auto/blob/v6.0.0/docs/VALIDATION.md) ·
|
|
60
|
+
[Roadmap](https://github.com/dhsohn/orca_auto/blob/v6.0.0/ROADMAP.md) · [Changelog](https://github.com/dhsohn/orca_auto/blob/v6.0.0/CHANGELOG.md)
|
|
61
|
+
|
|
62
|
+
[Citation](https://github.com/dhsohn/orca_auto/blob/v6.0.0/CITATION.cff) · [Contributing](https://github.com/dhsohn/orca_auto/blob/v6.0.0/CONTRIBUTING.md) ·
|
|
63
|
+
[Support](https://github.com/dhsohn/orca_auto/blob/v6.0.0/SUPPORT.md) · [Security](https://github.com/dhsohn/orca_auto/blob/v6.0.0/SECURITY.md)
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "orca_auto"
|
|
7
|
+
version = "6.0.0"
|
|
8
|
+
description = "ORCA_auto core: durable ORCA queues and supervised execution"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.11"
|
|
11
|
+
license = { file = "LICENSE" }
|
|
12
|
+
authors = [
|
|
13
|
+
{ name = "Daehyup Sohn" },
|
|
14
|
+
]
|
|
15
|
+
keywords = [
|
|
16
|
+
"orca",
|
|
17
|
+
"dft",
|
|
18
|
+
"computational-chemistry",
|
|
19
|
+
"workflow-automation",
|
|
20
|
+
"cli",
|
|
21
|
+
]
|
|
22
|
+
classifiers = [
|
|
23
|
+
"Development Status :: 5 - Production/Stable",
|
|
24
|
+
"Environment :: Console",
|
|
25
|
+
"Intended Audience :: Science/Research",
|
|
26
|
+
"License :: OSI Approved :: MIT License",
|
|
27
|
+
"Operating System :: POSIX :: Linux",
|
|
28
|
+
"Programming Language :: Python :: 3",
|
|
29
|
+
"Programming Language :: Python :: 3.11",
|
|
30
|
+
"Programming Language :: Python :: 3.12",
|
|
31
|
+
"Programming Language :: Python :: 3.13",
|
|
32
|
+
"Topic :: Scientific/Engineering :: Chemistry",
|
|
33
|
+
]
|
|
34
|
+
dependencies = [
|
|
35
|
+
"PyYAML>=6.0.1",
|
|
36
|
+
]
|
|
37
|
+
|
|
38
|
+
[project.urls]
|
|
39
|
+
Homepage = "https://github.com/dhsohn/orca_auto"
|
|
40
|
+
Repository = "https://github.com/dhsohn/orca_auto"
|
|
41
|
+
Issues = "https://github.com/dhsohn/orca_auto/issues"
|
|
42
|
+
Documentation = "https://github.com/dhsohn/orca_auto/blob/v6.0.0/docs/INSTALLATION.md"
|
|
43
|
+
Changelog = "https://github.com/dhsohn/orca_auto/blob/v6.0.0/CHANGELOG.md"
|
|
44
|
+
|
|
45
|
+
[project.optional-dependencies]
|
|
46
|
+
workflows = ["orca_auto_workflows==6.0.0"]
|
|
47
|
+
dev = [
|
|
48
|
+
"build>=1.2.2",
|
|
49
|
+
"setuptools>=68.0",
|
|
50
|
+
"wheel>=0.45.1",
|
|
51
|
+
"import-linter>=2.12",
|
|
52
|
+
"mypy>=1.19.1",
|
|
53
|
+
"pytest>=9.0",
|
|
54
|
+
"pytest-cov>=7.0.0",
|
|
55
|
+
"ruff>=0.15.5",
|
|
56
|
+
"types-PyYAML>=6.0.12",
|
|
57
|
+
]
|
|
58
|
+
|
|
59
|
+
[project.scripts]
|
|
60
|
+
orca_auto = "orca_auto.cli:main"
|
|
61
|
+
|
|
62
|
+
[tool.setuptools.packages.find]
|
|
63
|
+
where = ["src"]
|
|
64
|
+
include = ["orca_auto*"]
|
|
65
|
+
|
|
66
|
+
[tool.ruff]
|
|
67
|
+
target-version = "py311"
|
|
68
|
+
line-length = 100
|
|
69
|
+
src = [".", "src", "extensions/workflows/src"]
|
|
70
|
+
|
|
71
|
+
[tool.ruff.lint]
|
|
72
|
+
# Layout (including line length) is owned by `ruff format`, which
|
|
73
|
+
# `scripts/check.sh` enforces via `ruff format --check`. `E501` is intentionally
|
|
74
|
+
# omitted so the formatter stays the single source of truth for line wrapping.
|
|
75
|
+
select = [
|
|
76
|
+
"E4",
|
|
77
|
+
"E7",
|
|
78
|
+
"E9",
|
|
79
|
+
"F",
|
|
80
|
+
"I",
|
|
81
|
+
"B",
|
|
82
|
+
"BLE",
|
|
83
|
+
"FURB162",
|
|
84
|
+
"FURB188",
|
|
85
|
+
"PYI034",
|
|
86
|
+
"UP",
|
|
87
|
+
"RUF100",
|
|
88
|
+
]
|
|
89
|
+
# UP042 (str-Enum -> StrEnum) changes `str()`/format semantics of status enums
|
|
90
|
+
# that are serialized and compared as plain strings; keep the str mixin.
|
|
91
|
+
ignore = ["UP042"]
|
|
92
|
+
|
|
93
|
+
[tool.mypy]
|
|
94
|
+
python_version = "3.11"
|
|
95
|
+
files = ["src/orca_auto", "extensions/workflows/src/orca_auto/flow", "tests"]
|
|
96
|
+
mypy_path = ["src", "extensions/workflows/src"]
|
|
97
|
+
pretty = true
|
|
98
|
+
show_error_codes = true
|
|
99
|
+
warn_unused_configs = true
|
|
100
|
+
explicit_package_bases = true
|
|
101
|
+
|
|
102
|
+
# The strict-style mypy options apply to the whole orca_auto package; every
|
|
103
|
+
# module under src already passes them, so a new or moved module is strict
|
|
104
|
+
# by default. Tests stay on the non-strict top-level config until the full
|
|
105
|
+
# src+tests tree passes the equivalent strict flags, at which point the
|
|
106
|
+
# options move to [tool.mypy].
|
|
107
|
+
[[tool.mypy.overrides]]
|
|
108
|
+
module = ["orca_auto", "orca_auto.*"]
|
|
109
|
+
check_untyped_defs = true
|
|
110
|
+
disallow_any_generics = true
|
|
111
|
+
disallow_incomplete_defs = true
|
|
112
|
+
disallow_untyped_calls = true
|
|
113
|
+
disallow_untyped_defs = true
|
|
114
|
+
no_implicit_optional = true
|
|
115
|
+
strict_equality = true
|
|
116
|
+
warn_return_any = true
|
|
117
|
+
warn_unused_ignores = true
|
|
118
|
+
|
|
119
|
+
# Layering is enforced by import-linter (`lint-imports`, run by scripts/check.sh
|
|
120
|
+
# and therefore by CI). Engine wiring crosses layers only through lazy string
|
|
121
|
+
# module paths (core/engine_catalog.py). The absent-workflows subprocess tests
|
|
122
|
+
# additionally exercise this dynamic seam, which static import checks cannot see.
|
|
123
|
+
[tool.importlinter]
|
|
124
|
+
root_packages = ["orca_auto"]
|
|
125
|
+
exclude_type_checking_imports = true
|
|
126
|
+
|
|
127
|
+
[[tool.importlinter.contracts]]
|
|
128
|
+
name = "Layered architecture: flow -> orca -> core"
|
|
129
|
+
type = "layers"
|
|
130
|
+
layers = [
|
|
131
|
+
"orca_auto.flow",
|
|
132
|
+
"orca_auto.orca",
|
|
133
|
+
"orca_auto.core",
|
|
134
|
+
]
|
|
135
|
+
|
|
136
|
+
[[tool.importlinter.contracts]]
|
|
137
|
+
name = "Messaging never imports the notification layer"
|
|
138
|
+
type = "forbidden"
|
|
139
|
+
source_modules = ["orca_auto.core.messaging"]
|
|
140
|
+
forbidden_modules = ["orca_auto.core.notifications"]
|
|
141
|
+
|
|
142
|
+
[[tool.importlinter.contracts]]
|
|
143
|
+
name = "ORCA domain and worker policy never import CLI commands"
|
|
144
|
+
type = "forbidden"
|
|
145
|
+
source_modules = [
|
|
146
|
+
"orca_auto.orca.execution",
|
|
147
|
+
"orca_auto.orca.run_context",
|
|
148
|
+
"orca_auto.orca.submission",
|
|
149
|
+
"orca_auto.orca.worker_execution",
|
|
150
|
+
"orca_auto.orca.queue",
|
|
151
|
+
]
|
|
152
|
+
forbidden_modules = ["orca_auto.orca.commands"]
|
|
153
|
+
|
|
154
|
+
[[tool.importlinter.contracts]]
|
|
155
|
+
name = "ORCA state reading stays below mutation and report publication"
|
|
156
|
+
type = "forbidden"
|
|
157
|
+
source_modules = ["orca_auto.orca.state_reading"]
|
|
158
|
+
forbidden_modules = [
|
|
159
|
+
"orca_auto.orca.state",
|
|
160
|
+
"orca_auto.orca.report",
|
|
161
|
+
]
|
|
162
|
+
|
|
163
|
+
[[tool.importlinter.contracts]]
|
|
164
|
+
name = "ORCA structure and frequency evidence never depend on human reports"
|
|
165
|
+
type = "forbidden"
|
|
166
|
+
source_modules = [
|
|
167
|
+
"orca_auto.orca.evidence",
|
|
168
|
+
"orca_auto.orca.frequencies",
|
|
169
|
+
]
|
|
170
|
+
forbidden_modules = ["orca_auto.orca.report"]
|
|
171
|
+
|
|
172
|
+
[[tool.importlinter.contracts]]
|
|
173
|
+
name = "Workflow structure evidence and selection never depend on SI presentation"
|
|
174
|
+
type = "forbidden"
|
|
175
|
+
source_modules = [
|
|
176
|
+
"orca_auto.flow.orca_stage_evidence",
|
|
177
|
+
"orca_auto.flow.conformer_selection",
|
|
178
|
+
]
|
|
179
|
+
forbidden_modules = ["orca_auto.orca.report.si", "orca_auto.orca.report.frequencies"]
|
|
180
|
+
|
|
181
|
+
[[tool.importlinter.contracts]]
|
|
182
|
+
name = "Workflow stage views stay below orchestration wiring"
|
|
183
|
+
type = "forbidden"
|
|
184
|
+
source_modules = [
|
|
185
|
+
"orca_auto.flow.orchestration.stage_view_mutators",
|
|
186
|
+
"orca_auto.flow.orchestration.stage_views",
|
|
187
|
+
]
|
|
188
|
+
forbidden_modules = [
|
|
189
|
+
"orca_auto.flow.orchestration.advance",
|
|
190
|
+
"orca_auto.flow.orchestration.advance_phases",
|
|
191
|
+
"orca_auto.flow.orchestration.services",
|
|
192
|
+
]
|
|
193
|
+
|
|
194
|
+
[[tool.importlinter.contracts]]
|
|
195
|
+
name = "Workflow report evidence consumers stay below rendering"
|
|
196
|
+
type = "forbidden"
|
|
197
|
+
source_modules = [
|
|
198
|
+
"orca_auto.flow.workflow.report_collection",
|
|
199
|
+
"orca_auto.flow.workflow.report_diagnostics",
|
|
200
|
+
"orca_auto.flow.workflow.report_energy_evidence",
|
|
201
|
+
"orca_auto.flow.workflow.machine",
|
|
202
|
+
"orca_auto.flow.workflow.notifications",
|
|
203
|
+
"orca_auto.flow.workflow.si.collection",
|
|
204
|
+
]
|
|
205
|
+
forbidden_modules = ["orca_auto.flow.workflow.report_rendering"]
|
|
206
|
+
|
|
207
|
+
[[tool.importlinter.contracts]]
|
|
208
|
+
name = "Workflow report collection stays above evidence readers"
|
|
209
|
+
type = "layers"
|
|
210
|
+
layers = [
|
|
211
|
+
"orca_auto.flow.workflow.report_collection",
|
|
212
|
+
"orca_auto.flow.workflow.report_energy_evidence",
|
|
213
|
+
"orca_auto.flow.workflow.report_diagnostics",
|
|
214
|
+
]
|
|
215
|
+
|
|
216
|
+
[[tool.importlinter.contracts]]
|
|
217
|
+
name = "Workflow SI layers: publication over rendering over collection"
|
|
218
|
+
type = "layers"
|
|
219
|
+
layers = [
|
|
220
|
+
"orca_auto.flow.workflow.si.publication",
|
|
221
|
+
"orca_auto.flow.workflow.si.rendering",
|
|
222
|
+
"orca_auto.flow.workflow.si.collection",
|
|
223
|
+
]
|
|
224
|
+
|
|
225
|
+
[[tool.importlinter.contracts]]
|
|
226
|
+
name = "Systemd CLI layers: independent command owners over freshness over units over plan"
|
|
227
|
+
type = "layers"
|
|
228
|
+
layers = [
|
|
229
|
+
"orca_auto.cli_systemd_apply | orca_auto.cli_systemd_restart | orca_auto.cli_systemd_status",
|
|
230
|
+
"orca_auto.cli_systemd_restart_guard",
|
|
231
|
+
"orca_auto.cli_systemd_freshness",
|
|
232
|
+
"orca_auto.cli_systemd_units",
|
|
233
|
+
"orca_auto.systemd_plan",
|
|
234
|
+
]
|
|
235
|
+
|
|
236
|
+
[[tool.importlinter.contracts]]
|
|
237
|
+
name = "ORCA stage validation never imports materialization"
|
|
238
|
+
type = "forbidden"
|
|
239
|
+
source_modules = ["orca_auto.flow.orca_stage_validation"]
|
|
240
|
+
forbidden_modules = ["orca_auto.flow._orca_stage_materialization"]
|
|
241
|
+
|
|
242
|
+
[[tool.importlinter.contracts]]
|
|
243
|
+
name = "Bounded YAML substrate never imports config policy"
|
|
244
|
+
type = "forbidden"
|
|
245
|
+
source_modules = ["orca_auto.core.config.bounded_yaml"]
|
|
246
|
+
forbidden_modules = ["orca_auto.core.config.files"]
|
|
247
|
+
|
|
248
|
+
[[tool.importlinter.contracts]]
|
|
249
|
+
name = "Worker process supervision stays below CLI assembly"
|
|
250
|
+
type = "forbidden"
|
|
251
|
+
source_modules = ["orca_auto.cli_worker_supervision"]
|
|
252
|
+
forbidden_modules = ["orca_auto.cli_workers"]
|
|
253
|
+
|
|
254
|
+
[[tool.importlinter.contracts]]
|
|
255
|
+
name = "Restart settings stay mutation-free"
|
|
256
|
+
type = "forbidden"
|
|
257
|
+
source_modules = ["orca_auto.flow.restart.settings"]
|
|
258
|
+
forbidden_modules = [
|
|
259
|
+
"orca_auto.flow.restart.mutation",
|
|
260
|
+
"orca_auto.flow.restart.orca_input",
|
|
261
|
+
"orca_auto.flow.restart.stage_ops",
|
|
262
|
+
]
|
|
263
|
+
|
|
264
|
+
[[tool.importlinter.contracts]]
|
|
265
|
+
name = "Restart mutation layers: mutation over stage ops over ORCA input"
|
|
266
|
+
type = "layers"
|
|
267
|
+
layers = [
|
|
268
|
+
"orca_auto.flow.restart.mutation",
|
|
269
|
+
"orca_auto.flow.restart.stage_ops",
|
|
270
|
+
"orca_auto.flow.restart.orca_input",
|
|
271
|
+
]
|
|
272
|
+
|
|
273
|
+
[[tool.importlinter.contracts]]
|
|
274
|
+
name = "Restart settings resolve independently of the mutation owners"
|
|
275
|
+
type = "forbidden"
|
|
276
|
+
source_modules = [
|
|
277
|
+
"orca_auto.flow.restart.mutation",
|
|
278
|
+
"orca_auto.flow.restart.orca_input",
|
|
279
|
+
"orca_auto.flow.restart.stage_ops",
|
|
280
|
+
]
|
|
281
|
+
forbidden_modules = ["orca_auto.flow.restart.settings"]
|
|
282
|
+
|
|
283
|
+
[[tool.importlinter.contracts]]
|
|
284
|
+
name = "ORCA input syntax never imports reference scanning"
|
|
285
|
+
type = "forbidden"
|
|
286
|
+
source_modules = ["orca_auto.orca.input_blocks"]
|
|
287
|
+
forbidden_modules = ["orca_auto.orca.input_references"]
|
|
288
|
+
|
|
289
|
+
[[tool.importlinter.contracts]]
|
|
290
|
+
name = "ORCA input reference scanning stays below runtime consumers"
|
|
291
|
+
type = "forbidden"
|
|
292
|
+
source_modules = ["orca_auto.orca.input_references"]
|
|
293
|
+
forbidden_modules = [
|
|
294
|
+
"orca_auto.flow.conformer_selection",
|
|
295
|
+
"orca_auto.flow.restart.orca_input",
|
|
296
|
+
"orca_auto.orca.execution_binding",
|
|
297
|
+
"orca_auto.orca.scratch",
|
|
298
|
+
]
|
|
299
|
+
|
|
300
|
+
# The top-level CLI modules are the outermost layer: they compose the domain
|
|
301
|
+
# packages, and no domain package may reach back up into them. Shared terminal
|
|
302
|
+
# presentation and config discovery live in core so command adapters inside
|
|
303
|
+
# flow can use them without crossing this boundary.
|
|
304
|
+
[[tool.importlinter.contracts]]
|
|
305
|
+
name = "Domain packages never import the top-level CLI layer"
|
|
306
|
+
type = "forbidden"
|
|
307
|
+
source_modules = ["orca_auto.core", "orca_auto.orca", "orca_auto.flow"]
|
|
308
|
+
forbidden_modules = [
|
|
309
|
+
"orca_auto._process_evidence",
|
|
310
|
+
"orca_auto.activity",
|
|
311
|
+
"orca_auto.activity_labels",
|
|
312
|
+
"orca_auto.activity_rendering",
|
|
313
|
+
"orca_auto.activity_view",
|
|
314
|
+
"orca_auto.cli",
|
|
315
|
+
"orca_auto.cli_handlers",
|
|
316
|
+
"orca_auto.cli_parsers",
|
|
317
|
+
"orca_auto.cli_queue",
|
|
318
|
+
"orca_auto.cli_systemd_apply",
|
|
319
|
+
"orca_auto.cli_systemd_freshness",
|
|
320
|
+
"orca_auto.cli_systemd_restart",
|
|
321
|
+
"orca_auto.cli_systemd_restart_guard",
|
|
322
|
+
"orca_auto.cli_systemd_status",
|
|
323
|
+
"orca_auto.cli_systemd_units",
|
|
324
|
+
"orca_auto.cli_worker_supervision",
|
|
325
|
+
"orca_auto.cli_workers",
|
|
326
|
+
"orca_auto.systemd_plan",
|
|
327
|
+
"orca_auto.terminal_table",
|
|
328
|
+
]
|
|
329
|
+
|
|
330
|
+
[tool.coverage.run]
|
|
331
|
+
source = ["src/orca_auto", "extensions/workflows/src/orca_auto/flow"]
|
|
332
|
+
|
|
333
|
+
[tool.coverage.report]
|
|
334
|
+
fail_under = 80
|
|
335
|
+
show_missing = true
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""Shared namespace package for the chemistry automation monorepo."""
|
|
2
|
+
|
|
3
|
+
from pkgutil import extend_path
|
|
4
|
+
|
|
5
|
+
# Core owns this initializer; separately installed extensions own subpackages.
|
|
6
|
+
# Never discover sibling checkout sources unless they were explicitly installed.
|
|
7
|
+
__path__ = extend_path(__path__, __name__)
|
|
8
|
+
|
|
9
|
+
from ._version import __version__
|
|
10
|
+
|
|
11
|
+
__all__ = ["__version__"]
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"""Process-local provenance used by the systemd freshness check."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import os
|
|
6
|
+
import sys
|
|
7
|
+
from importlib import import_module
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
|
|
10
|
+
PROCESS_IMPORT_SOURCE_ENV = "ORCA_AUTO_PROCESS_IMPORT_SOURCE"
|
|
11
|
+
PROCESS_WORKFLOW_IMPORT_SOURCE_ENV = "ORCA_AUTO_PROCESS_WORKFLOW_IMPORT_SOURCE"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def _workflow_worker_requested(argv: list[str]) -> bool:
|
|
15
|
+
return "--app=workflow" in argv or any(
|
|
16
|
+
flag == "--app" and value == "workflow" for flag, value in zip(argv, argv[1:], strict=False)
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def exec_with_import_source_evidence() -> None:
|
|
21
|
+
"""Re-exec the module CLI once with its actual imported source in environ.
|
|
22
|
+
|
|
23
|
+
``/proc/<pid>/environ`` exposes only the environment installed by ``exec``;
|
|
24
|
+
mutating ``os.environ`` after Python starts is not reliable process evidence.
|
|
25
|
+
Re-exec preserves the systemd MainPID and kernel process start identity while
|
|
26
|
+
making the source path observable without a sidecar state file.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
if sys.argv[1:3] != ["queue", "worker"]:
|
|
30
|
+
return
|
|
31
|
+
import_source = str(Path(__file__).resolve(strict=False))
|
|
32
|
+
environment = os.environ.copy()
|
|
33
|
+
environment[PROCESS_IMPORT_SOURCE_ENV] = import_source
|
|
34
|
+
if _workflow_worker_requested(sys.argv[3:]):
|
|
35
|
+
from orca_auto.core.extensions import require_workflows
|
|
36
|
+
|
|
37
|
+
require_workflows()
|
|
38
|
+
workflow_module = import_module("orca_auto.flow")
|
|
39
|
+
workflow_source = workflow_module.__file__
|
|
40
|
+
if workflow_source is None:
|
|
41
|
+
raise ValueError("workflow import source is unavailable")
|
|
42
|
+
environment[PROCESS_WORKFLOW_IMPORT_SOURCE_ENV] = str(
|
|
43
|
+
Path(workflow_source).resolve(strict=True)
|
|
44
|
+
)
|
|
45
|
+
else:
|
|
46
|
+
environment.pop(PROCESS_WORKFLOW_IMPORT_SOURCE_ENV, None)
|
|
47
|
+
if environment == os.environ:
|
|
48
|
+
return
|
|
49
|
+
os.execve(
|
|
50
|
+
sys.executable,
|
|
51
|
+
[sys.executable, "-m", "orca_auto.cli", *sys.argv[1:]],
|
|
52
|
+
environment,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
__all__ = [
|
|
57
|
+
"PROCESS_IMPORT_SOURCE_ENV",
|
|
58
|
+
"PROCESS_WORKFLOW_IMPORT_SOURCE_ENV",
|
|
59
|
+
"exec_with_import_source_evidence",
|
|
60
|
+
]
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import tomllib
|
|
4
|
+
from importlib import metadata
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def package_version() -> str:
|
|
9
|
+
try:
|
|
10
|
+
return metadata.version("orca_auto")
|
|
11
|
+
except metadata.PackageNotFoundError:
|
|
12
|
+
return "0.0.0+unknown"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _source_pyproject_version(source_root: Path) -> str | None:
|
|
16
|
+
try:
|
|
17
|
+
with open(source_root / "pyproject.toml", "rb") as fh:
|
|
18
|
+
project = tomllib.load(fh)["project"]
|
|
19
|
+
if project["name"] != "orca_auto":
|
|
20
|
+
return None
|
|
21
|
+
return str(project["version"])
|
|
22
|
+
except (OSError, tomllib.TOMLDecodeError, KeyError, TypeError):
|
|
23
|
+
return None
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def installed_version_drift(source_root: Path | None = None) -> tuple[str, str] | None:
|
|
27
|
+
"""Report `(installed, source)` when the two disagree, else `None`.
|
|
28
|
+
|
|
29
|
+
An editable install freezes its distribution metadata at install time while
|
|
30
|
+
the interpreter keeps importing the checkout, so a live deployment can run
|
|
31
|
+
one version's code and declare another until someone reruns the install.
|
|
32
|
+
Returns `None` when there is no source `pyproject.toml` to compare against,
|
|
33
|
+
which is the normal shape of a wheel install rather than a drift verdict.
|
|
34
|
+
"""
|
|
35
|
+
root = source_root if source_root is not None else Path(__file__).resolve().parents[2]
|
|
36
|
+
source = _source_pyproject_version(root)
|
|
37
|
+
if source is None:
|
|
38
|
+
return None
|
|
39
|
+
installed = package_version()
|
|
40
|
+
return None if installed == source else (installed, source)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
__version__ = package_version()
|
|
44
|
+
|
|
45
|
+
__all__ = ["__version__", "installed_version_drift", "package_version"]
|