Skip to content

feat(planning): label a superseded-by-plan row on the interview page #9722

Description

@kyle-sexton

Parent

Refs #5796

Depends on

  • none: on the frontier now

Outcome

When /planning:plan displaced an earlier answer, the page says so (gap G5): a question imported from a
superseded-by-plan ledger row (meta.seededFrom) shows "/planning:plan changed your answer. Was: X. Plan
proposes: Y. Reconfirm the proposal or keep yours.", with buttons mapping to accept and the alternative was.

Key interfaces

  • Interview page: plugins/planning/surface/index.html; page server: plugins/planning/surface/server.py
    (record(), derive_states); round CLI: plugins/planning/surface/round.py behind round.sh;
    exporters: plugins/planning/surface/exporters.py.
  • The interview skill's surface contract, plugins/planning/skills/interview/context/surface.md, documents
    every new op, field, setting and refusal.

Done when

  • A page test on an imported superseded-by-plan fixture shows the banner with both values.
  • A page test clicks each button and checks the event holds accept or the was alternative.
  • scripts/run-test-file.sh plugins/planning/surface/test_server.py exits 0.
  • scripts/run-test-file.sh plugins/planning/surface/test_round.py exits 0.
  • bash plugins/planning/surface/surface.test.sh exits 0, so a data dir without the new fields still loads, renders and exports.
  • scripts/check-changelog-fragments.sh --check-required origin/main exits 0.

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.priority: mediumReal value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.

    Fields

    No fields configured for Feature.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions