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 3: Make Now plan-aware end to end #10
Make active plans influence the shared recommendation result consumed by studyloop now, Web Today, recap, and MCP get_next_action without turning plan focus into a hard filter.
Status: engineering criteria met; the issue stays open on one owner-side item. Source: docs/architecture/plan-integration/receipts/issue-closeout-draft-2026-09-16.md, re-verified against main at a5b9f903 (2026-09-18). Legend as on #8.
T: test_now_plan_guidance.py::test_no_active_plans_json_byte_identical_to_golden; golden tests/golden/now_plan_no_active.json sha256 ec451ce8… unchanged through every follow-on item (verify golden-no-active-sha). A plan that cannot be read adds a warnings entry — documented, not byte-identical by design (S: active-learning-decisions, rule 1)
Matching due work and synthesized next-milestone actions carry explicit plan and milestone references
MCP get_next_action gains interleave parity with CLI and Web
yes
T: test_mcp_next_action.py (10; C: c30330a0)
DoD. No surface reads plans independently (the AST guard; ::test_guidance_read_once_with_no_checkpoint_history_calls); docs describe the behaviour with its eligibility qualifications (docs/study-plans.md "Plan-aware now", docs/web-ui-guide.md, docs/cli-reference.md; pinned by T: test_docs_plan_integration_contract.py, 25).
The D-16 human rubric (R: receipts/now-rubric-2026-09-16.md), scored by the owner:
rows 1, 2, 5 and the primary of row 4: yes / verified (2026-09-16);
row 4's completion action: no as phrased (2026-09-16) → redesigned as evidence-based, consensual completion (follow-on item 4 / D-G, plan close <id>, C: 82293293, review 6 GATE: ACCEPT); re-run as row 4b: yes / yes (owner, 2026-09-18);
row 3: no (2026-09-16) — a live-struggle repair task has no energy demand of its own, so recommending hands-on repair on a low-energy day is the wrong call. This is follow-on item 5 (D-F): per-item energy demand + a body-doubling floor, its own council round, then row 3b for the owner to score.
Open:#10 closes when item 5 has landed and row 3b is scored. Everything else on this issue is on main (#20, #22).
Closed: completed. The one open item from the 2026-09-18 status comment — "#10 closes when item 5 has landed and row 3b is scored" — is done. Both are on main at 96806feb (owner pushed main 2026-09-21; PR #28 merged as a fast-forward, CI 15/15 on that head). Legend as on #8.
Item 5 (D-F) landed — per-item energy demand for repair and the body-doubling floor: RED C: ef319a7b / GREEN C: 326abcf9; council review 7 (docs/architecture/plan-integration/council/review-7-arbitration-2026-09-19.md, three seats) corrections landed one commit each. T: packages/studyloop/tests/test_now_plan_guidance.py, T: packages/studyloop/tests/test_learning_decision.py.
Row 3b scored by the owner (interactive walkthrough, 2026-09-20): (a)–(e) yes, (f) resolved by a fix, each with the owner's own line recorded in the cell. R: docs/architecture/plan-integration/receipts/now-rubric-2026-09-16.md row 3b; the council decision brief (R: receipts/rubric-3b-decision-brief-2026-09-20.md) is provenance for the verdicts, not a substitute.
Three fixes surfaced by the (c) yes, each RED/GREEN before the row was committed: the low-demand teach-back door names the micro form its demand class stands on, and a learning row's reason reads as a gentle review rather than "repair now" (C: 0760254d → f2cb572f); the teach-back protocol carries the low-energy guided-explanation fallback the yes was conditional on (C: c7cc1b0f → 214df377, pinned by test_teach_back_protocol_carries_the_low_energy_guided_explanation_fallback).
One real defect surfaced by (f): the due-progress collector emitted every live struggle as an undeferred hands-on repair, so the (a)/(d)/(e) screens the owner scored had never been emitted against a real database. Fixed C: 8f851d3a → fb63fb6b (design §5 decision 10); every reading re-emitted through both collectors; (c) confirmed by the owner on the resulting screen (C: a4503a48).
Acceptance criterion 1 still holds through all of it: the no-plan golden tests/golden/now_plan_no_active.json is byte-identical, sha256 ec451ce8….
Row 3's original "no" (2026-09-16) stands as the finding; its remedy is item 5. The walkthrough's notes became 0.6.0 follow-ons rather than blockers: #30 (the body double proposes one tiny, concrete first move) and #31 (the low-energy day is a ladder).
Activity
feat(session): REST→ACP bridge for /session/start (Phase 2 PR-B)
docs(spec): Phase 2 deltas — idempotent milestone set, confirmed dele…
test(planning): RED — review-2 G1: guidance names readiness blockers …
fix(planning): review-2 G1 — ActivePlanGuidance carries the plan's Re…
fix(planning): review-2 G2 — one effective date for the whole guidanc…
docs(plan-integration): council review 2 arbitration — GATE: ACCEPT
test(now): T3.1 — golden of the no-active-plan `now` emit, captured pre-
test(now): RED — T3.2 nine ranking rules of the plan-aware `now`
feat(mcp): six study-plan tools as thin adapters over the seam (T3.7)
feat(now): plan-aware ranking per design §3 — T3.3 GREEN
docs(spec): #10 plan-aware now — delta spec, D-16 rubric receipt, tas…
docs(council): brief for code review 3 — Phase 3 (#10 ∥ #11 ∥ #13a) at …
test(cli): RED — 'studyloop recap today' panel shows the engine's pla…
docs(spec): review-3 corrections — browse order, empty plan_id, rende…
test(mcp): RED — get_next_action accepts interleave, validated, forwa…
docs(archify): plan-integration diagram shows the final structure — n…
docs(closeout): draft the #7–#15 close-out — every criterion mapped t…
docs(closeout): refresh the #7–#15 close-out DRAFT after review 5, th…
NetDevAutomate commentedon Sep 18, 2026
Status: engineering criteria met; the issue stays open on one owner-side item. Source:
docs/architecture/plan-integration/receipts/issue-closeout-draft-2026-09-16.md, re-verified againstmainata5b9f903(2026-09-18). Legend as on #8.T: test_now_plan_guidance.py::test_no_active_plans_json_byte_identical_to_golden; goldentests/golden/now_plan_no_active.jsonsha256ec451ce8…unchanged through every follow-on item (verifygolden-no-active-sha). A plan that cannot be read adds awarningsentry — documented, not byte-identical by design (S: active-learning-decisions, rule 1)::test_matching_due_concept_outranks_unrelated_same_urgency,::test_synthesizes_milestone_when_no_candidate_represents_it; review-3 F1: refs on deferred/unready plans carryNone(C: 64dc09f7)::test_unrelated_more_urgent_due_outranks_new_milestone,::test_weak_due_still_beats_overdue_synthesised_milestone::test_one_action_keeps_every_matching_plan_ref_ordered,::test_milestone_without_concepts_does_not_substring_match,::test_fully_checked_active_plan_emits_completion_not_candidate,::test_energy_below_floor_defers_new_milestone_keeps_repair,::test_guidance_failure_warns_and_logs_without_failing_now;T: test_plan_application_mutations.py::test_malformed_plan_browse_matches_store_list::test_preserves_one_plan_backed_action_when_energy_allows,::test_plan_backed_guarantee_respects_time_limit::test_api_now_carries_plan_guidance_end_to_end,::test_cli_now_renders_plan_relevance_and_energy_deferral,::test_recap_shows_plan_context_without_reranking,::test_cli_recap_rich_panel_shows_engine_plan_context;tests/js/today-panel-plan.test.js; UAT cellnow_with_active_plan(R: receipts/uat-plan-journeys-a69867bf.redacted.json)get_next_actiongains interleave parity with CLI and WebT: test_mcp_next_action.py(10;C: c30330a0)DoD. No surface reads plans independently (the AST guard;
::test_guidance_read_once_with_no_checkpoint_history_calls); docs describe the behaviour with its eligibility qualifications (docs/study-plans.md"Plan-aware now",docs/web-ui-guide.md,docs/cli-reference.md; pinned byT: test_docs_plan_integration_contract.py, 25).The D-16 human rubric (
R: receipts/now-rubric-2026-09-16.md), scored by the owner:plan close <id>,C: 82293293, review 6GATE: ACCEPT); re-run as row 4b: yes / yes (owner, 2026-09-18);Open: #10 closes when item 5 has landed and row 3b is scored. Everything else on this issue is on
main(#20, #22).NetDevAutomate commentedon Sep 21, 2026
Closed: completed. The one open item from the 2026-09-18 status comment — "#10 closes when item 5 has landed and row 3b is scored" — is done. Both are on
mainat96806feb(owner pushedmain2026-09-21; PR #28 merged as a fast-forward, CI 15/15 on that head). Legend as on #8.C: ef319a7b/ GREENC: 326abcf9; council review 7 (docs/architecture/plan-integration/council/review-7-arbitration-2026-09-19.md, three seats) corrections landed one commit each.T: packages/studyloop/tests/test_now_plan_guidance.py,T: packages/studyloop/tests/test_learning_decision.py.R: docs/architecture/plan-integration/receipts/now-rubric-2026-09-16.mdrow 3b; the council decision brief (R: receipts/rubric-3b-decision-brief-2026-09-20.md) is provenance for the verdicts, not a substitute.microform its demand class stands on, and alearningrow's reason reads as a gentle review rather than "repair now" (C: 0760254d→f2cb572f); the teach-back protocol carries the low-energy guided-explanation fallback the yes was conditional on (C: c7cc1b0f→214df377, pinned bytest_teach_back_protocol_carries_the_low_energy_guided_explanation_fallback).C: 8f851d3a→fb63fb6b(design §5 decision 10); every reading re-emitted through both collectors; (c) confirmed by the owner on the resulting screen (C: a4503a48).tests/golden/now_plan_no_active.jsonis byte-identical, sha256ec451ce8….Row 3's original "no" (2026-09-16) stands as the finding; its remedy is item 5. The walkthrough's notes became 0.6.0 follow-ons rather than blockers: #30 (the body double proposes one tiny, concrete first move) and #31 (the low-energy day is a ladder).