Skip to content

feat(plan): add plain-language markdown reports - #155

Merged
2000game merged 2 commits into
eqrm:mainfrom
bwl21:feat/144-markdown-plan-report
Aug 26, 2026
Merged

feat(plan): add plain-language markdown reports#155
2000game merged 2 commits into
eqrm:mainfrom
bwl21:feat/144-markdown-plan-report

Conversation

@bwl21

@bwl21 bwl21 commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

Summary

  • add ct plan --format markdown as a plain-language projection of the canonical plan result
  • allow repeated --format values so text, JSON, and Markdown can be produced by one plan computation
  • add --output-base <path> with deterministic .txt, .json, and .md sidecar names
  • keep --json backward compatible and reject conflicting output selections clearly
  • provide deterministic German and English Markdown rendering with a technical appendix and safe fallbacks

Architecture

Terminal, JSON, and Markdown output all consume the same structured plan. The Markdown renderer does not invoke the CLI as a subprocess, parse terminal text, contact ChurchTools, or recalculate actions.

Closes #144.

Verification

  • 1031 tests passed, 5 skipped
  • typecheck
  • lint
  • build
  • tracked-file Prettier check
  • handbook staleness check
  • focused Markdown and environment command tests: 13 passed

bwl21 and others added 2 commits August 26, 2026 14:37
…types

Review of eqrm#155 found three content paths where the Markdown report dropped or
garbled information it claims to show:

- a group *update* rendered a heading and nothing else, because the change
  table was suppressed for every group while the overview only renders for
  creates. The table is now suppressed only when an overview was actually
  rendered.
- a created group-member-field on an existing group was filtered out of the
  creates and never picked up by the create-only overview, so it appeared
  nowhere but the technical appendix. `memberFieldsFor` now only absorbs
  fields of a group that is itself being created.
- a `groupTypeId` pending ref (the bootstrap case) rendered as
  `Gruppentyp: unbekannt (#[object Object])`. It now resolves to the pending
  group type's name.

Claude-Session: https://claude.ai/code/session_01RDZeavzUpPyvQp3EYdEDbR
@2000game
2000game merged commit 8c67dba into eqrm:main Aug 26, 2026
3 checks passed
2000game added a commit to bwl21/ct-cli that referenced this pull request Aug 26, 2026
Resolves the overlap with the Markdown plan report (eqrm#155), which landed on main
while this branch was open:

- src/commands/plan.ts now drives every projection (text/JSON/Markdown,
  --output-base, --locale) off the single `runPlan` application operation
  instead of re-planning inline.
- The plan operation carries `buildWarnings` so the Markdown report can include
  the registry/portability warnings the builder writes to stderr — a report file
  is not a terminal, so it has to be handed them explicitly.
- Handbuch source lists follow `adopt-group.ts` into src/application/operations,
  and both pages are re-signed.

Claude-Session: https://claude.ai/code/session_01RDZeavzUpPyvQp3EYdEDbR
@bwl21
bwl21 deleted the feat/144-markdown-plan-report branch August 29, 2026 08:32
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.

feat(plan): add a plain-language Markdown report

2 participants