New module webfeed (library + thin shell): snapshot over real on-disk sources (task checkpoint, event journal, commands store) — absent/corrupt render available:false + reason, never fabricated; every item carries a resolvable evidence link; committed/pending on everything; paired-command ordering by authenticated arrival (unpaired/replayed render as refusals); GET-only (mutating methods 405 read_only on every route); SSE replay + live-tail handling BOTH envelope generations in the journal (id/type and event_id/event_type — silent under-reporting otherwise). Red-first; race-clean. Main-session verify: green own run.
108 lines
3.9 KiB
Python
108 lines
3.9 KiB
Python
"""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())
|