"""Admission dispatch for wave webfeed (spec 1.2 web-link live feed, runtime side). classify + activate + admit (the headless scaffolding entry law, scripts/admit_wave_i3_live_task_tree.py pattern): the webfeed Go module 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 web-link live feed runtime side into a new standalone Go " "module src/go/webfeed (openspec add-native-rune-tui task 1.2, " "rune-runtime single-interface/web-feed requirement): a read-oriented " "live view of the runtime served over HTTP+SSE (serve-surface patterns " "mirrored from rune-entry but standalone, stdlib only) — state " "snapshot endpoint with honest sections, SSE event stream with " "live-tail over the event-bus journal, evidence links on every item " "resolved by the feed itself, origin-tagged paired-command ordering " "display (commands render with origin+commit status, read-only, no " "execution path), and the committed/pending distinction everywhere" ) AFFECTED = [ "src/go/webfeed/go.mod", "src/go/webfeed/main.go", "src/go/webfeed/internal/webfeed/feed.go", "src/go/webfeed/internal/webfeed/server.go", "src/go/webfeed/internal/webfeed/feed_test.go", "src/go/webfeed/internal/webfeed/server_test.go", "src/go/webfeed/internal/webfeed/README.md", "scripts/admit_wave_webfeed.py", ] 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-webfeed", "objective": OBJECTIVE, "origin": "worker", "project": "rune", "task_ref": "wave-webfeed", "affected_surface": AFFECTED, "evidence_refs": [ "docs/openspec/changes/add-native-rune-tui/specs/rune-runtime/spec.md", "docs/openspec/changes/add-native-rune-tui/tasks.md", "src/go/rune-entry/internal/entry/surface.go", "src/go/rune-entry/internal/entry/serve.go", ], } act = cact.activate(md, need=need, scaffold=scaffold, builder="wave-webfeed") print("activated:", act.get("activated"), act.get("mode")) env = cadm.admit( act, objective=OBJECTIVE, builder="wave-webfeed", affected_surface=AFFECTED, evidence_refs=need["evidence_refs"], origin="worker", task_ref="wave-webfeed", expected_new_entities=[ "src/go/webfeed (standalone Go module)", "src/go/webfeed/internal/webfeed (library package)", ], expected_runtime_effects=[ "webfeed serves GET /snapshot, /events (SSE live-tail), " "/evidence on 127.0.0.1 — read-only, no execute path", "paired commands render origin-tagged in arrival order with " "committed/pending distinction", ], verification_obligations=[ "go test ./... in src/go/webfeed green (frozen fixtures pass)", "go vet + gofmt clean, go test -race green", "unified_check src_go_suite green once floor settles", ], approval_ref="user:wave-webfeed dispatch", contract_id="ADMIT-wave-webfeed", 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())