steuermaschine 0.0.1__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.
- steuermaschine-0.0.1/.github/dependabot.yml +20 -0
- steuermaschine-0.0.1/.github/workflows/ci.yml +93 -0
- steuermaschine-0.0.1/.github/workflows/codeql.yml +22 -0
- steuermaschine-0.0.1/.github/workflows/release.yml +62 -0
- steuermaschine-0.0.1/.gitignore +7 -0
- steuermaschine-0.0.1/.gitleaks.toml +7 -0
- steuermaschine-0.0.1/.pre-commit-config.yaml +31 -0
- steuermaschine-0.0.1/AGENTS.md +113 -0
- steuermaschine-0.0.1/CHANGELOG.md +7 -0
- steuermaschine-0.0.1/CLAUDE.md +1 -0
- steuermaschine-0.0.1/Makefile +46 -0
- steuermaschine-0.0.1/PKG-INFO +135 -0
- steuermaschine-0.0.1/README.md +124 -0
- steuermaschine-0.0.1/REVIEW-INDEPENDENT-release.md +94 -0
- steuermaschine-0.0.1/REVIEW-callers-sm-only.md +49 -0
- steuermaschine-0.0.1/REVIEW-core-layering.md +42 -0
- steuermaschine-0.0.1/REVIEW-promote-pin.md +59 -0
- steuermaschine-0.0.1/REVIEW-sm-clean.md +66 -0
- steuermaschine-0.0.1/REVIEW-tools-gaps.md +46 -0
- steuermaschine-0.0.1/_typos.toml +12 -0
- steuermaschine-0.0.1/bin/check +46 -0
- steuermaschine-0.0.1/bin/debt.py +135 -0
- steuermaschine-0.0.1/bin/gate_known.py +70 -0
- steuermaschine-0.0.1/bin/merge-slice +36 -0
- steuermaschine-0.0.1/bin/migrate_config.py +105 -0
- steuermaschine-0.0.1/bin/promote +164 -0
- steuermaschine-0.0.1/bin/promote-allow.toml +10 -0
- steuermaschine-0.0.1/bin/promote_lib.sh +114 -0
- steuermaschine-0.0.1/bin/resolve-registrations.py +73 -0
- steuermaschine-0.0.1/bin/review_gate.py +68 -0
- steuermaschine-0.0.1/bin/rollback +26 -0
- steuermaschine-0.0.1/bin/sm-dev +8 -0
- steuermaschine-0.0.1/conftest.py +112 -0
- steuermaschine-0.0.1/docs/DEFINITION-OF-DONE.md +30 -0
- steuermaschine-0.0.1/docs/DESIGN.md +607 -0
- steuermaschine-0.0.1/docs/GAPS.md +45 -0
- steuermaschine-0.0.1/docs/INTEGRATION.md +277 -0
- steuermaschine-0.0.1/docs/NATIVE-PORT.md +44 -0
- steuermaschine-0.0.1/docs/RUNBOOK-release-cut.md +86 -0
- steuermaschine-0.0.1/docs/SWITCH-queue-daemon.md +62 -0
- steuermaschine-0.0.1/docs/SWITCH-state-paths.md +39 -0
- steuermaschine-0.0.1/docs/debt.json +10 -0
- steuermaschine-0.0.1/examples/layer/pyproject.toml +19 -0
- steuermaschine-0.0.1/examples/layer/src/steuermaschine_layer/__init__.py +0 -0
- steuermaschine-0.0.1/examples/layer/src/steuermaschine_layer/plugin.py +67 -0
- steuermaschine-0.0.1/examples/layer/tests/test_layer.py +89 -0
- steuermaschine-0.0.1/examples/layer/tests/test_layer_on_heinzel.py +149 -0
- steuermaschine-0.0.1/examples/layer/tests/test_layer_stack.py +128 -0
- steuermaschine-0.0.1/examples/toy/pyproject.toml +19 -0
- steuermaschine-0.0.1/examples/toy/src/steuermaschine_toy/__init__.py +0 -0
- steuermaschine-0.0.1/examples/toy/src/steuermaschine_toy/plugin.py +290 -0
- steuermaschine-0.0.1/examples/toy/src/steuermaschine_toy/reset.py +37 -0
- steuermaschine-0.0.1/examples/toy/tests/test_toy.py +103 -0
- steuermaschine-0.0.1/plugins/heinzel/launchd/io.github.helmut-hoffer-von-ankershoffen.sm-queue.plist +38 -0
- steuermaschine-0.0.1/plugins/heinzel/launchd/io.github.helmut-hoffer-von-ankershoffen.sm-train.plist +36 -0
- steuermaschine-0.0.1/plugins/heinzel/port/fakebin/bd +1 -0
- steuermaschine-0.0.1/plugins/heinzel/port/fakebin/gh +1 -0
- steuermaschine-0.0.1/plugins/heinzel/port/fakebin/tool.py +34 -0
- steuermaschine-0.0.1/plugins/heinzel/port/move.py +360 -0
- steuermaschine-0.0.1/plugins/heinzel/port/native_cli.py +35 -0
- steuermaschine-0.0.1/plugins/heinzel/port/parity.py +267 -0
- steuermaschine-0.0.1/plugins/heinzel/pyproject.toml +19 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/__init__.py +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/environment.py +99 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/guard_floor.py +204 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/__init__.py +73 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/admission.py +230 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/admission_lib/__init__.py +5 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/admission_lib/focused_admit.py +841 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/admission_lib/focused_replay.py +92 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/admission_lib/focused_resulting.py +339 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/admission_lib/focused_slots.py +934 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/admission_lib/focused_update.py +128 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/admission_lib/hold.py +37 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/admission_lib/identity.py +24 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/admission_lib/ops.py +392 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/admission_lib/receipt_guard.py +74 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/admission_lib/repair_main.py +281 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/admission_lib/wait.py +137 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/affected.py +188 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/affected_lib/__init__.py +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/affected_lib/ruff.toml +6 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/affected_lib/select.py +455 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/agents.py +65 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/agents_lib/__init__.py +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/agents_lib/table.py +108 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/alarm.py +99 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/alarm_lib/__init__.py +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/alarm_lib/rules.py +268 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/alarm_lib/watch.py +145 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/asks.py +74 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/asks_lib/__init__.py +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/asks_lib/asks.py +240 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/asks_lib/legacy.py +14 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/briefs.py +64 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/briefs_lib/__init__.py +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/briefs_lib/builder.py +185 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/briefs_lib/reviewer.py +60 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ci_classify.py +96 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ci_classify_lib/__init__.py +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ci_classify_lib/jev.py +234 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ci_evidence.py +131 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ci_evidence_lib/__init__.py +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ci_evidence_lib/main_evidence.py +27 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ci_lib/__init__.py +4 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ci_lib/cause.py +100 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ci_lib/faillog.py +12 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ci_lib/triage.py +229 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ci_ops.py +606 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ci_ops_lib/__init__.py +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ci_ops_lib/checks.py +30 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ci_ops_lib/defer.py +235 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ci_ops_lib/deferred.py +67 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ci_ops_lib/legacy.py +36 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ci_ops_lib/quarantine.py +292 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ci_ops_lib/rerun.py +155 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ci_ops_lib/rerun_plan.py +83 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ci_ops_lib/sonar_close.py +192 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ci_read.py +354 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ci_triage.py +157 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/combine.py +199 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/combine_lib/__init__.py +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/combine_lib/combine.py +435 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/coord.py +73 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/coord_lib/__init__.py +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/coord_lib/base.py +58 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/coord_lib/journal.py +203 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/dispatch.py +269 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/dispatch_lib/__init__.py +0 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/dispatch_lib/focused.py +751 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/dispatch_lib/rules.py +241 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/docs.py +63 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/flakes.py +201 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/flakes_lib/__init__.py +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/flakes_lib/count.py +118 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/flakes_lib/reads.py +70 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/go.py +207 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/go_lib/__init__.py +2 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/go_lib/decide.py +562 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/go_lib/legacy.py +262 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/go_lib/live.py +65 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/go_lib/probes.py +626 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/go_lib/views.py +441 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/go_lib/views_moved.py +180 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/go_lib/words.py +132 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/guards.py +407 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/guards_lib/__init__.py +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/guards_lib/governor.py +214 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/guards_lib/hooks.py +114 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/guards_lib/legacy.py +33 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/guards_lib/loadguard.py +156 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/guards_lib/uvguard.py +78 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/handoff.py +61 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/handoff_lib/__init__.py +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/handoff_lib/hour.py +70 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/handoff_lib/snapshot.py +181 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/junit.py +105 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/leakwatch.py +161 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/leakwatch_lib/__init__.py +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/leakwatch_lib/watch.py +458 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/loadguard.py +73 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/lock.py +97 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/lock_lib/__init__.py +0 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/lock_lib/refuse.py +124 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/loops.py +151 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/merge_ledger.py +331 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/merge_ready.py +134 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/merge_tier.py +120 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/merges.py +31 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/merges_lib/__init__.py +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/merges_lib/combine_close.py +86 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/mini.py +276 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/packet.py +322 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/packet_lib/__init__.py +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/packet_lib/admit_wave.py +634 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/packet_lib/check_ops.py +84 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/packet_lib/collect_cases.py +198 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/packet_lib/floor_check.py +155 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/packet_lib/focused_manifest.py +754 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/packet_lib/ops.py +255 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/packet_lib/wave_ops.py +137 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/packet_lib/wave_size.py +164 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/plugin_gallery.py +356 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/pr_owned.py +45 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/preflight.py +382 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/preflight_lib/__init__.py +2 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/preflight_lib/ci_meta.py +107 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/preflight_lib/head.py +1043 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/preflight_lib/scoped_cov.py +74 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/preflight_lib/texts.py +103 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue.py +487 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue_hold.py +139 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue_lib/__init__.py +0 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue_lib/bead_stamp.py +89 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue_lib/combine_notes.py +26 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue_lib/diff_guard.py +165 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue_lib/edge.py +217 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue_lib/flakes_read.py +57 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue_lib/hzlib.py +498 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue_lib/job_proof.py +50 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue_lib/known_failures.py +80 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue_lib/known_main_infra.py +86 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue_lib/main_batch.py +366 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue_lib/main_checkpoint.py +749 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue_lib/main_checkpoint_reader.py +192 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue_lib/main_plan.py +97 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue_lib/merge_gate.py +257 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue_lib/merge_train.py +278 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue_lib/moved_map.py +130 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue_lib/queue_daemon.py +1829 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue_lib/release_candidate.py +616 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue_lib/release_flow.py +106 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue_lib/ruff.toml +22 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue_lib/stall.py +243 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/queue_main.py +89 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/refill.py +86 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/refill_lib/__init__.py +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/refill_lib/ruff.toml +5 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/refill_lib/slots.py +79 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/rehearse.py +448 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/rehearse_lib/__init__.py +5 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/rehearse_lib/legacy.py +25 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/rehearse_lib/others.py +62 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/rehearse_lib/rehearsal.py +519 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/rejudge.py +327 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release.py +388 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_admit.py +94 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_admit_lib/__init__.py +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_admit_lib/focused_release.py +460 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_admit_lib/release_identity.py +50 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_admit_lib/release_ops.py +124 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_admit_lib/release_scope.py +137 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_admit_lib/release_slots.py +296 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_lib/__init__.py +0 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_lib/approved.py +33 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_lib/approved_sources/ci.yml +1211 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_lib/approved_sources/release_candidate.py.txt +615 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_lib/binding.py +95 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_lib/candidate_capacity.py +543 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_lib/candidate_policy.py +212 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_lib/edge.py +69 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_lib/moved_map.py +183 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_lib/names.py +46 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_lib/notes_audit.py +43 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_lib/rejection.py +569 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_lib/runner.py +2824 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_lib/snapshot.py +134 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_read.py +441 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_read_lib/__init__.py +0 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_read_lib/assets.py +124 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_read_lib/chores.py +90 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_read_lib/edge.py +9 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_read_lib/moved_map.py +74 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_read_lib/status.py +90 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_read_lib/verify.py +99 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/release_window.py +80 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ship.py +183 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ship_lib/__init__.py +6 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ship_lib/deps.py +102 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ship_lib/edge.py +5 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ship_lib/moved_map.py +48 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ship_lib/pr.py +213 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ship_lib/push_gate.py +74 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ship_lib/push_gate_cli.py +100 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ship_lib/push_gate_rules.py +127 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/ship_lib/ship.py +92 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/skills.py +134 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/slots.py +236 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/slots_lib/__init__.py +0 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/slots_lib/collect.py +173 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/slots_lib/legacy.py +30 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/slots_lib/registry_lock.py +21 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/status.py +180 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/status_lib/__init__.py +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/status_lib/gate.py +109 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/status_lib/table.py +120 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/sweep.py +38 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/sweep_lib/__init__.py +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/sweep_lib/evidence.py +258 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/tasks.py +132 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/tasks_lib/__init__.py +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/tasks_lib/beads.py +204 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/tick.py +447 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/tick_lib/__init__.py +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/tick_lib/checks.py +87 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/tick_lib/hub.py +110 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/tick_lib/legacy.py +25 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/tick_lib/timing.py +375 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/tick_lib/watch.py +161 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/train.py +429 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/train_lib/__init__.py +0 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/train_lib/batch_next.py +146 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/train_lib/digest.py +97 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/train_lib/edge.py +59 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/train_lib/legacy.py +25 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/train_lib/moved_map.py +394 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/train_lib/names.py +33 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/train_lib/plan.py +140 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/train_lib/resume_ci.py +78 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/train_lib/ruff.toml +10 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/train_lib/train.py +1173 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/train_status.py +24 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/updater_hold.py +42 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/velocity.py +136 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/velocity_lib/__init__.py +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/velocity_lib/ruff.toml +6 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/velocity_lib/samples.py +338 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/why.py +187 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/native/window.py +816 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/README.md +1 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/alarm-check.md +20 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/alarm-list.md +20 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/beads-agents.md +5 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/beads-brief.md +7 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/beads-stamp.md +8 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/beads-sweep.md +15 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/beads-tasks.md +11 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/ci-classify.md +19 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/ci-defer.md +25 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/ci-deferred.md +6 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/ci-faillog.md +16 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/ci-flakes.md +36 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/ci-main.md +11 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/ci-merge-gate.md +7 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/ci-one-dispatch.md +20 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/ci-one-repeats.md +3 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/ci-one-rerun.md +3 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/ci-one-status.md +3 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/ci-one-watch.md +3 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/ci-quarantine-flag.md +13 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/ci-quarantine-list.md +13 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/ci-rerun.md +21 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/ci-sonar-close.md +15 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/ci-triage-prs.md +17 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/ci-watch.md +35 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/ci-why.md +28 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/ci-window-release.md +5 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/ci-window-run.md +3 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/ci-window-status.md +3 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/daemon-governor.md +25 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/daemon-loadguard.md +38 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/daemon-queue.md +3 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/daemon-rehearse.md +3 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/doc-ask.md +12 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/doc-handoff.md +9 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/doc-section.md +9 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/doc-skills.md +10 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/doc-velocity.md +8 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/gate-status.md +3 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/go-views.md +28 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/go.md +29 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/guard-git.md +19 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/guard-heavy.md +25 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/guard-uv.md +27 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/head-apply.md +42 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/head-cases.md +21 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/head-combine-close.md +5 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/head-combine-status.md +14 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/head-coverage.md +30 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/head-floor.md +13 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/head-guard.md +3 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/head-manifest.md +29 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/head-merge-ready.md +9 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/head-meta.md +51 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/head-packet.md +64 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/head-pr.md +3 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/head-preflight.md +100 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/head-prepare.md +54 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/head-push.md +3 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/head-review-brief.md +8 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/head-select.md +13 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/head-ship.md +63 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/head-size.md +12 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/head-validate.md +3 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/lim.md +21 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/mini-governor.md +20 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/mini-leakwatch-check.md +21 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/mini-loadguard.md +6 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/mini-loops.md +43 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/mini-verify.md +12 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/note.md +6 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/queue-add.md +83 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/queue-drop.md +3 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/queue-list.md +3 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/queue-main-rerun.md +7 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/queue-why.md +3 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/release-drop.md +14 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/release-reads.md +18 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/release-rehearse-cancel.md +3 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/release-rehearse-consumers.md +3 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/release-rehearse-plan.md +3 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/release-rehearse-start.md +33 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/release-rehearse-status.md +3 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/release-rehearse-step.md +3 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/release-resume.md +22 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/retired-popup-guard.md +22 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/retired-reload-loops.md +17 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/status.md +30 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/tick.md +135 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/timing-gate.md +59 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/timing-hosted.md +26 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/timing-stages.md +27 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/parity/why.md +13 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/pipelines/__init__.py +20 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/pipelines/common.py +117 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/pipelines/head_admit.py +618 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/pipelines/release_cut.py +420 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/plugin.py +132 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/README.md +2 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/admission-originals.sha256 +22 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/beads-agents-add.md +139 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/beads-brief.md +138 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/beads-stamp-released.md +124 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/beads-stamp.md +134 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/beads-tasks.md +178 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/ci-classify.md +190 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/ci-defer.md +244 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/ci-flake-ledger.md +84 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/ci-merge-gate-rejudge.md +123 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/ci-one-dispatch.md +350 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/ci-quarantine-flag.md +223 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/ci-rerun.md +221 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/ci-sonar-close.md +211 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/ci-window-drop.md +79 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/daemon-governor.md +182 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/daemon-loadguard.md +162 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/daemon-queue.md +475 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/daemon-train.md +436 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/doc-ask.md +143 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/doc-asks-ack.md +120 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/doc-handoff.md +145 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/doc-hour.md +127 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/doc-skills-generate.md +114 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/doc-skills-link.md +106 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/doc-velocity-record.md +117 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/head-admit.md +274 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/head-apply.md +584 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/head-combine-close.md +161 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/head-junit.md +42 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/head-packet-writes.md +221 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/head-pr.md +278 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/head-prepare.md +178 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/head-ship.md +450 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/head-slots-apply.md +78 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/head-validate.md +461 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/mini-leakwatch-sample.md +153 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/note.md +131 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/plugin-gallery.md +62 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/queue-add.md +438 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/queue-checkpoint.md +190 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/queue-drop.md +438 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/queue-hold.md +47 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/queue-main-proof.md +89 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/queue-main-rerun.md +241 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/release-admit-apply.md +350 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/release-admit-frozen.patch +133 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/release-assets.md +136 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/release-cut.md +240 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/release-drop.md +295 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/release-originals.sha256 +17 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/release-pr.md +221 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/release-rehearse-start.md +362 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/release-repair-receipt.md +127 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/reviews/release-resume.md +364 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/state.py +113 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/toolmap.py +98 -0
- steuermaschine-0.0.1/plugins/heinzel/src/steuermaschine_heinzel/traps.py +17 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/admission_mutants.py +75 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/admission_parity.py +199 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/admission_paths.py +7 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/admission_verbatim.py +156 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/alarm_cases.py +74 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/ci_ops_kit.py +110 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/ci_verbatim.py +175 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/conftest.py +67 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/coord_kit.py +58 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/coord_verbatim.py +104 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/INDEX.json +42 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/batch1/apply.out +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/batch1/prepare.out +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/batch1/receipt.json +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/batch2/apply.out +0 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/batch2/prepare.out +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/consumer-pin__m-38676849/REVIEW.md +83 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/consumer-pin__m-38676849/apply.out +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/consumer-pin__m-38676849/packet.json +149 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/consumer-pin__m-38676849/prepare.out +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/consumer-pin__m-38676849/receipt.json +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/e2e-daemon-race__predict__bound-f19a3782232c/REVIEW.md +134 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/e2e-daemon-race__predict__bound-f19a3782232c/apply.out +0 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/e2e-daemon-race__predict__bound-f19a3782232c/packet.json +95 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/e2e-daemon-race__predict__bound-f19a3782232c/prepare.out +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/e2e-details-2__m-437bb247/REVIEW.md +157 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/e2e-details-2__m-437bb247/apply.out +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/e2e-details-2__m-437bb247/packet.json +113 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/e2e-details-2__m-437bb247/prepare.out +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/e2e-details-2__m-437bb247/receipt.json +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/e2e-details__m-437bb247/REVIEW.md +137 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/e2e-details__m-437bb247/apply.out +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/e2e-details__m-437bb247/packet.json +113 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/e2e-details__m-437bb247/prepare.out +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/e2e-details__m-437bb247/receipt.json +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/web-all__m-8c21af0e/REVIEW.md +77 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/web-all__m-8c21af0e/apply.out +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/web-all__m-8c21af0e/packet.json +115 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/web-all__m-8c21af0e/prepare.out +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/web-all__m-8c21af0e/receipt.json +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/web-wave-1__m-4bef51c3/REVIEW.md +232 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/web-wave-1__m-4bef51c3/apply.out +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/web-wave-1__m-4bef51c3/packet.json +275 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/web-wave-1__m-4bef51c3/prepare.out +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/web-wave-1__m-4bef51c3/receipt.json +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/web-wave-2__m-e60922e5/REVIEW.md +195 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/web-wave-2__m-e60922e5/apply.out +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/web-wave-2__m-e60922e5/packet.json +163 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/web-wave-2__m-e60922e5/prepare.out +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/web-wave-2__m-e60922e5/receipt.json +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/web-wave-3__m-38676849/REVIEW.md +155 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/web-wave-3__m-38676849/apply.out +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/web-wave-3__m-38676849/packet.json +167 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/web-wave-3__m-38676849/prepare.out +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/admission/recorded/web-wave-3__m-38676849/receipt.json +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/alarm/rules.json +280 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/ci/pr-585-rollup.json +214 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/ci/pr-784-rollup.json +344 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/ci/run-42398276348-old-cause.txt +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/ci/run-42398276348-old-faillog.txt +30 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/ci/run-42398276348.json +261 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/ci/run-42398276348.log +39 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/ci/run-43186264208-old-cause.txt +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/ci/run-43186264208-old-faillog.txt +27 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/ci/run-43186264208.json +261 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/ci/run-43186264208.log +34 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/go/go-apply-running.json +3142 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/go/go-matrix.json +6242 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-daemon-race/predict/REVIEW.md +125 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-daemon-race/predict/bound-f19a3782232c/REVIEW.md +134 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-daemon-race/predict/bound-f19a3782232c/browser.main-collected.xml +2 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-daemon-race/predict/bound-f19a3782232c/manifest.err +36 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-daemon-race/predict/bound-f19a3782232c/manifest.final.err +36 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-daemon-race/predict/bound-f19a3782232c/packet.json +95 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-daemon-race/predict/bound-f19a3782232c/python.main-collected.xml +2 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-daemon-race/predict/bound-f19a3782232c/sel.json +9 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-daemon-race/predict/bound-f19a3782232c/verify.err +36 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-daemon-race/predict/bound-f19a3782232c/wave.json +26 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-daemon-race/predict/browser.case-diff.txt +0 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-daemon-race/predict/browser.main-collected.xml +2 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-daemon-race/predict/browser.pr-collected.xml +2 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-daemon-race/predict/collect.err +8 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-daemon-race/predict/collected.txt +2 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-daemon-race/predict/manifest.err +36 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-daemon-race/predict/manifest.final.err +36 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-daemon-race/predict/packet.json +95 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-daemon-race/predict/python.case-diff.txt +0 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-daemon-race/predict/python.main-collected.xml +2 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-daemon-race/predict/python.pr-collected.xml +2 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-daemon-race/predict/sel.json +9 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-daemon-race/predict/verify.err +36 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-daemon-race/predict/wave.json +36 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details/m-437bb247/REVIEW.md +137 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details/m-437bb247/browser.case-diff.txt +0 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details/m-437bb247/browser.main-collected.xml +2 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details/m-437bb247/browser.pr-collected.xml +2 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details/m-437bb247/collect.err +8 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details/m-437bb247/collected.txt +2 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details/m-437bb247/manifest.err +29 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details/m-437bb247/manifest.final.err +29 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details/m-437bb247/packet.json +113 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details/m-437bb247/python.case-diff.txt +0 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details/m-437bb247/python.main-collected.xml +2 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details/m-437bb247/python.pr-collected.xml +2 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details/m-437bb247/sel.json +18 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details/m-437bb247/verify.err +29 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details/m-437bb247/wave.json +23 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details-2/m-437bb247/REVIEW.md +157 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details-2/m-437bb247/browser.case-diff.txt +0 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details-2/m-437bb247/browser.main-collected.xml +2 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details-2/m-437bb247/browser.pr-collected.xml +2 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details-2/m-437bb247/collect.err +8 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details-2/m-437bb247/collected.txt +2 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details-2/m-437bb247/manifest.err +29 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details-2/m-437bb247/manifest.final.err +29 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details-2/m-437bb247/packet.json +113 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details-2/m-437bb247/python.case-diff.txt +0 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details-2/m-437bb247/python.main-collected.xml +2 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details-2/m-437bb247/python.pr-collected.xml +2 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details-2/m-437bb247/sel.json +18 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details-2/m-437bb247/verify.err +29 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/packet/recorded/e2e-details-2/m-437bb247/wave.json +23 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/queue/state-2026-11-12.json +719 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/release/flow/v0.9.40.json +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/release/packet/RELEASE-REVIEW.md +109 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/release/packet/commit-generated.log +38 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/release/packet/pair-packet.json +111 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/release/packet/release-reservation-packet.json +90 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/release/receipt-0.9.40-pretag.json +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/release/tails/v0.9.38.json +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/release/tails/v0.9.39.json +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/release/train/train.json +8 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/release/train/v0.9.35.json +23 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/release/train/v0.9.36.json +21 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/release/transcripts/absorb-accepted-refused.json +36 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/release/transcripts/absorb.json +59 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/release/transcripts/drop-close-pr.json +197 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/release/transcripts/drop-published-refused.json +57 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/release/transcripts/drop.json +114 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/release/transcripts/resume-main-red.json +106 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/status/status-20261112.json +2315 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/tick/watch-ignore.toml +5 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/why/pr-690-old.txt +10 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/why/pr-797-check-runs.jsonl +3 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/why/pr-797-old.txt +10 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/fixtures/why/pr-797-view.json +1 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/guards_runtime.py +27 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/lock_entry.py +41 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/conftest.py +57 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/fixtures/acceptance-snapshot.yml +166 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/fixtures/candidate-reused-carriers.json +656 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/fixtures/pypi-legacy.yml +163 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/fixtures/rejection-compose.yml +111 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/moved_support.py +29 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/ruff.toml +5 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_queue_combine_notes.py +38 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_queue_fix_forward.py +251 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_queue_guard_and_neighbours.py +390 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_queue_main_batch.py +359 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_queue_main_cancelled_timeout.py +181 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_queue_main_plan.py +179 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_queue_main_rerun.py +532 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_queue_merge_train.py +503 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_queue_recheck.py +90 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_queue_wake.py +215 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_queue_watch_queue.py +1315 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_release_acceptance_identity.py +331 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_release_acceptance_marker.py +48 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_release_acceptance_rerun_replacement.py +202 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_release_ask_verify_brief.py +394 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_release_assets.py +57 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_release_candidate_capacity.py +540 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_release_candidate_policy.py +259 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_release_chores.py +23 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_release_compose_held.py +78 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_release_drop_candidate.py +460 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_release_handoff.py +260 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_release_notes_audit.py +27 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_release_pause.py +458 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_release_pr_acceptance_advisory.py +106 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_release_pr_gate.py +401 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_release_producer.py +209 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_release_promote.py +135 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_release_rejection.py +616 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_release_snapshot.py +469 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_release_status_summary.py +39 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_release_tag_on_main.py +393 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_ship_push_gate.py +93 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_train_main_gate.py +217 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_train_next_start.py +75 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_train_pipelined.py +507 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_train_plan.py +41 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/moved/test_native_train_self_test.py +17 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/packet_parity.py +287 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/packet_paths.py +15 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/packet_verbatim.py +105 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/record_alarm_fixtures.py +19 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/record_ci_fixtures.py +75 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/record_go_fixtures.py +84 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/record_release_transcripts.py +173 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/record_status_fixtures.py +90 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/rehearse_plugins_kit.py +151 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/sm_runtime_kit.py +17 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_heinzel_plugin.py +77 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_admission_apply_needs_verdict.py +137 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_admission_apply_refuses_batch.py +82 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_admission_batch.py +236 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_admission_batch_ops.py +220 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_admission_cov_a_focused_admit.py +421 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_admission_cov_a_focused_admit_run.py +467 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_admission_ghost_runs.py +111 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_admission_hold.py +225 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_admission_nonconsumers_setting.py +101 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_admission_ops.py +510 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_admission_pr_update.py +126 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_admission_receipt_guard.py +211 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_admission_recorded.py +52 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_admission_repair.py +434 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_admission_resulting.py +351 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_admission_slots.py +830 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_admission_stuck_queued.py +204 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_admission_wait.py +92 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_alarm.py +210 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_alarm_cov_a_watch.py +184 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_alarm_edges.py +27 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_ci_classify.py +94 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_ci_classify_jev.py +203 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_ci_evidence.py +136 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_ci_flakes.py +185 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_ci_ops_defer.py +421 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_ci_ops_quarantine.py +291 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_ci_ops_rerun.py +241 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_ci_ops_sonar.py +344 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_ci_read.py +324 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_ci_triage.py +350 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_combine.py +140 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_combine_cov_b_plan.py +188 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_command_references.py +86 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_coord_asks.py +221 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_coord_briefs.py +237 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_coord_docs.py +169 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_coord_handoff.py +227 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_coord_journal.py +243 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_coord_merges.py +85 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_coord_select.py +153 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_coord_select_core.py +100 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_coord_skills.py +117 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_coord_sweep.py +154 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_coord_tasks.py +270 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_coord_velocity.py +71 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_coord_velocity_moved.py +347 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_digest_locality.py +70 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_dispatch.py +639 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_dispatch_cov_a_focused.py +256 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_dispatch_focused.py +782 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_go.py +475 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_go_cov_b_probes.py +363 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_go_cov_b_views.py +237 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_go_legacy_files.py +38 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_go_live_next.py +70 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_go_prepare_arguments.py +60 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_go_views.py +250 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_go_workload_stale.py +84 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_guards_floor.py +233 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_guards_floor_cov_rules.py +119 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_guards_governor.py +283 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_guards_hooks.py +149 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_guards_lim.py +74 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_guards_loadguard.py +224 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_guards_smprocs.py +258 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_guards_uv.py +127 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_head_junit.py +113 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_leakwatch.py +139 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_leakwatch_moved.py +289 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_lock.py +193 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_lock_edges.py +41 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_lock_refuse_matrix.py +66 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_merge_ledger.py +363 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_merge_tier_rules.py +148 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_merge_tier_validate.py +44 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_mini.py +179 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_mini_loops.py +117 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_old_name_literals.py +45 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_packet.py +221 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_packet_cases.py +187 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_packet_dirs.py +166 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_packet_floor.py +109 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_packet_g3_candidate_plan.py +35 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_packet_manifest.py +380 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_packet_manifest_merge_tier.py +231 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_packet_parity.py +25 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_packet_size.py +122 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_packet_trusted_base.py +86 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_packet_wave.py +466 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_plugin_gallery.py +312 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_preflight.py +348 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_preflight_head.py +549 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_preflight_meta.py +33 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_preflight_parity.py +236 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_preflight_texts.py +107 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_queue_commands.py +522 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_queue_cov_a_checkpoint.py +311 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_queue_cov_a_checkpoint_chain.py +361 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_queue_cov_a_checkpoint_reader.py +267 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_queue_cov_a_main_batch.py +264 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_queue_cov_a_merge_gate.py +256 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_queue_cov_a_merge_train.py +230 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_queue_cov_a_stall.py +245 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_queue_cov_b_daemon.py +209 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_queue_cov_b_hzlib.py +444 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_queue_edge.py +232 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_queue_flakes_read.py +51 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_queue_hold.py +98 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_queue_main_commands.py +105 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_queue_pin_bounds.py +136 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_queue_repaired_main.py +142 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_queue_state_safety.py +100 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_rehearse.py +610 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_rehearse_lib.py +426 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_rejudge.py +259 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_release_admit.py +570 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_release_admit_cov_a_slots.py +320 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_release_admit_cov_refusals.py +86 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_release_admit_ops.py +257 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_release_admit_stuck.py +168 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_release_candidate_empty_steps.py +83 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_release_compose_refresh.py +124 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_release_cov_b_candidate.py +354 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_release_cov_b_capacity.py +616 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_release_cov_b_rejection.py +377 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_release_has_tag.py +39 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_release_plugin_pypi.py +62 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_release_plugin_receipt.py +84 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_release_plugin_runid.py +206 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_release_pr_open.py +170 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_release_reads.py +355 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_release_run_binding.py +113 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_release_window.py +92 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_release_writes.py +339 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_ship_commands.py +592 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_slots_collect.py +336 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_status.py +213 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_tick_deadline.py +352 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_tick_timing.py +413 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_tick_timing_commands.py +134 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_tick_watch.py +253 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_train_commands.py +510 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_train_cov_b_state.py +543 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_train_digest_known.py +87 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_updater_hold.py +63 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_why.py +94 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_why_gate_notes.py +24 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_window_detached.py +141 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_native_window_waiters.py +161 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_pipeline_admit_cut.py +656 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_pipeline_cov_head_admit.py +306 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_pipeline_cov_release_cut.py +273 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_pipeline_head_admit_merge_tier.py +104 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_pipeline_head_admit_rejected_packet.py +152 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/test_release_packet_recut.py +233 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/tick_support.py +49 -0
- steuermaschine-0.0.1/plugins/heinzel/tests/views_verbatim.py +95 -0
- steuermaschine-0.0.1/pyproject.toml +149 -0
- steuermaschine-0.0.1/scripts/check_confidentiality.py +227 -0
- steuermaschine-0.0.1/sonar-project.properties +6 -0
- steuermaschine-0.0.1/src/steuermaschine/__init__.py +14 -0
- steuermaschine-0.0.1/src/steuermaschine/app.py +842 -0
- steuermaschine-0.0.1/src/steuermaschine/commands/__init__.py +17 -0
- steuermaschine-0.0.1/src/steuermaschine/commands/doc.py +91 -0
- steuermaschine-0.0.1/src/steuermaschine/commands/gate.py +131 -0
- steuermaschine-0.0.1/src/steuermaschine/commands/lim.py +106 -0
- steuermaschine-0.0.1/src/steuermaschine/commands/window.py +38 -0
- steuermaschine-0.0.1/src/steuermaschine/config.py +273 -0
- steuermaschine-0.0.1/src/steuermaschine/defaults.py +221 -0
- steuermaschine-0.0.1/src/steuermaschine/digest.py +67 -0
- steuermaschine-0.0.1/src/steuermaschine/dispatch.py +116 -0
- steuermaschine-0.0.1/src/steuermaschine/docsection.py +78 -0
- steuermaschine-0.0.1/src/steuermaschine/engine.py +434 -0
- steuermaschine-0.0.1/src/steuermaschine/github/__init__.py +18 -0
- steuermaschine-0.0.1/src/steuermaschine/github/base.py +42 -0
- steuermaschine-0.0.1/src/steuermaschine/github/cli.py +217 -0
- steuermaschine-0.0.1/src/steuermaschine/github/client.py +118 -0
- steuermaschine-0.0.1/src/steuermaschine/github/forge.py +474 -0
- steuermaschine-0.0.1/src/steuermaschine/github/logs.py +81 -0
- steuermaschine-0.0.1/src/steuermaschine/github/models.py +410 -0
- steuermaschine-0.0.1/src/steuermaschine/github/settings.py +22 -0
- steuermaschine-0.0.1/src/steuermaschine/github/sonar.py +105 -0
- steuermaschine-0.0.1/src/steuermaschine/github/testing.py +55 -0
- steuermaschine-0.0.1/src/steuermaschine/go.py +104 -0
- steuermaschine-0.0.1/src/steuermaschine/guardhook.py +144 -0
- steuermaschine-0.0.1/src/steuermaschine/hashing.py +16 -0
- steuermaschine-0.0.1/src/steuermaschine/helpdoc.py +118 -0
- steuermaschine-0.0.1/src/steuermaschine/hookspecs.py +187 -0
- steuermaschine-0.0.1/src/steuermaschine/journal.py +106 -0
- steuermaschine-0.0.1/src/steuermaschine/lint.py +134 -0
- steuermaschine-0.0.1/src/steuermaschine/models.py +279 -0
- steuermaschine-0.0.1/src/steuermaschine/native.py +576 -0
- steuermaschine-0.0.1/src/steuermaschine/plugins.py +327 -0
- steuermaschine-0.0.1/src/steuermaschine/preflight.py +187 -0
- steuermaschine-0.0.1/src/steuermaschine/protocols.py +231 -0
- steuermaschine-0.0.1/src/steuermaschine/reviewgraph.py +117 -0
- steuermaschine-0.0.1/src/steuermaschine/reviews/ci-cancel.md +141 -0
- steuermaschine-0.0.1/src/steuermaschine/reviews/core-local-writers.md +162 -0
- steuermaschine-0.0.1/src/steuermaschine/reviews/gate-run.md +75 -0
- steuermaschine-0.0.1/src/steuermaschine/reviews/lim.md +51 -0
- steuermaschine-0.0.1/src/steuermaschine/reviews/usage-log.md +31 -0
- steuermaschine-0.0.1/src/steuermaschine/runlock.py +655 -0
- steuermaschine-0.0.1/src/steuermaschine/skillgen.py +165 -0
- steuermaschine-0.0.1/src/steuermaschine/smprocs.py +137 -0
- steuermaschine-0.0.1/src/steuermaschine/statemove.py +164 -0
- steuermaschine-0.0.1/src/steuermaschine/statsreport.py +179 -0
- steuermaschine-0.0.1/src/steuermaschine/testing/__init__.py +40 -0
- steuermaschine-0.0.1/src/steuermaschine/testing/conformance.py +94 -0
- steuermaschine-0.0.1/src/steuermaschine/testing/fakes.py +324 -0
- steuermaschine-0.0.1/src/steuermaschine/toolmap.py +51 -0
- steuermaschine-0.0.1/src/steuermaschine/usagelog.py +113 -0
- steuermaschine-0.0.1/src/steuermaschine/verdicts.py +53 -0
- steuermaschine-0.0.1/src/steuermaschine/window.py +363 -0
- steuermaschine-0.0.1/tests/gate_known.json +43 -0
- steuermaschine-0.0.1/tests/projects/heinzel/steuermaschine.toml +3 -0
- steuermaschine-0.0.1/tests/projects/layered/steuermaschine.toml +3 -0
- steuermaschine-0.0.1/tests/test_core_cli.py +433 -0
- steuermaschine-0.0.1/tests/test_core_commands.py +239 -0
- steuermaschine-0.0.1/tests/test_core_dispatch.py +224 -0
- steuermaschine-0.0.1/tests/test_core_engine.py +214 -0
- steuermaschine-0.0.1/tests/test_core_gate_units.py +241 -0
- steuermaschine-0.0.1/tests/test_core_github_cli.py +285 -0
- steuermaschine-0.0.1/tests/test_core_github_client.py +99 -0
- steuermaschine-0.0.1/tests/test_core_github_forge.py +302 -0
- steuermaschine-0.0.1/tests/test_core_github_live.py +79 -0
- steuermaschine-0.0.1/tests/test_core_github_logs.py +37 -0
- steuermaschine-0.0.1/tests/test_core_github_sonar.py +118 -0
- steuermaschine-0.0.1/tests/test_core_guardhook.py +111 -0
- steuermaschine-0.0.1/tests/test_core_help_order.py +34 -0
- steuermaschine-0.0.1/tests/test_core_json_contract.py +168 -0
- steuermaschine-0.0.1/tests/test_core_launcher.py +62 -0
- steuermaschine-0.0.1/tests/test_core_layers.py +158 -0
- steuermaschine-0.0.1/tests/test_core_live_path.py +105 -0
- steuermaschine-0.0.1/tests/test_core_migrate.py +58 -0
- steuermaschine-0.0.1/tests/test_core_names.py +103 -0
- steuermaschine-0.0.1/tests/test_core_native.py +409 -0
- steuermaschine-0.0.1/tests/test_core_preflight.py +136 -0
- steuermaschine-0.0.1/tests/test_core_reviewgraph.py +93 -0
- steuermaschine-0.0.1/tests/test_core_runlock.py +284 -0
- steuermaschine-0.0.1/tests/test_core_settings.py +204 -0
- steuermaschine-0.0.1/tests/test_core_smprocs.py +27 -0
- steuermaschine-0.0.1/tests/test_core_statemove.py +207 -0
- steuermaschine-0.0.1/tests/test_core_usagelog.py +154 -0
- steuermaschine-0.0.1/tests/test_core_verdicts.py +44 -0
- steuermaschine-0.0.1/tests/test_core_window.py +208 -0
- steuermaschine-0.0.1/tests/test_debt_ratchet.py +70 -0
- steuermaschine-0.0.1/tests/test_gate_structure.py +69 -0
- steuermaschine-0.0.1/tests/test_promote_e2e.py +134 -0
- steuermaschine-0.0.1/tests/test_promote_review_gate.py +64 -0
- steuermaschine-0.0.1/tests/test_promote_script.py +174 -0
- steuermaschine-0.0.1/tests/vulture_whitelist.py +13 -0
- steuermaschine-0.0.1/uv.lock +1345 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
- package-ecosystem: github-actions
|
|
4
|
+
directory: /
|
|
5
|
+
schedule:
|
|
6
|
+
interval: weekly
|
|
7
|
+
commit-message:
|
|
8
|
+
prefix: ci
|
|
9
|
+
groups:
|
|
10
|
+
actions:
|
|
11
|
+
patterns: ["*"]
|
|
12
|
+
- package-ecosystem: uv
|
|
13
|
+
directory: /
|
|
14
|
+
schedule:
|
|
15
|
+
interval: weekly
|
|
16
|
+
commit-message:
|
|
17
|
+
prefix: build
|
|
18
|
+
groups:
|
|
19
|
+
python:
|
|
20
|
+
patterns: ["*"]
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
pull_request:
|
|
5
|
+
permissions:
|
|
6
|
+
contents: read
|
|
7
|
+
jobs:
|
|
8
|
+
check:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
timeout-minutes: 30
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
13
|
+
with:
|
|
14
|
+
fetch-depth: 0 # gitleaks scans the full history; cz checks the pushed commits
|
|
15
|
+
- uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
|
|
16
|
+
with:
|
|
17
|
+
version: "0.13.5"
|
|
18
|
+
python-version: "3.12"
|
|
19
|
+
enable-cache: true
|
|
20
|
+
- name: Install gitleaks
|
|
21
|
+
run: |
|
|
22
|
+
curl -sSfL -o gitleaks.tgz https://github.com/gitleaks/gitleaks/releases/download/v8.30.1/gitleaks_8.30.1_linux_x64.tar.gz
|
|
23
|
+
echo "551f6fc83ea457d62a0d98237cbad105af8d557003051f41f3e7ca7b3f2470eb gitleaks.tgz" | sha256sum -c -
|
|
24
|
+
tar -xzf gitleaks.tgz -C /usr/local/bin gitleaks && rm gitleaks.tgz
|
|
25
|
+
- run: make install
|
|
26
|
+
- name: Private-term deny-list (tree and commit messages)
|
|
27
|
+
# The list lives in the repository secret PRIVATE_TERMS, never in the repository. On main a missing secret
|
|
28
|
+
# fails closed; on a pull request from a fork (no secrets) it is skipped with a notice.
|
|
29
|
+
env:
|
|
30
|
+
CONFIDENTIAL_TERMS: ${{ secrets.PRIVATE_TERMS }}
|
|
31
|
+
BEFORE: ${{ github.event_name == 'pull_request' && github.event.pull_request.base.sha || github.event.before }}
|
|
32
|
+
run: |
|
|
33
|
+
if [ -z "$CONFIDENTIAL_TERMS" ]; then
|
|
34
|
+
if [ "$GITHUB_REF" = refs/heads/main ]; then echo "::error::PRIVATE_TERMS secret missing"; exit 1; fi
|
|
35
|
+
echo "::notice::PRIVATE_TERMS not available; term guard skipped"; exit 0
|
|
36
|
+
fi
|
|
37
|
+
uv run --script scripts/check_confidentiality.py --require
|
|
38
|
+
case "$BEFORE" in ""|0000000000000000000000000000000000000000) BEFORE=$(git merge-base origin/main HEAD) ;; esac
|
|
39
|
+
if [ "$GITHUB_REF" = refs/heads/main ]; then range=HEAD; else range="$BEFORE..HEAD"; fi
|
|
40
|
+
uv run --script scripts/check_confidentiality.py --require --messages "$range"
|
|
41
|
+
- name: Conventional Commits (the commits this push or PR adds)
|
|
42
|
+
env:
|
|
43
|
+
BEFORE: ${{ github.event_name == 'pull_request' && github.event.pull_request.base.sha || github.event.before }}
|
|
44
|
+
run: |
|
|
45
|
+
case "$BEFORE" in ""|0000000000000000000000000000000000000000) BEFORE=$(git merge-base origin/main HEAD) ;; esac
|
|
46
|
+
if [ -n "$(git rev-list "$BEFORE..HEAD")" ]; then uv run cz check --rev-range "$BEFORE..HEAD"; fi
|
|
47
|
+
- run: make check
|
|
48
|
+
- run: make audit
|
|
49
|
+
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
50
|
+
if: always()
|
|
51
|
+
with:
|
|
52
|
+
name: coverage
|
|
53
|
+
path: coverage.xml
|
|
54
|
+
if-no-files-found: ignore
|
|
55
|
+
- name: Coverage summary
|
|
56
|
+
run: |
|
|
57
|
+
pct=$(python3 -c "import xml.etree.ElementTree as E; r=E.parse('coverage.xml').getroot().get; print(int(100*(int(r('lines-covered'))+int(r('branches-covered')))/(int(r('lines-valid'))+int(r('branches-valid')))))")
|
|
58
|
+
echo "### Coverage: $pct% (line + branch)" >> "$GITHUB_STEP_SUMMARY"
|
|
59
|
+
- name: SonarQube Cloud token present?
|
|
60
|
+
id: sonar
|
|
61
|
+
run: echo "token=${{ secrets.SONAR_TOKEN != '' }}" >> "$GITHUB_OUTPUT"
|
|
62
|
+
- name: SonarQube Cloud
|
|
63
|
+
if: steps.sonar.outputs.token == 'true'
|
|
64
|
+
uses: SonarSource/sonarqube-scan-action@e805d875275f728fac1885b413934be6d7c63f65 # v8.4.1
|
|
65
|
+
env:
|
|
66
|
+
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
|
67
|
+
- name: SonarQube Cloud skipped
|
|
68
|
+
if: steps.sonar.outputs.token != 'true'
|
|
69
|
+
run: echo "::notice::SonarQube Cloud skipped - the SONAR_TOKEN secret is not set"
|
|
70
|
+
|
|
71
|
+
badge:
|
|
72
|
+
# The coverage badge: an SVG on the orphan branch `badges`, shown by the README as a repository file (works for a
|
|
73
|
+
# private repository, no external account).
|
|
74
|
+
needs: check
|
|
75
|
+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
76
|
+
runs-on: ubuntu-latest
|
|
77
|
+
permissions:
|
|
78
|
+
contents: write
|
|
79
|
+
steps:
|
|
80
|
+
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
81
|
+
with:
|
|
82
|
+
name: coverage
|
|
83
|
+
- name: Write badges/coverage.svg
|
|
84
|
+
env:
|
|
85
|
+
GH_TOKEN: ${{ github.token }}
|
|
86
|
+
run: |
|
|
87
|
+
pct=$(python3 -c "import xml.etree.ElementTree as E; r=E.parse('coverage.xml').getroot().get; print(int(100*(int(r('lines-covered'))+int(r('branches-covered')))/(int(r('lines-valid'))+int(r('branches-valid')))))")
|
|
88
|
+
color=$([ "$pct" -ge 90 ] && echo brightgreen || { [ "$pct" -ge 75 ] && echo yellow || echo red; })
|
|
89
|
+
curl -sSfL -o coverage.svg "https://img.shields.io/badge/coverage-${pct}%25-${color}"
|
|
90
|
+
git init -q badges && mv coverage.svg badges/ && cd badges
|
|
91
|
+
git config user.name "github-actions[bot]" && git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
92
|
+
git checkout -q -b badges && git add coverage.svg && git commit -q -m "ci: coverage ${pct}%"
|
|
93
|
+
git push -qf "https://x-access-token:${GH_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" badges
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
name: CodeQL
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches: [main]
|
|
5
|
+
pull_request:
|
|
6
|
+
schedule:
|
|
7
|
+
- cron: "17 4 * * 1"
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
jobs:
|
|
11
|
+
analyze:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
permissions:
|
|
14
|
+
security-events: write
|
|
15
|
+
contents: read
|
|
16
|
+
actions: read
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
19
|
+
- uses: github/codeql-action/init@52cf1852265d99e9bea071b03366fc777a602909 # codeql-bundle-v2.27.4
|
|
20
|
+
with:
|
|
21
|
+
languages: python, actions
|
|
22
|
+
- uses: github/codeql-action/analyze@52cf1852265d99e9bea071b03366fc777a602909 # codeql-bundle-v2.27.4
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
tags: ["v*"]
|
|
5
|
+
permissions:
|
|
6
|
+
contents: read
|
|
7
|
+
jobs:
|
|
8
|
+
build:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
steps:
|
|
11
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
12
|
+
with:
|
|
13
|
+
fetch-depth: 0
|
|
14
|
+
- uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
|
|
15
|
+
with:
|
|
16
|
+
version: "0.13.5"
|
|
17
|
+
python-version: "3.12"
|
|
18
|
+
- name: Install gitleaks
|
|
19
|
+
run: |
|
|
20
|
+
curl -sSfL -o gitleaks.tgz https://github.com/gitleaks/gitleaks/releases/download/v8.30.1/gitleaks_8.30.1_linux_x64.tar.gz
|
|
21
|
+
echo "551f6fc83ea457d62a0d98237cbad105af8d557003051f41f3e7ca7b3f2470eb gitleaks.tgz" | sha256sum -c -
|
|
22
|
+
tar -xzf gitleaks.tgz -C /usr/local/bin gitleaks && rm gitleaks.tgz
|
|
23
|
+
- name: The tag matches the package version
|
|
24
|
+
run: |
|
|
25
|
+
version=$(uv version --short --package steuermaschine)
|
|
26
|
+
[ "${GITHUB_REF_NAME}" = "v${version}" ] || { echo "::error::tag ${GITHUB_REF_NAME} != package version v${version}"; exit 1; }
|
|
27
|
+
- run: make install
|
|
28
|
+
- run: make check
|
|
29
|
+
- run: make build
|
|
30
|
+
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
31
|
+
with:
|
|
32
|
+
name: dist
|
|
33
|
+
path: dist/
|
|
34
|
+
|
|
35
|
+
pypi:
|
|
36
|
+
needs: build
|
|
37
|
+
runs-on: ubuntu-latest
|
|
38
|
+
environment: pypi
|
|
39
|
+
permissions:
|
|
40
|
+
id-token: write
|
|
41
|
+
steps:
|
|
42
|
+
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
43
|
+
with:
|
|
44
|
+
name: dist
|
|
45
|
+
path: dist/
|
|
46
|
+
- uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # v1.14.3
|
|
47
|
+
|
|
48
|
+
github-release:
|
|
49
|
+
needs: pypi
|
|
50
|
+
runs-on: ubuntu-latest
|
|
51
|
+
permissions:
|
|
52
|
+
contents: write
|
|
53
|
+
steps:
|
|
54
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
55
|
+
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
56
|
+
with:
|
|
57
|
+
name: dist
|
|
58
|
+
path: dist/
|
|
59
|
+
- name: GitHub release with the built files
|
|
60
|
+
env:
|
|
61
|
+
GH_TOKEN: ${{ github.token }}
|
|
62
|
+
run: gh release create "$GITHUB_REF_NAME" dist/* --title "$GITHUB_REF_NAME" --notes "See [CHANGELOG.md](CHANGELOG.md)." --verify-tag
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# gitleaks defaults, plus recorded test fixtures whose "tokens" are digests and commit SHAs, not credentials.
|
|
2
|
+
[extend]
|
|
3
|
+
useDefault = true
|
|
4
|
+
|
|
5
|
+
[[allowlists]]
|
|
6
|
+
description = "recorded release freeze tokens (digests), branch->commit SHA maps, and a removed test's literal error text"
|
|
7
|
+
paths = ['''^plugins/heinzel/tests/fixtures/(release|go)/''', '''^plugins/heinzel/tests/test_native_rehearse\.py$''']
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Opt in: uvx pre-commit install --hook-type commit-msg --hook-type pre-commit
|
|
2
|
+
repos:
|
|
3
|
+
- repo: local
|
|
4
|
+
hooks:
|
|
5
|
+
- id: commitizen
|
|
6
|
+
name: Conventional Commits (cz check)
|
|
7
|
+
entry: uv run cz check --allow-abort --commit-msg-file
|
|
8
|
+
language: system
|
|
9
|
+
stages: [commit-msg]
|
|
10
|
+
- id: ruff
|
|
11
|
+
name: ruff check
|
|
12
|
+
entry: uv run ruff check src examples tests
|
|
13
|
+
language: system
|
|
14
|
+
pass_filenames: false
|
|
15
|
+
types: [python]
|
|
16
|
+
- id: gitleaks
|
|
17
|
+
name: gitleaks (staged changes)
|
|
18
|
+
entry: gitleaks git --staged --redact --no-banner --pre-commit
|
|
19
|
+
language: system
|
|
20
|
+
pass_filenames: false
|
|
21
|
+
stages: [pre-commit]
|
|
22
|
+
- id: confidentiality
|
|
23
|
+
name: private-term deny-list (files)
|
|
24
|
+
entry: uv run --script scripts/check_confidentiality.py
|
|
25
|
+
language: system
|
|
26
|
+
stages: [pre-commit]
|
|
27
|
+
- id: confidentiality-message
|
|
28
|
+
name: private-term deny-list (commit message)
|
|
29
|
+
entry: uv run --script scripts/check_confidentiality.py --identity --commit-msg
|
|
30
|
+
language: system
|
|
31
|
+
stages: [commit-msg]
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# Agent instructions for this repository
|
|
2
|
+
|
|
3
|
+
You work on `steuermaschine` (`sm`), a Typer CLI that steers changes from commit to live release. Read
|
|
4
|
+
`docs/INTEGRATION.md` before your first change; it wins over your branch at merge. Binding goal:
|
|
5
|
+
`docs/DEFINITION-OF-DONE.md`. Where a rule here blocks you, say so in your hand-over note; do not work around it.
|
|
6
|
+
|
|
7
|
+
## Layout
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
src/steuermaschine/ core: generic, names no project, person, company or private path
|
|
11
|
+
plugins/heinzel/ the large plugin: src/steuermaschine_heinzel/{plugin.py,toolmap.py,traps.py,native/,reviews/,parity/}, tests/
|
|
12
|
+
examples/toy, layer/ small plugins; the toy is the quick start, the layer proves plugin stacking
|
|
13
|
+
tests/ core tests (tests/test_core_<module>.py), tests/projects, tests/gate_known.json
|
|
14
|
+
docs/ DESIGN, INTEGRATION (the contract), DEFINITION-OF-DONE, GAPS, NATIVE-PORT
|
|
15
|
+
bin/ check, promote, rollback, merge-slice, sm-dev, debt.py, gate_known.py
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Native commands live in `native/<area>.py` (plus `native/<area>_lib/`), tests in
|
|
19
|
+
`plugins/heinzel/tests/test_native_<area>*.py` with unique basenames repo-wide.
|
|
20
|
+
|
|
21
|
+
## Hard rules (condensed from docs/INTEGRATION.md)
|
|
22
|
+
|
|
23
|
+
- **Review units and digests.** A write command (`writes=True`) is off until `reviews/<path>.md` ends with
|
|
24
|
+
`VERDICT: APPROVE` for the exact digest of its unit (module plus its `*_lib`). `sm self reviews` shows unit,
|
|
25
|
+
digest, state. Never write the `REVIEWED:` or `VERDICT:` lines yourself.
|
|
26
|
+
The digest also covers every first-party file the unit imports, transitively (core and other `_lib` packages):
|
|
27
|
+
a change to core voids the verdicts of the units that import it. Every writer is under the gate: core's own
|
|
28
|
+
writers (`review verdict`, `focus add|done`, `alarm ack`, `ci cancel`), engine pipelines (`Pipeline(unit=...)`)
|
|
29
|
+
and every native command whose Changes line names a write (`sm self lint` flags a `writes=` that disagrees). The
|
|
30
|
+
only exception is `exempt="reason"`, honoured only for a path on the core's allowlist `native.EXEMPT_PATHS`
|
|
31
|
+
(`gate run`, the run lock every review's tests run through); any other `exempt=` is still gated.
|
|
32
|
+
- **Reach the registry by name.** No module below `native/` or `pipelines/` imports `plugin.py` or `native/__init__.py`,
|
|
33
|
+
and a pipeline imports no command module: one such import puts the whole plugin into the unit's digest (23 commands had
|
|
34
|
+
202 to 225 files that way). Use `pipelines.common.command(path)` or `runtime().commands()`.
|
|
35
|
+
`plugins/heinzel/tests/test_native_digest_locality.py` fails on a wider digest; `steuermaschine.reviewgraph` shows what
|
|
36
|
+
a digest reaches and which verdicts a change voids.
|
|
37
|
+
- **Pipelines compose, they do not reimplement.** `sm head admit` and `sm release cut` (plugin `pipelines/`) call
|
|
38
|
+
native commands through `native.call`, which applies that command's own gate; tests replace a step through
|
|
39
|
+
`pipelines.common.OVERRIDE`, never the gate.
|
|
40
|
+
- **Never edit an approved unit without a new review.** Any change voids the verdict. A conflict in one goes back to
|
|
41
|
+
its owner.
|
|
42
|
+
- **No wrappers.** No command starts an old script, and no `tools_dir` setting exists. A command exists only when it
|
|
43
|
+
is native; what is not ported shows as MISSING in `sm tools gaps`. Do not bring deleted files back.
|
|
44
|
+
- **No real-path setting defaults.** No default may point at a real file or directory of a machine (no `~/...`, no
|
|
45
|
+
absolute path); a per-machine value defaults to `None` and the command that needs it refuses and names the key.
|
|
46
|
+
Every setting has a `description`; secrets are `SecretStr`.
|
|
47
|
+
- **Tests are sandboxed.** The root `conftest.py` runs tests with HOME, XDG and state dirs in a temp directory and no
|
|
48
|
+
`SM_*`/`HZ_*`/`STEUERMASCHINE_*` variables. No network, no real `gh`, no sleep: use `fake_providers()`,
|
|
49
|
+
`FakeCommands`, `invoke(...)`. A test that writes a real file of the machine fails.
|
|
50
|
+
- **Narrow interfaces.** Processes only through `providers.commands`, GitHub through `providers.forge`/`.ci` or
|
|
51
|
+
`steuermaschine.github.Gh`, time through `providers.clock`, state through `providers.store`, digests through
|
|
52
|
+
`steuermaschine.hashing.canonical_sha256`. No `subprocess`, `time.sleep`, `os.environ` or `fcntl` in native code.
|
|
53
|
+
- **Never `git stash`.** The stash list is shared by all worktrees of the repository. Commit a WIP instead.
|
|
54
|
+
- **One worktree per slice.** `git worktree add ../steuermaschine-wt-<slice> -b <branch> origin/main`; do not work in
|
|
55
|
+
the main checkout, which belongs to the integrator.
|
|
56
|
+
- **Heavy runs go through the gate:** `sm gate run -- <command>` (full test suite, type checks, builds, pushes).
|
|
57
|
+
Focused tests may run directly.
|
|
58
|
+
- **The core is clean and stays so:** ruff, mypy strict, pyright, 90% line+branch coverage, no dead code (vulture);
|
|
59
|
+
`bin/check` gates all of it. The plugin's typing, ruff and environment-read debt may only fall: `docs/debt.json`
|
|
60
|
+
is the ratchet (`uv run python bin/debt.py --record` in the commit that improves a number).
|
|
61
|
+
- **Moved code stays verbatim.** Moved libraries and their moved tests keep their text so the diff against the
|
|
62
|
+
original is the review instrument; they get per-file ruff and mypy exceptions in `pyproject.toml`, and a verifier
|
|
63
|
+
(for example `plugins/heinzel/tests/packet_verbatim.py`) prints every changed line. Moved libraries expose functions only, no
|
|
64
|
+
`if __name__ == "__main__"`.
|
|
65
|
+
- **Help and output.** Help in contract form via `H(...)`, every argument and option with its own `help=`;
|
|
66
|
+
`sm self lint` (strict) and `tests/test_core_help_order.py` must stay clean. Every command is `@native` and
|
|
67
|
+
returns a typed `Model` (core commands: `emit(..., Model)`); text through `render()`, JSON from the model
|
|
68
|
+
(`tests/test_core_json_contract.py` runs every command in json and parses it with its model). Errors
|
|
69
|
+
are `Refuse`/`Wait`, never `sys.exit`.
|
|
70
|
+
- **Settings.** Typed only: a plugin field with a `description`, or `config.Environment` for a process variable.
|
|
71
|
+
Only `config.py` reads `os.environ` in the core; native modules read none (`tests/test_core_settings.py`).
|
|
72
|
+
- **Privacy.** Never print, log or commit a configuration value that may be private (URLs, repository names, tokens,
|
|
73
|
+
paths). No old tool names (`hz-...`) in native output, help or state paths.
|
|
74
|
+
|
|
75
|
+
## Run the tests and the gate
|
|
76
|
+
|
|
77
|
+
```sh
|
|
78
|
+
uv sync
|
|
79
|
+
uv run pytest plugins/heinzel/tests/test_native_<area>.py # focused
|
|
80
|
+
sm gate run -- uv run pytest # everything
|
|
81
|
+
bin/check --fast # tests, help lint per project, typos, ruff, mypy strict and pyright (core), vulture
|
|
82
|
+
bin/check # the same plus coverage >= 90 (core, plugin) and the plugin's debt ratchet (docs/debt.json)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## How a change reaches the live `sm`
|
|
86
|
+
|
|
87
|
+
1. Build on a branch in your own worktree, small commits, tests green, rebased on `origin/main`.
|
|
88
|
+
2. Hand over (branch, commit range, test count, files outside your area, settings added, what you could not verify;
|
|
89
|
+
see INTEGRATION.md section 7). The integrator merges with `bin/merge-slice BRANCH`, which refuses on red.
|
|
90
|
+
3. Promotion: `bin/check`, then `bin/promote --check`, then `bin/promote`. It builds the committed HEAD into the
|
|
91
|
+
stable install and switches atomically; the coordinator decides when, never during a running admission or release.
|
|
92
|
+
It refuses while a gated write command is not approved at its digest: a change that moves a digest is not live
|
|
93
|
+
until that unit's new verdict is merged (`sm self reviews`).
|
|
94
|
+
4. `bin/rollback` switches back to the previous release (run it again to go forward).
|
|
95
|
+
|
|
96
|
+
## Commits
|
|
97
|
+
|
|
98
|
+
Small, one area or command per commit; subject at most 72 characters. End every commit message with the trailer of
|
|
99
|
+
the model that wrote it, for example:
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Never
|
|
106
|
+
|
|
107
|
+
- Push to `main`, or merge into it, without the integrator.
|
|
108
|
+
- Edit the stable install (`~/Code/steuermaschine-stable` or whatever `SM_STABLE` names); it changes only through
|
|
109
|
+
`bin/promote` and `bin/rollback`.
|
|
110
|
+
- Print configuration values, or put a private value in help, a test or a commit.
|
|
111
|
+
- Edit an approved review unit, a `reviews/` verdict, or `tests/gate_known.json` by hand.
|
|
112
|
+
- Run an old script, or add a wrapper around one.
|
|
113
|
+
- Change repository settings, or open or merge a PR unless asked.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are documented in this file. The format follows
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), versions follow [Semantic Versioning](https://semver.org).
|
|
5
|
+
Entries are generated from [Conventional Commits](https://www.conventionalcommits.org) by
|
|
6
|
+
[commitizen](https://commitizen-tools.github.io/commitizen/) (`make release`); edit wording by hand before tagging if needed.
|
|
7
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Read and follow AGENTS.md in this directory.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# The single entry point for CI and release: standard tools only (uv, ruff, mypy, pyright, pytest, gitleaks, commitizen).
|
|
2
|
+
.PHONY: install lint format typecheck test secrets audit build check release clean
|
|
3
|
+
|
|
4
|
+
# The core with mypy's default rules; the codes below fail on today's code (debt: drop one when its findings are fixed).
|
|
5
|
+
# The repository's [tool.mypy] (strict) stays the debt measure of bin/debt.py, so the gate ignores it.
|
|
6
|
+
MYPY_DEBT := arg-type assignment attr-defined empty-body index operator union-attr var-annotated annotation-unchecked
|
|
7
|
+
|
|
8
|
+
install:
|
|
9
|
+
uv sync --all-packages --locked
|
|
10
|
+
|
|
11
|
+
# ruff format is not in the gate yet: most files predate it, and a mass reformat would collide with open branches.
|
|
12
|
+
lint:
|
|
13
|
+
uv run ruff check src examples tests
|
|
14
|
+
|
|
15
|
+
format: # apply ruff format (not yet enforced; see lint)
|
|
16
|
+
uv run ruff format src examples tests
|
|
17
|
+
|
|
18
|
+
typecheck:
|
|
19
|
+
uv run mypy --config-file= --python-version 3.12 $(MYPY_DEBT:%=--disable-error-code %) src/steuermaschine
|
|
20
|
+
uv run pyright
|
|
21
|
+
|
|
22
|
+
# Coverage floor of the gate (line+branch, core+heinzel plugin, as CI measures it today); [tool.coverage] fail_under
|
|
23
|
+
# = 90 stays the target that bin/check reports as debt.
|
|
24
|
+
COV_FLOOR := 82
|
|
25
|
+
|
|
26
|
+
# Typer forces colored help when GITHUB_ACTIONS, FORCE_COLOR or PY_COLORS is set; the help tests read plain text.
|
|
27
|
+
test:
|
|
28
|
+
env -u GITHUB_ACTIONS -u FORCE_COLOR -u PY_COLORS uv run pytest --cov --cov-report=term --cov-report=xml --cov-fail-under=$(COV_FLOOR)
|
|
29
|
+
|
|
30
|
+
secrets:
|
|
31
|
+
gitleaks git --redact --no-banner .
|
|
32
|
+
gitleaks dir --redact --no-banner .
|
|
33
|
+
|
|
34
|
+
audit:
|
|
35
|
+
uv audit --locked --preview-features audit-command
|
|
36
|
+
|
|
37
|
+
build:
|
|
38
|
+
rm -rf dist && uv build --package steuermaschine --out-dir dist
|
|
39
|
+
|
|
40
|
+
check: lint typecheck test secrets
|
|
41
|
+
|
|
42
|
+
release: # bump from Conventional Commits, write CHANGELOG.md, commit, tag v*; then: git push --follow-tags
|
|
43
|
+
uv run cz bump --yes
|
|
44
|
+
|
|
45
|
+
clean:
|
|
46
|
+
rm -rf dist .coverage coverage.xml .pytest_cache .mypy_cache .ruff_cache
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: steuermaschine
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: The artificial helmsman: a coordinator CLI that steers work from a change to a live release, for AI agents and a human owner.
|
|
5
|
+
Requires-Python: >=3.12
|
|
6
|
+
Requires-Dist: pluggy>=1.5
|
|
7
|
+
Requires-Dist: pydantic-settings>=2.6
|
|
8
|
+
Requires-Dist: pydantic>=2.7
|
|
9
|
+
Requires-Dist: typer>=0.15
|
|
10
|
+
Description-Content-Type: text/markdown
|
|
11
|
+
|
|
12
|
+
# steuermaschine
|
|
13
|
+
|
|
14
|
+
[](https://github.com/helmut-hoffer-von-ankershoffen/steuermaschine/actions/workflows/ci.yml)
|
|
15
|
+
[](https://github.com/helmut-hoffer-von-ankershoffen/steuermaschine/actions/workflows/ci.yml)
|
|
16
|
+
[](https://github.com/helmut-hoffer-von-ankershoffen/steuermaschine/actions/workflows/codeql.yml)
|
|
17
|
+
[](https://pypi.org/project/steuermaschine/)
|
|
18
|
+
[](pyproject.toml)
|
|
19
|
+
<!-- SonarQube Cloud: the project is private, so its badges need a project badge token. Owner: SonarQube Cloud >
|
|
20
|
+
project > Information > Badges, copy the token, and replace BADGE_TOKEN below (all three). -->
|
|
21
|
+
[](https://sonarcloud.io/summary/overall?id=helmut-hoffer-von-ankershoffen_steuermaschine)
|
|
22
|
+
[](https://sonarcloud.io/summary/overall?id=helmut-hoffer-von-ankershoffen_steuermaschine)
|
|
23
|
+
[](https://sonarcloud.io/summary/overall?id=helmut-hoffer-von-ankershoffen_steuermaschine)
|
|
24
|
+
|
|
25
|
+
`sm` is a reusable coordinator that steers a change from commit to live release for projects in which AI agents do
|
|
26
|
+
the work. It keeps resumable state per head (a commit on a work branch) and per release, always knows the one next
|
|
27
|
+
command, and stops at review points where only the owner or an independent reviewer may continue. The core knows no
|
|
28
|
+
project; pipelines, providers, gates and traps come from plugins (core plus plugins, wired with pluggy).
|
|
29
|
+
|
|
30
|
+
The name: not a Steuermann or Steuerfrau, a human helmsman, but the artificial one: a Maschine that steers. The
|
|
31
|
+
owner sets the destination and decides at the review stops.
|
|
32
|
+
|
|
33
|
+
## Status
|
|
34
|
+
|
|
35
|
+
Pre-release and private. Version 0.0.1. Every command is native; no command starts an old script
|
|
36
|
+
(`sm tools gaps --wrapped` prints 0, `sm tools gaps` the rows not ported yet). The binding goal for the first
|
|
37
|
+
release is [docs/DEFINITION-OF-DONE.md](docs/DEFINITION-OF-DONE.md). The plugin API (`steuermaschine.API_VERSION`)
|
|
38
|
+
may still change.
|
|
39
|
+
|
|
40
|
+
## Install
|
|
41
|
+
|
|
42
|
+
From a clone, for now (PyPI later, project name `steuermaschine`):
|
|
43
|
+
|
|
44
|
+
```sh
|
|
45
|
+
git clone <repository-url> steuermaschine && cd steuermaschine
|
|
46
|
+
uv tool install . # puts `sm` and `steuermaschine` on your PATH
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
For development use `uv sync` and `bin/sm-dev` instead (see Development).
|
|
50
|
+
|
|
51
|
+
## Quick start (toy plugin, no account needed)
|
|
52
|
+
|
|
53
|
+
```sh
|
|
54
|
+
uv sync && export PATH="$PWD/.venv/bin:$PATH"
|
|
55
|
+
mkdir /tmp/toy && cd /tmp/toy && git init -q -b main && git commit -q --allow-empty -m init
|
|
56
|
+
printf '[project]\nname = "toy-demo"\nplugin = "toy"\n' > steuermaschine.toml
|
|
57
|
+
git checkout -q -b feat/hello && echo hi > hello.txt && git add hello.txt && git commit -q -m hello
|
|
58
|
+
sm # PHASE idle
|
|
59
|
+
sm head ship . # dry run: stops before the first write outside this machine, prints what it would do
|
|
60
|
+
sm head ship . --live # pushes, opens the PR, then WAITING on CI
|
|
61
|
+
sm sim ci green . # play the outside world: CI turns green
|
|
62
|
+
sm head ship . --live # continues where it stopped: merge, tag, finished
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Run the `uv sync` line in the clone, the rest in the scratch directory. The toy's forge and CI are a simulation in
|
|
66
|
+
`.sim/world.json`; the engine, state, dry run, waiting and resuming are real. State lives under
|
|
67
|
+
`~/.local/state/steuermaschine/<project>` (`STEUERMASCHINE_HOME` moves it).
|
|
68
|
+
|
|
69
|
+
## The `go` contract
|
|
70
|
+
|
|
71
|
+
Bare `sm` (same as `sm go`) is read-only and prints, in this order:
|
|
72
|
+
|
|
73
|
+
- `PHASE`: where the project stands.
|
|
74
|
+
- `NEXT`: the one command to type now.
|
|
75
|
+
- `TRAP`: the mistake that is most likely at exactly this step. Read it before you run NEXT.
|
|
76
|
+
|
|
77
|
+
`WAITING` appears when the run waits on the outside world (CI, a reviewer); run the same command again later.
|
|
78
|
+
Exit codes: 0 done or a planned stop, 1 refused, 2 usage, 3 alarm, 70 tool error or plugin not loaded, 75 waiting.
|
|
79
|
+
Every command has `--format json` with exactly one document and a published schema (`sm self schema`).
|
|
80
|
+
|
|
81
|
+
## The review gate
|
|
82
|
+
|
|
83
|
+
- A command that writes outside this machine, or changes state other commands act on, is a write command.
|
|
84
|
+
- Write commands stay closed (exit 70, naming the review file) until an independent review approves them.
|
|
85
|
+
- The approval names the exact digest of the reviewed code unit: the module, its `*_lib` package and every
|
|
86
|
+
first-party file it imports, transitively. Any edit to one of them voids it, also an edit to the core.
|
|
87
|
+
- The reviewer is never the author: `sm review verdict DIGEST --approve --reviewer NAME` records it.
|
|
88
|
+
- `sm self reviews` lists every write command, its unit, its digest and its state.
|
|
89
|
+
|
|
90
|
+
- `bin/promote` refuses a build in which a gated write command is not approved: promoting it would switch that
|
|
91
|
+
command off.
|
|
92
|
+
|
|
93
|
+
Writes that a pipeline step makes also need `--live`; without it a run stops with a dry-run plan. A pipeline
|
|
94
|
+
(`sm head admit`, `sm release cut` in the Heinzelmännchen plugin) runs each step as a native command through that
|
|
95
|
+
command's own gate, and stops at its review points until a different agent approved the digest.
|
|
96
|
+
|
|
97
|
+
## Writing a plugin
|
|
98
|
+
|
|
99
|
+
A plugin is an object (or module) with functions marked `@hookimpl`; the core calls the ones it implements:
|
|
100
|
+
`sm_api_version`, `sm_settings`, `sm_pipelines`, `sm_gates`, `sm_traps`, providers such as `sm_forge` and `sm_ci`,
|
|
101
|
+
`sm_native` (commands: `@native` functions that return a result model) and more. Every command follows the help
|
|
102
|
+
contract (`sm self lint`, strict) and prints one typed JSON document with `--format json`. Register it as an
|
|
103
|
+
entry point in group `steuermaschine.plugins` and name it in the project's
|
|
104
|
+
`steuermaschine.toml` (`plugin = "..."`, or `plugins = ["base", "outer"]`; later entries are outer layers).
|
|
105
|
+
`sm self hooks` lists the specifications, `sm self plugins` the loaded stack. Start from `examples/toy` (a complete
|
|
106
|
+
plugin in one file), `examples/layer` (a second plugin layered on the first), `src/steuermaschine/hookspecs.py` and
|
|
107
|
+
section 5 of [docs/DESIGN.md](docs/DESIGN.md). Test with `steuermaschine.testing` (`fake_providers`, `invoke`,
|
|
108
|
+
conformance kit).
|
|
109
|
+
|
|
110
|
+
## Development
|
|
111
|
+
|
|
112
|
+
```sh
|
|
113
|
+
uv sync # workspace: core, plugins/heinzel, examples/toy, examples/layer
|
|
114
|
+
uv run pytest # all tests, sandboxed (see docs/INTEGRATION.md section 8.5)
|
|
115
|
+
bin/sm-dev ... # run the development tree
|
|
116
|
+
bin/check # the quality gate: tests, coverage >= 90, help lint, typos, ruff, mypy strict,
|
|
117
|
+
# pyright, dead code, the plugin's debt ratchet (docs/debt.json); --fast skips coverage
|
|
118
|
+
bin/promote --check # everything a promote would test, without switching
|
|
119
|
+
bin/promote # build the committed HEAD into the stable install and switch to it
|
|
120
|
+
bin/rollback # switch the stable install back to the previous release (again: forward)
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
A stable install differs from the development tree: `sm` on the PATH runs a commit built with `git archive` into
|
|
124
|
+
its own directory and virtual environment, non-editable, and nothing in it points at the checkout. Only
|
|
125
|
+
`bin/promote` changes it, so editing or breaking the tree never breaks the live tool.
|
|
126
|
+
|
|
127
|
+
## Docs
|
|
128
|
+
|
|
129
|
+
- [docs/DESIGN.md](docs/DESIGN.md): purpose, pipelines as state machines, providers, plugins, help contract, output.
|
|
130
|
+
- [docs/INTEGRATION.md](docs/INTEGRATION.md): the contract for every change handed to the integrator.
|
|
131
|
+
- [docs/DEFINITION-OF-DONE.md](docs/DEFINITION-OF-DONE.md): the binding goal for the first release.
|
|
132
|
+
- [docs/NATIVE-PORT.md](docs/NATIVE-PORT.md) and [docs/GAPS.md](docs/GAPS.md): how the old tools were ported.
|
|
133
|
+
- [docs/RUNBOOK-release-cut.md](docs/RUNBOOK-release-cut.md): a release with `sm release cut`.
|
|
134
|
+
- [docs/SWITCH-queue-daemon.md](docs/SWITCH-queue-daemon.md): switching the live queue daemon.
|
|
135
|
+
- [AGENTS.md](AGENTS.md): instructions for coding agents working in this repository.
|