Skip to content

feat(plan): the Plan surface — statements + assumptions across the seam#225

Merged
jfrench9 merged 2 commits into
mainfrom
feature/plan-surface
Jul 23, 2026
Merged

feat(plan): the Plan surface — statements + assumptions across the seam#225
jfrench9 merged 2 commits into
mainfrom
feature/plan-surface

Conversation

@jfrench9

@jfrench9 jfrench9 commented Jul 23, 2026

Copy link
Copy Markdown
Member

Summary

The F-4 Plan surface (fpa-operating-plan.md §10.3 #2): a new /plan section rendering the workbook's FOP tab — the selected scenario's assumptions (lever rows) stacked above the income statement, balance sheet, and cash flow in ONE grid, sharing a master set of monthly columns that cross the actuals/forecast seam.

How it composes

  • Every statement family reads in series mode (getInformationBlock(…, { scenarioId, series: true }) — the robosystems #921 statement-series projection); the scenario's own envelope supplies the assumptions section.
  • planModel.ts unions all envelopes' period ends into master columns and remaps each section's values into register (the lever grid spans only the horizon — uncovered months render as —). The seam rides the server's machine-readable periods[].forecast flag: tinted forecast columns, a seam border on the first, an 'f' marker in headers.
  • Scenario-centric: the first forecast block is the default selection; "Actuals" strips the forward columns; ?scenario= makes a view shareable. Sticky row-label column, trailing-window control (All/12M/6M/3M), CSV export of the composed grid.

Explorer follow-through

Statements rejoin the scenario picker (the promise in the F-1-era comment): a statement + scenario read now renders the full monthly series grid instead of a single sparse month. Metric reads unchanged.

Sequencing

@robosystems/client 0.5.8 published and bumped (^0.5.8 + lockfile committed; full gate re-verified against the registry package — one deduped copy in the tree). This PR is mergeable now, but client 0.5.8 requires the robosystems #921 schema at runtime — its GraphQL documents select periods.forecast, which an older backend rejects at validation (breaking every block list/read, not just series). Deploy #920 + #921 before (or with) releasing this app version — and hold other apps off 0.5.8 until the backend deploys.

Gate: npm run test:all green (191 tests) + next build (the /plan route compiles).

🤖 Generated with Claude Code

jfrench9 added 2 commits July 23, 2026 14:05
New /plan section (F-4): the operating plan as one grid — the selected
scenario's assumptions (lever rows) stacked above the income statement,
balance sheet, and cash flow, sharing a master set of monthly columns
that cross the actuals/forecast seam. Every statement reads in series
mode (series: true); the seam rides the server's machine-readable
periods[].forecast flag (tinted forecast columns, seam border, 'f'
marker). Scenario-centric: the first forecast block is the default,
'Actuals' strips the forward columns, ?scenario= makes a view
shareable. Sticky row labels, trailing-window control, CSV export of
the composed grid.

Explorer: statements rejoin the scenario picker — a statement + scenario
read now renders the full monthly series grid (the promised F-4
follow-through); metric reads are unchanged (always the full series).

Requires @robosystems/client >= 0.5.8 (the series option + forecast
period field); version bump lands once it publishes.
…eam flag

Re-verified against the registry package (one deduped copy in the
tree): full gate green, /plan builds.
@jfrench9
jfrench9 merged commit 11ac817 into main Jul 23, 2026
3 checks passed
@jfrench9
jfrench9 deleted the feature/plan-surface branch July 23, 2026 19:40
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