Skip to content

feat(pi-planning): self-contained PI planning / overview view + dependency edges#58

Open
jurby wants to merge 2 commits into
mainfrom
feat/pi-planning-view
Open

feat(pi-planning): self-contained PI planning / overview view + dependency edges#58
jurby wants to merge 2 commits into
mainfrom
feat/pi-planning-view

Conversation

@jurby
Copy link
Copy Markdown
Contributor

@jurby jurby commented Jun 5, 2026

What

Adds a self-contained, read-only PI planning / overview view to the EDPA plugin — a single portable .html (program board, PI objectives, ROAM, portfolio, WSJF, capacity) that runs natively on any machine with the EDPA Python engine: no server, no Node, no network. Much broader than /edpa:reports, and complementary (reports = backward audit, this = forward program state).

How (Option B — bake + inject)

The React app in tools/pi-planning is built once via vite-plugin-singlefile into a prebuilt bundle (plugin/edpa/assets/pi-bundle.html). pi_planning.py reads .edpa/, builds the versioned window.__EDPA__ snapshot, and injects it into the bundle → .edpa/reports/pi-<PI>/pi-<PI>.html. The HTML is a read-only projection: mutations go through the edpa_* MCP write-tools + git, then re-render (unidirectional / CQRS).

Surface

  • generator plugin/edpa/scripts/pi_planning.pygenerate_pi_board() is the single source for both CLI and MCP
  • MCP tool edpa_pi_board(pi?) → generates and returns the path
  • command /edpa:pi-planning [PI] [--open]
  • contract tools/pi-planning/src/types/snapshot.ts (EDPA_SNAPSHOT_SCHEMA = 1) — single source; api.ts reads it (writes reject); main.tsx refuses an unknown schema with a visible "regenerate" banner
  • distribution project_setup.vendor_engine now also vendors assets/ (the bundle)
  • dependencies (Phase 0) — MCP edpa_item_link_dep(item_id, depends_on_id, action) with existence + self-loop + cycle validation; depends_on accepted by the validator; the ProgramBoard already renders the arrows

Tests

614 tests pass (full non-E2E suite); MCP drift-guards updated to 17 tools; 6 new dependency tests.

Not in scope (follow-ups)

  • Not yet versioned/released (CHANGELOG, version bump, docs CZ+EN, web deploy, GH release are separate)
  • Remaining Phase-0: roam_status transition, objectives-as-first-class write-tools
  • Google Fonts is the only external request (inline for true offline)

🤖 Generated with Claude Code

jurby and others added 2 commits June 4, 2026 16:39
Add a script-first PI planning / overview view that renders the whole SAFe
program picture (program board, PI objectives, ROAM, portfolio, WSJF,
capacity) as a single self-contained, read-only HTML — no server, no Node,
no network on the target machine. Much broader than /edpa:reports and
complementary to it (reports = backward audit, this = forward program state).

Architecture (Option B — bake + inject): the React app in tools/pi-planning
is built once via vite-plugin-singlefile into a prebuilt bundle
(plugin/edpa/assets/pi-bundle.html). pi_planning.py reads .edpa/, builds the
versioned window.__EDPA__ snapshot, and injects it into the bundle placeholder
-> .edpa/reports/pi-<PI>/pi-<PI>.html. The HTML is a read-only projection:
mutations go through the edpa_* MCP write-tools + git, then re-render.

- generator: plugin/edpa/scripts/pi_planning.py (generate_pi_board() is the
  single source for both the CLI and the MCP tool)
- MCP tool: edpa_pi_board(pi?) generates the board and returns its path
- command: /edpa:pi-planning [PI] [--open]
- contract: tools/pi-planning/src/types/snapshot.ts (EDPA_SNAPSHOT_SCHEMA = 1)
  is the single source; api.ts resolves all reads from it and rejects writes;
  main.tsx refuses an unknown schema with a visible "regenerate" banner
- distribution: project_setup.vendor_engine now also vendors assets/ (the
  bundle) so it runs with only Python on the target machine
- generated board gitignored; MCP drift-guard tests updated for the new tool

Verified on the repo's own .edpa/ (43 items, 9 people, 2 PIs, objectives):
snapshot round-trips, the bundle renders offline. 106 tests pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ram board

Phase-0 dependency support so the PI planning program board can draw its
dependency arrows.

- MCP tool edpa_item_link_dep(item_id, depends_on_id, action=add|remove):
  validates both items exist, refuses a self-loop, and refuses an edge that
  would create a cycle (_dep_would_cycle DFS over the depends_on graph)
- depends_on accepted by validate_syntax (Feature/Story/Epic/Defect optional)
- 6 new write-tool tests; MCP drift-guards updated (17 tools)

depends_on flows through the snapshot verbatim and the ProgramBoard already
renders it — set a dependency, regenerate, the arrow appears. 614 tests pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant