docs(examples): purchase info-records report (SAP Fiori + Excel) - #487
Merged
HappyDevs1 merged 1 commit intoAug 18, 2026
Merged
Conversation
HappyDevs1
marked this pull request as ready for review
August 18, 2026 09:08
P-190-040-080-2 from the UAT test-case PDF: run and export a purchasing
info records report in Fiori, then review the export in Excel — unlike
manage-info-records.flow.yaml (P-190-040-070-2, editing one record),
this case never stays inside the browser. First example exercising the
full stack this PR series built: a captured launch command (`EXCEL.EXE
${captured.pir_export}`), a pinned browser download (`Wait until the
download completes as`), and the out-of-band spreadsheet read
(`assert_spreadsheet`).
Drafted with `flowproof author-from-doc` against the source PDF, then
hand-extended with the `excel:` surface and the two new step forms.
Two steps are left as flagged TODOs rather than guessed: the source
PDF's own tester hit the same ambiguity live ("three near-identical
tile options, no clear single target given" and "extract... no
specific element identified") — resolving them needs the live app,
which is `flowproof record`'s job, not a guess made from a document.
Also documents the `Wait until the download completes as` step and the
`${captured.x}`-in-a-launch-command capability in docs/authoring.md,
alongside the multi-surface section — both landed in earlier PRs in
this stack without their prose, deferred here to pair with the flow
that actually demonstrates them.
Not yet run against a live SAP system (no Windows/SAP/Excel access in
this environment) — validated by `FlowSpec::parse` accepting the whole
file and a live `flowproof record` attempt reaching actual browser
navigation before failing on a placeholder domain, proving every step
form resolves. The unattended CI recording job against the real
self-hosted runner is a separate PR (touches .github/workflows/, which
CLAUDE.md reserves for a human to open).
HappyDevs1
force-pushed
the
feat/purchase-info-records-example
branch
from
August 18, 2026 09:09
450472f to
1da37b0
Compare
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.
Summary
Stacked on #486 (Slice 3c: grammar/record/replay wiring) — last PR in this stack.
examples/fiori/purchase-info-records-report.flow.yaml: P-190-040-080-2 from the UAT test-case PDF. Unlikemanage-info-records.flow.yaml(P-190-040-070-2, editing one record), this case never stays inside the browser — it exports to a spreadsheet and finishes the assertion in Excel. First example exercising the full stack this PR series built: a captured launch command (EXCEL.EXE ${captured.pir_export}), a pinned browser download (Wait until the download completes as), and the out-of-band spreadsheet read (assert_spreadsheet).flowproof author-from-docagainst the source PDF, then hand-extended with theexcel:surface and the two new step forms. Two steps are left as flagged TODOs rather than guessed — the source PDF's own tester hit the same ambiguity live ("three near-identical tile options, no clear single target given" and "extract... no specific element identified"); resolving them needs the live app, which isflowproof record's job, not a guess made from a document.docs/authoring.md: theWait until the download completes asstep and the${captured.x}-in-a-launch-command capability (both landed in earlier PRs in this stack without their prose) — deferred here to pair with the flow that actually demonstrates them.FlowSpec::parseaccepting the whole file, and a liveflowproof recordattempt reaching actual browser navigation before failing on a placeholder domain, proving every step form resolves. The unattended CI recording job against the real self-hosted runner is a separate PR (touches.github/workflows/, whichCLAUDE.mdreserves for a human to open).This is the last PR in the
feat/captured-surface-launch→feat/browser-downloads-capture→feat/assert-spreadsheet-format→feat/assert-spreadsheet-probe→feat/assert-spreadsheet-grammar→feat/purchase-info-records-examplestack. I verified the full combined tree is byte-identical to what a single unsplit PR would have produced (no content lost or duplicated across the split).Test plan
cargo test --workspace— 59/59 suites, 1001 testscargo clippy --workspace --all-targets -- -D warningscargo fmt --checkscripts/gate/ratchets.sh(against this PR's actual base) — diff size 136/400🤖 Generated with Claude Code
https://claude.ai/code/session_01FrvHcYH5Soxy5x9hBMjEob