Skip to content

Plan integration 3: Make Now plan-aware end to end #10

Closed

Description

@NetDevAutomate

Parent

What to build

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.

Acceptance criteria

  • No-active-plan recommendations remain backward-compatible.
  • Matching due work and synthesized next-milestone actions carry explicit plan and milestone references.
  • Urgent reviews and fresh struggles can still outrank new milestone work.
  • Multiple active plans, exact normalized matching, completed plans, malformed plans, and low-energy deferral are deterministic.
  • At least one eligible plan-backed action remains among primary and alternates when constraints permit it.
  • CLI, Web Today, recap, and MCP consume one additive recommendation contract.
  • MCP get_next_action gains interleave parity with CLI and Web.

Blocked by

Definition of Done

  • Recommendation, rendering, Web delegation, recap, and MCP parity tests pass.
  • JSON and human-readable output explain plan relevance and energy deferral.
  • No surface reads Study Plans independently of the shared recommendation engine.
  • Study Plans, Now, Today, and MCP documentation describe the new behavior accurately.
  • The complete focused plan/focus/Web/MCP regression set is green.

Activity

  1. added
    ready-for-agentImplementation-ready specification with settled requirements and test seams
    on Sep 4, 2026
  2. NetDevAutomate commented on Sep 18, 2026

    @NetDevAutomate
    OwnerAuthor

    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.

    Acceptance criterion Met Evidence
    No-active-plan recommendations remain backward-compatible yes, for the frozen empty/draft world 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 yes ::test_matching_due_concept_outranks_unrelated_same_urgency, ::test_synthesizes_milestone_when_no_candidate_represents_it; review-3 F1: refs on deferred/unready plans carry None (C: 64dc09f7)
    Urgent reviews and fresh struggles can still outrank new milestone work yes ::test_unrelated_more_urgent_due_outranks_new_milestone, ::test_weak_due_still_beats_overdue_synthesised_milestone
    Multiple active plans, exact normalized matching, completed plans, malformed plans, and low-energy deferral are deterministic yes ::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
    At least one eligible plan-backed action remains among primary and alternates when constraints permit it yes ::test_preserves_one_plan_backed_action_when_energy_allows, ::test_plan_backed_guarantee_respects_time_limit
    CLI, Web Today, recap, and MCP consume one additive recommendation contract yes ::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 cell now_with_active_plan (R: receipts/uat-plan-journeys-a69867bf.redacted.json)
    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).

  3. added this to the 0.5.0 milestone on Sep 20, 2026
  4. NetDevAutomate commented on Sep 21, 2026

    @NetDevAutomate
    OwnerAuthor

    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).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    ready-for-agentImplementation-ready specification with settled requirements and test seams

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions