admit: wave-presentation contract — the owner-spec'd presentation wave (activity pane, answer presentation, selection, scrollback)
CI Pipeline / best-practices (push) Successful in 13s
CI Pipeline / documentation (push) Successful in 13s
CI Pipeline / rust-surface (push) Failing after 24s
Auto-version and Release / release (push) Successful in 25s
CI Pipeline / gitea-offline (push) Successful in 32s
CI Pipeline / go-surface (push) Failing after 48s
CI Pipeline / lint (push) Failing after 1m5s
CI Pipeline / type-check (push) Failing after 1m0s
CI Pipeline / canary (push) Failing after 3m34s
deploy / deploy (push) Failing after 15m31s
CI Pipeline / unit-tests (push) Failing after 39m33s
CI Pipeline / required-checks (push) Failing after 1s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Failing after 5s
CI Pipeline / best-practices (push) Successful in 13s
CI Pipeline / documentation (push) Successful in 13s
CI Pipeline / rust-surface (push) Failing after 24s
Auto-version and Release / release (push) Successful in 25s
CI Pipeline / gitea-offline (push) Successful in 32s
CI Pipeline / go-surface (push) Failing after 48s
CI Pipeline / lint (push) Failing after 1m5s
CI Pipeline / type-check (push) Failing after 1m0s
CI Pipeline / canary (push) Failing after 3m34s
deploy / deploy (push) Failing after 15m31s
CI Pipeline / unit-tests (push) Failing after 39m33s
CI Pipeline / required-checks (push) Failing after 1s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Failing after 5s
This commit is contained in:
1 parent
807199c089
commit
ba63d15a6f
2 files changed
+325
No files matched your search
@@ -0,0 +1,151 @@
|
||||
"""Admission dispatch for wave presentation (the owner's spec'd TUI build).
|
||||
|
||||
The presentation wave per docs/openspec/changes/add-native-rune-tui/
|
||||
spec-activity-pane-and-presentation.md (owner rulings 2026-10-21) plus
|
||||
Gitea #2530 (bubble breaks + left-align), #2532 (mouse-drag selection +
|
||||
OSC 52 auto-copy), #2535 (scrollback): (1) THE ACTIVITY PANE — the
|
||||
bridge strip reborn always-visible, dynamic real-signal state
|
||||
(thinking/coding/planning/researching/idle), per-activity colour +
|
||||
animation, runic marks kept with random rune colours, rainbow activity
|
||||
word, no timestamp, + affordance opening the centered processing
|
||||
window, tasks-pane mirror; (2) THE ANSWER PRESENTATION — growing speech
|
||||
bubbles (consecutive prose joins one bubble, left-aligned,
|
||||
speaker-coloured outline), tables break out full-width bordered, bullet/
|
||||
step rail presentation outside the bubble, built on D47's markdown
|
||||
block parse; (3) SELECTION — mouse-drag highlight per pane + auto-copy
|
||||
via OSC 52 (direct emission, capability detect, honest degrade);
|
||||
(4) SCROLLBACK — chat history scrollable keyboard + wheel.
|
||||
approval_ref 'user:presentation spec 2026-10-21 + bedtime factory directive'.
|
||||
"""
|
||||
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 owner-spec'd presentation wave: (1) rebuild the bridge "
|
||||
"strip into the activity pane — make it always visible, drive its "
|
||||
"state word (thinking/coding/planning/researching/idle) from real "
|
||||
"dispatch signals, colour and animate each activity differently, "
|
||||
"keep the runic marks with random rune colours, animate a rainbow "
|
||||
"activity word, remove the timestamp, add a clickable + that opens "
|
||||
"a centered window holding the full current-turn processing, and "
|
||||
"mirror the live activity in the tasks pane; (2) rebuild the "
|
||||
"answer rendering — grow one speech bubble per consecutive prose "
|
||||
"run, left-align text, colour bubble outlines by speaker, break "
|
||||
"tables out of the bubble full-width bordered, render bullet and "
|
||||
"step lists as rail presentations outside the bubble, and fix the "
|
||||
"large-answer bubble breakage; (3) add mouse-drag selection to "
|
||||
"every pane and auto-copy the selection via OSC 52 direct "
|
||||
"emission with honest degrade; (4) add chat-history scrollback "
|
||||
"with keyboard paging and mouse wheel"
|
||||
)
|
||||
AFFECTED = [
|
||||
"tui/chatpane/",
|
||||
"tui/tasks/",
|
||||
"tui/lanes/",
|
||||
"tui/face/",
|
||||
"tui/cmd/rune-tui/",
|
||||
"tui/runtime/lib/",
|
||||
"scripts/admit_wave_presentation.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-presentation",
|
||||
"objective": OBJECTIVE,
|
||||
"origin": "worker",
|
||||
"project": "rune",
|
||||
"task_ref": "wave-presentation",
|
||||
"affected_surface": AFFECTED,
|
||||
"evidence_refs": [
|
||||
"docs/openspec/changes/add-native-rune-tui/"
|
||||
"spec-activity-pane-and-presentation.md (the owner's spec)",
|
||||
"docs/openspec/changes/add-native-rune-tui/"
|
||||
"dichotomy-routing-table-DRAFT.md",
|
||||
"tui/chatpane/markdown.go (D47 block parse to build on)",
|
||||
"tui/tasks/answercodes.go (work stream pattern)",
|
||||
"Gitea #2530 #2532 #2535",
|
||||
],
|
||||
}
|
||||
act = cact.activate(md, need=need, scaffold=scaffold,
|
||||
builder="wave-presentation")
|
||||
print("activated:", act.get("activated"), act.get("mode"))
|
||||
|
||||
env = cadm.admit(
|
||||
act,
|
||||
objective=OBJECTIVE,
|
||||
builder="wave-presentation",
|
||||
affected_surface=AFFECTED,
|
||||
evidence_refs=need["evidence_refs"],
|
||||
origin="worker",
|
||||
task_ref="wave-presentation",
|
||||
expected_new_entities=[
|
||||
"tui/lanes (the activity pane: always-visible strip, "
|
||||
"dynamic real-signal state, per-activity colour + "
|
||||
"animation, runic marks with random rune colours, rainbow "
|
||||
"activity word, no timestamp)",
|
||||
"tui (the + centered processing window, one block per "
|
||||
"answer; tasks-pane mirror of the live activity)",
|
||||
"tui/chatpane (growing speech bubbles: consecutive prose "
|
||||
"joins one bubble, left-aligned, speaker-coloured "
|
||||
"outline; tables break out full-width bordered; bullet/"
|
||||
"step rail presentation outside the bubble)",
|
||||
"tui (mouse-drag selection per pane + OSC 52 auto-copy, "
|
||||
"direct emission, honest degrade)",
|
||||
"tui/chatpane (chat-history scrollback keyboard + wheel)",
|
||||
"tests: red-first suites per part, -race green",
|
||||
],
|
||||
expected_runtime_effects=[
|
||||
"the bridge strip never disappears; its state word, "
|
||||
"colour and animation reflect the real dispatch (thinking/"
|
||||
"coding/planning/researching/idle)",
|
||||
"the + affordance opens a centered window with the full "
|
||||
"current-turn processing; the activity mirrors in the "
|
||||
"tasks pane",
|
||||
"long answers grow one bubble per speech run with tables "
|
||||
"and lists breaking out; outlines carry the speaker "
|
||||
"colour; answers never break the bubble",
|
||||
"mouse drag highlights in panes and copies on release "
|
||||
"where the terminal allows",
|
||||
"chat history scrolls with keyboard and wheel",
|
||||
],
|
||||
verification_obligations=[
|
||||
"cd tui && go test ./... -race green (documented "
|
||||
"pre-existing failures aside); go build + vet + gofmt "
|
||||
"clean",
|
||||
"PTY proofs: rainbow word, + window open/close, bubble "
|
||||
"growth, table breakout, drag-select + copy bytes, "
|
||||
"scrollback",
|
||||
"deploy the binary via scripts/build_paired.sh, copy "
|
||||
"verification/build-id/rune-tui to "
|
||||
"~/.local/share/rune/bin/rune-tui",
|
||||
],
|
||||
approval_ref="user:presentation spec 2026-10-21 + bedtime "
|
||||
"factory directive",
|
||||
contract_id="ADMIT-wave-presentation",
|
||||
project_store=store,
|
||||
project_id="rune",
|
||||
)
|
||||
print(json.dumps(env, indent=2, default=str)[:2400])
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
@@ -0,0 +1,174 @@
|
||||
{
|
||||
"checkpoints": [
|
||||
{
|
||||
"at": "2026-10-22T08:57:47Z",
|
||||
"evidence": "predicted-frontier",
|
||||
"note": "{\"level0_direct\": [], \"level1_obligations\": [], \"contracts\": [], \"level2_verification\": []}",
|
||||
"phase": "draft"
|
||||
},
|
||||
{
|
||||
"at": "2026-10-22T08:58:04Z",
|
||||
"evidence": "user:presentation spec 2026-10-21 + bedtime factory directive",
|
||||
"note": "",
|
||||
"phase": "approved"
|
||||
},
|
||||
{
|
||||
"at": "2026-10-22T08:58:21Z",
|
||||
"evidence": "builder:wave-presentation",
|
||||
"note": "",
|
||||
"phase": "building"
|
||||
}
|
||||
],
|
||||
"evidence_refs": [
|
||||
"contract-created:ADMIT-wave-presentation"
|
||||
],
|
||||
"ext": {
|
||||
"activation": {
|
||||
"activated": true,
|
||||
"builder": "wave-presentation",
|
||||
"evidence": [
|
||||
"affected surface known: ['tui/chatpane/', 'tui/tasks/']",
|
||||
"scoping words bind to known target: ['current']",
|
||||
"smallness markers: ['patch']"
|
||||
],
|
||||
"lifecycle": "bounded",
|
||||
"mode": "LOCAL_CHANGE",
|
||||
"note": "bounded governance via existing authority \u2014 no Project Scaffold bootstrap",
|
||||
"project_authority": "rune_internal",
|
||||
"target_project": "rune"
|
||||
},
|
||||
"affected_paths": [
|
||||
"scripts/admit_wave_presentation.py",
|
||||
"tui/chatpane/",
|
||||
"tui/cmd/rune-tui/",
|
||||
"tui/face/",
|
||||
"tui/lanes/",
|
||||
"tui/runtime/lib/",
|
||||
"tui/tasks/"
|
||||
],
|
||||
"affected_regions": [],
|
||||
"affected_ui_surfaces": [],
|
||||
"expected_runtime_effects": [
|
||||
"chat history scrolls with keyboard and wheel",
|
||||
"long answers grow one bubble per speech run with tables and lists breaking out; outlines carry the speaker colour; answers never break the bubble",
|
||||
"mouse drag highlights in panes and copies on release where the terminal allows",
|
||||
"the + affordance opens a centered window with the full current-turn processing; the activity mirrors in the tasks pane",
|
||||
"the bridge strip never disappears; its state word, colour and animation reflect the real dispatch (thinking/coding/planning/researching/idle)"
|
||||
],
|
||||
"predicted_frontier": {
|
||||
"change_kind": "implementation_change",
|
||||
"contextual_not_obligations": [],
|
||||
"contracts": [],
|
||||
"level0_direct": [],
|
||||
"level1_obligations": [],
|
||||
"level2_verification": [],
|
||||
"max_level": 2,
|
||||
"traversal_scope": "spine-structural-only"
|
||||
},
|
||||
"scope_provenance": {
|
||||
"caller_added": [],
|
||||
"generated_from_affected_surface": [
|
||||
"scripts/admit_wave_presentation.py",
|
||||
"tui/chatpane/",
|
||||
"tui/cmd/rune-tui/",
|
||||
"tui/face/",
|
||||
"tui/lanes/",
|
||||
"tui/runtime/lib/",
|
||||
"tui/tasks/"
|
||||
]
|
||||
},
|
||||
"task_ref": "wave-presentation",
|
||||
"unresolved_surfaces": [
|
||||
{
|
||||
"kind": "source_path",
|
||||
"reason": "no authority records this path as an entity (path remains file-scope only)",
|
||||
"surface": "scripts/admit_wave_presentation.py"
|
||||
},
|
||||
{
|
||||
"kind": "source_path",
|
||||
"reason": "no authority records this path as an entity (path remains file-scope only)",
|
||||
"surface": "tui/chatpane/"
|
||||
},
|
||||
{
|
||||
"kind": "source_path",
|
||||
"reason": "no authority records this path as an entity (path remains file-scope only)",
|
||||
"surface": "tui/cmd/rune-tui/"
|
||||
},
|
||||
{
|
||||
"kind": "source_path",
|
||||
"reason": "no authority records this path as an entity (path remains file-scope only)",
|
||||
"surface": "tui/face/"
|
||||
},
|
||||
{
|
||||
"kind": "source_path",
|
||||
"reason": "no authority records this path as an entity (path remains file-scope only)",
|
||||
"surface": "tui/lanes/"
|
||||
},
|
||||
{
|
||||
"kind": "source_path",
|
||||
"reason": "no authority records this path as an entity (path remains file-scope only)",
|
||||
"surface": "tui/runtime/lib/"
|
||||
},
|
||||
{
|
||||
"kind": "source_path",
|
||||
"reason": "no authority records this path as an entity (path remains file-scope only)",
|
||||
"surface": "tui/tasks/"
|
||||
}
|
||||
],
|
||||
"workflow_config_surfaces": []
|
||||
},
|
||||
"id": "contract:ADMIT-wave-presentation",
|
||||
"identities": {
|
||||
"acceptance": [
|
||||
"bounded repair verified: Build the owner-spec'd presentation wave: (1) rebuild the bridge strip into the activity pane \u2014 make it always visible, "
|
||||
],
|
||||
"affected_entities": [],
|
||||
"expected_consumers": [],
|
||||
"expected_new_entities": [
|
||||
"tests: red-first suites per part, -race green",
|
||||
"tui (mouse-drag selection per pane + OSC 52 auto-copy, direct emission, honest degrade)",
|
||||
"tui (the + centered processing window, one block per answer; tasks-pane mirror of the live activity)",
|
||||
"tui/chatpane (chat-history scrollback keyboard + wheel)",
|
||||
"tui/chatpane (growing speech bubbles: consecutive prose joins one bubble, left-aligned, speaker-coloured outline; tables break out full-width bordered; bullet/step rail presentation outside the bubble)",
|
||||
"tui/lanes (the activity pane: always-visible strip, dynamic real-signal state, per-activity colour + animation, runic marks with random rune colours, rainbow activity word, no timestamp)"
|
||||
],
|
||||
"gap_evidence": "smallness markers: ['patch']; scoping words bind to known target: ['current']; affected surface known: ['tui/chatpane/', 'tui/tasks/']",
|
||||
"migration_obligations": [],
|
||||
"need": "Build the owner-spec'd presentation wave: (1) rebuild the bridge strip into the activity pane \u2014 make it always visible, drive its state word (thinking/coding/planning/researching/idle) from real dispatch signals, colour and animate each activity differently, keep the runic marks with random rune colours, animate a rainbow activity word, remove the timestamp, add a clickable + that opens a centered window holding the full current-turn processing, and mirror the live activity in the tasks pane; (2) rebuild the answer rendering \u2014 grow one speech bubble per consecutive prose run, left-align text, colour bubble outlines by speaker, break tables out of the bubble full-width bordered, render bullet and step lists as rail presentations outside the bubble, and fix the large-answer bubble breakage; (3) add mouse-drag selection to every pane and auto-copy the selection via OSC 52 direct emission with honest degrade; (4) add chat-history scrollback with keyboard paging and mouse wheel",
|
||||
"next_action": "complete implementation, then verify",
|
||||
"non_goals": [],
|
||||
"origin": "worker",
|
||||
"regression_obligations": [],
|
||||
"requirement": "headless admission (classified: LOCAL_CHANGE)",
|
||||
"research_refs": [
|
||||
"Gitea #2530 #2532 #2535",
|
||||
"docs/openspec/changes/add-native-rune-tui/dichotomy-routing-table-DRAFT.md",
|
||||
"docs/openspec/changes/add-native-rune-tui/spec-activity-pane-and-presentation.md (the owner's spec)",
|
||||
"tui/chatpane/markdown.go (D47 block parse to build on)",
|
||||
"tui/tasks/answercodes.go (work stream pattern)"
|
||||
],
|
||||
"resolution": "",
|
||||
"rollback_ref": "git revert",
|
||||
"scope": [
|
||||
"scripts/admit_wave_presentation.py",
|
||||
"tui/chatpane/",
|
||||
"tui/cmd/rune-tui/",
|
||||
"tui/face/",
|
||||
"tui/lanes/",
|
||||
"tui/runtime/lib/",
|
||||
"tui/tasks/"
|
||||
],
|
||||
"toolchain": {},
|
||||
"verification_obligations": [
|
||||
"PTY proofs: rainbow word, + window open/close, bubble growth, table breakout, drag-select + copy bytes, scrollback",
|
||||
"cd tui && go test ./... -race green (documented pre-existing failures aside); go build + vet + gofmt clean",
|
||||
"deploy the binary via scripts/build_paired.sh, copy verification/build-id/rune-tui to ~/.local/share/rune/bin/rune-tui"
|
||||
]
|
||||
},
|
||||
"kind": "construction_contract",
|
||||
"maturity": "DECLARED",
|
||||
"observed_at": "2026-10-22T08:58:21Z",
|
||||
"phase": "building",
|
||||
"status": "open",
|
||||
"tags": []
|
||||
}
|
||||
Reference in new issue
Block a user