"""Admission dispatch for wave workflow-engine (unattended workflows, runtime side). classify + activate + admit (the headless scaffolding entry law, tests/test_construction_admission.py pattern): the workflow-engine build on the existing rune project, user-dispatch approved. """ import json import os import sys sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "src")) from rune import construction_activation as cact # noqa: E402 from rune import construction_admission as cadm # noqa: E402 from rune import construction_mode as cmode # noqa: E402 from rune import scaffold as sc # noqa: E402 ROOT = os.path.join(os.path.dirname(__file__), "..") OBJECTIVE = ( "build the unattended workflow engine runtime side (openspec " "add-native-rune-tui / unattended-workflows): four trigger classes " "with the natural-language parse stub honestly marked (never fires, " "registration demands reviewed conversion), workflow contracts with " "bounded per-step retries, failure-exhaustion PAUSE with state and " "evidence preserved plus a typed evidence-bearing alert (never " "silent death), evidence-backed improvement proposals after three " "same-way failures awaiting approval, and a headless run proof " "under a fake clock with zero real sleeps" ) AFFECTED = [ "src/go/workflow-engine/go.mod", "src/go/workflow-engine/main.go", "src/go/workflow-engine/internal/workflow/types.go", "src/go/workflow-engine/internal/workflow/trigger.go", "src/go/workflow-engine/internal/workflow/nlparse.go", "src/go/workflow-engine/internal/workflow/engine.go", "src/go/workflow-engine/internal/workflow/cli.go", "src/go/workflow-engine/internal/workflow/trigger_matrix_test.go", "src/go/workflow-engine/internal/workflow/retry_pause_test.go", "src/go/workflow-engine/internal/workflow/proposal_test.go", "src/go/workflow-engine/internal/workflow/headless_test.go", ] def main() -> int: store = os.path.join(ROOT, "store", "scaffold") scaffold = sc.Scaffold(store, "rune") md = cmode.classify_mode( OBJECTIVE, target_project="rune", project_exists=True, affected_surface=AFFECTED, ) print("classified mode:", md.mode) need = { "need_id": "need-wave-workflow-engine", "objective": OBJECTIVE, "origin": "worker", "project": "rune", "task_ref": "wave-workflow-engine", "affected_surface": AFFECTED, "evidence_refs": [ "docs/openspec/changes/add-native-rune-tui/specs/unattended-workflows/spec.md", "src/go/cron-engine/main.go", "src/go/work-manager/main.go", ], } act = cact.activate(md, need=need, scaffold=scaffold, builder="wave-workflow-engine") print("activated:", act.get("activated"), act.get("mode")) env = cadm.admit( act, objective=OBJECTIVE, builder="wave-workflow-engine", affected_surface=AFFECTED, evidence_refs=need["evidence_refs"], origin="worker", task_ref="wave-workflow-engine", expected_new_entities=[ "src/go/workflow-engine (module: library internal/workflow + thin shell)", ], expected_runtime_effects=[ "event dispatch runs registered workflows headlessly, writing run records and typed alerts", "failure exhaustion pauses the workflow with state and evidence preserved (never silent death)", "three same-way failures mint one evidence-backed improvement proposal awaiting approval", ], verification_obligations=[ "go test ./... in src/go/workflow-engine green (frozen batteries: trigger matrix, bounded-retry-then-pause, proposal-on-3-failures, headless fake-clock run)", "gofmt -l clean and go vet clean in src/go/workflow-engine", "live CLI headless run proof: run subcommand pauses with exit 3 and evidence links", ], approval_ref="user:wave-workflow-engine dispatch", contract_id="ADMIT-wave-workflow-engine", project_store=store, project_id="rune", ) print(json.dumps(env, indent=2, default=str)[:2400]) return 0 if env.get("success") else 1 if __name__ == "__main__": sys.exit(main())