You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Plan integration 7: Add the Web architect journey #14
Status: met. Two rows the draft of 2026-09-16 left open — the brain-dump handoff and the abandon-mid-flight test — were closed by follow-on item 2 (owner decision D-B) and by the owner's abandonment-contract decision of 2026-09-18. Source: docs/architecture/plan-integration/receipts/issue-closeout-draft-2026-09-16.md, re-verified against main at a5b9f903. Legend as on #8; test_web_plan_architect_journey.py is e2e-marked (12 browser tests today).
Acceptance criterion
Met
Evidence
The Plans view exposes a clear Plan with architect action
yes
T: test_web_plan_architect_journey.py::test_plan_with_architect_action_posts_purpose_planning_and_navigates_to_console (Playwright, real server, fake agent; C: 7ad39941)
Successful launch navigates to the existing live console and labels planning purpose correctly
The architect receives interview questions, evidence seeds, existing-plan summaries, and optional brain dump
yes
::test_brief_structure_present_not_wording; ::test_brain_dump_reaches_the_architect_persona (browser: the textarea's text is posted as brain_dump, arrives in the persona as ### Learner's brain dump, quoted line by line, never the topic, absent from GET /api/session/state); T: test_session_start_purpose.py::TestBrainDump (contained section, paragraphs kept, clipped with a marker, over-limit 422, focus start ignores it); tests/js/plan-architect-launch.test.js. The manual form's dump is still never decomposed by StudyLoop (docs/study-plans.md, beside the boundary list)
Refresh and reconnect preserve planning-purpose context
yes
the visible label after reload: ::test_console_is_labelled_planning_and_label_survives_reconnect; the persisted purpose after reload: UAT architect_launch asserts GET /api/session/state.purpose post-reload
The manual create/edit/checkpoint interface remains fully functional
yes for create and checkpoints; edit is not a Web UI control
::test_manual_new_plan_form_still_works; T: test_web_plans.py (27, protected) for the routes. The Web UI's plan view offers create, activate, milestone checkboxes and preview/record checkpoints; it has no edit-fields control — field revision is the Web API's PATCH (which since 2026-09-17 includes the mission) and the MCP update_study_plan. The checkpoint buttons are covered at the route level, not in a browser
Exactly one addressed console and WebSocket handle the planning session
yes
::test_one_console_one_websocket; tests/js/plan-architect-launch.test.js (one POST, one study-session-start, init() twice still one listener)
DoD. Browser tests cover launch, fallback, conflict, reconnect, structured errors, abandonment and the pending-launch contract: ::test_abandoning_a_launch_mid_flight_leaves_no_session_and_no_plan ends the session through the console's End control as soon as the 201 lands (no live slot, no plan, no label, one start event, at most one WebSocket), and ::test_leaving_before_the_launch_lands_leaves_a_session_like_any_other (owner decision 2026-09-18, option b) holds the start POST while the learner navigates away, releases it, and proves the session exists, reattaches on return and is released by End — leaving never destroys, End abandons, there is no cancel for a pending launch (S: web-ui, design §2 rewritten with the retraction). The planning click's wait for the picker's options is bounded at 8 s (review-6 F3, C: 97efcc4a). Accessibility: aria-busy, aria-describedby, role="status" aria-live="polite", screen-reader label on the subject input, visible label on the brain-dump textarea (not audited with a screen reader). The one-question-at-a-time protocol is persona-text-verified by owner decision D-B: every journey uses the fake agent, which proves delivery of the brief, not model adherence.
Landed via #20 (2026-09-17) and #22 (2026-09-18). Closing.
Activity
docs(council): brief for code review 3 — Phase 3 (#10 ∥ #11 ∥ #13a) at …
test(web): RED — the 'Plan with architect' journey from the Plans view (
feat(web): 'Plan with architect' beside New plan — one start path, on…
docs(spec): web-ui delta 'Plan with architect journey'; study-plans.m…
test(verify): RED — the plan-integration verification script's regist…
feat(verify): scripts/verify/plan_integration.py — the receipt is the…
docs(archify): plan-integration diagram shows the final structure — n…
docs(closeout): draft the #7–#15 close-out — every criterion mapped t…
test(e2e,uat): the plan-journey worlds remove themselves (#15 DoD "no…
docs(closeout): refresh the #7–#15 close-out DRAFT after review 5, th…
feat(web): the architect door carries the learner's brain dump into t…
NetDevAutomate commentedon Sep 18, 2026
Status: met. Two rows the draft of 2026-09-16 left open — the brain-dump handoff and the abandon-mid-flight test — were closed by follow-on item 2 (owner decision D-B) and by the owner's abandonment-contract decision of 2026-09-18. Source:
docs/architecture/plan-integration/receipts/issue-closeout-draft-2026-09-16.md, re-verified againstmainata5b9f903. Legend as on #8;test_web_plan_architect_journey.pyis e2e-marked (12 browser tests today).T: test_web_plan_architect_journey.py::test_plan_with_architect_action_posts_purpose_planning_and_navigates_to_console(Playwright, real server, fake agent;C: 7ad39941)::test_console_is_labelled_planning_and_label_survives_reconnect; UATarchitect_launchlabel "Planning session — study-plan architect"::test_brief_structure_present_not_wording;::test_brain_dump_reaches_the_architect_persona(browser: the textarea's text is posted asbrain_dump, arrives in the persona as### Learner's brain dump, quoted line by line, never the topic, absent fromGET /api/session/state);T: test_session_start_purpose.py::TestBrainDump(contained section, paragraphs kept, clipped with a marker, over-limit 422, focus start ignores it);tests/js/plan-architect-launch.test.js. The manual form's dump is still never decomposed by StudyLoop (docs/study-plans.md, beside the boundary list)::test_console_is_labelled_planning_and_label_survives_reconnect; the persisted purpose after reload: UATarchitect_launchassertsGET /api/session/state.purposepost-reload::test_manual_new_plan_form_still_works;T: test_web_plans.py(27, protected) for the routes. The Web UI's plan view offers create, activate, milestone checkboxes and preview/record checkpoints; it has no edit-fields control — field revision is the Web API'sPATCH(which since 2026-09-17 includes the mission) and the MCPupdate_study_plan. The checkpoint buttons are covered at the route level, not in a browser::test_one_console_one_websocket;tests/js/plan-architect-launch.test.js(one POST, onestudy-session-start,init()twice still one listener)DoD. Browser tests cover launch, fallback, conflict, reconnect, structured errors, abandonment and the pending-launch contract:
::test_abandoning_a_launch_mid_flight_leaves_no_session_and_no_planends the session through the console's End control as soon as the201lands (no live slot, no plan, no label, one start event, at most one WebSocket), and::test_leaving_before_the_launch_lands_leaves_a_session_like_any_other(owner decision 2026-09-18, option b) holds the start POST while the learner navigates away, releases it, and proves the session exists, reattaches on return and is released by End — leaving never destroys, End abandons, there is no cancel for a pending launch (S: web-ui, design §2 rewritten with the retraction). The planning click's wait for the picker's options is bounded at 8 s (review-6 F3,C: 97efcc4a). Accessibility:aria-busy,aria-describedby,role="status" aria-live="polite", screen-reader label on the subject input, visible label on the brain-dump textarea (not audited with a screen reader). The one-question-at-a-time protocol is persona-text-verified by owner decision D-B: every journey uses the fake agent, which proves delivery of the brief, not model adherence.Landed via #20 (2026-09-17) and #22 (2026-09-18). Closing.
fix(web): the session timer's init() runs once per page load