Repository navigation
docs(fr-044): Plan 3 — generated read routes, typed rows and docs pages for reports - #400
Merged
Merged
Conversation
…es for reports The implementation plan after Plan 2 (report view lowering and reads in every port). It covers a generated list route for a view-backed object.report in five ports, the api-contract report/ sub-corpus, the TypeScript, Java and Python generators no longer skipping reports, and model and API pages for reports in meta docs. A report is served as a keyless read-only projection is served today: each port hands the read model it already has to its existing read-only generators. The contract is stated as tables the ports copy: which reports are served, the REST surface, what may be filtered and sorted, the wire encoding of each derived subtype, what each port generates, the corpus (model, seed, twelve scenarios in full) and the docs pages. The corpus model was loaded with the real loader and its three views and every query behind an expected row were run on Postgres 16. Two throwaway spikes fed the read model through every TypeScript and Python generator, and what they emitted and what broke is what the tasks are written from. HTTP bodies were not executed: no port serves a report yet. Cited paths and names were read in the tree; what could not be confirmed is marked UNVERIFIED and listed. Seven questions for the maintainer are at the end. Found while verifying, and folded into the tasks: TypeScript and Python mount item routes for a keyless projection against the documented contract, and TypeScript types a decimal in a view read schema as a number while the value is a string.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this is
The implementation plan for FR-044 Plan 3, the plan after Plan 2 (report view lowering and reads in every port, #399). One file, no code:
docs/superpowers/plans/2026-10-04-fr-044-plan-3-report-read-routes.mdWhat Plan 3 covers
object.report, in five ports:GETwith filter, sort and paging on the derived fields,405onPOST, no/{id}route.report/sub-corpus (model, seed, twelve scenarios, given in full), run on the generated lane of every port.meta docs.The approach: a report is served the way a keyless read-only projection is served today. Each port hands the read model it already has (Plan 2) to its existing read-only generators. The lowering is not edited.
How it was verified
e2456aa23. What could not be confirmed is marked UNVERIFIED and listed in one section.Found while verifying
These are folded into the tasks and raised as open questions, because each reaches beyond reports:
/{id}routes for a keyless projection, against the documented contract. C#, Java and Kotlin follow it.number, while the value is a string.@filterableand the allowlists come out empty unless the read model marks them.Open questions for the maintainer
Seven, at the end of the plan, each with the plan's assumed default: what may be filtered and sorted, the route segment, the
/{id}answer, keyless projections in TypeScript and Python, decimals, the typed client, and two small asymmetries.Not in this plan
Plan 4 (Cube exporter), Plan 5 (
reportinglibrary), #395, #222, #8, #393.