FuncPipe Package Guide¶
Guide Maps¶
graph LR
family["Python Programming"]
program["Python Functional Programming"]
guide["Capstone docs"]
section["Docs"]
page["FuncPipe Package Guide"]
proof["Proof route"]
family --> program --> guide --> section --> page
page -.checks against.-> proof
flowchart LR
orient["Read the guide boundary"] --> inspect["Inspect the named files, targets, or artifacts"]
inspect --> run["Run the confirm, demo, selftest, or proof command"]
run --> compare["Compare output with the stated contract"]
compare --> review["Return to the course claim with evidence"]
Use this guide when you want a stable code-reading route through the capstone. The point is not to read files alphabetically. The point is to understand which package owns which kind of reasoning pressure.
Recommended reading order¶
tests/unit/fp/,tests/unit/result/, andtests/unit/streaming/src/funcpipe_rag/fp/,result/,tree/, andstreaming/src/funcpipe_rag/core/,rag/, andrag/domain/src/funcpipe_rag/pipelines/andpolicies/src/funcpipe_rag/domain/,boundaries/, andinfra/src/funcpipe_rag/interop/
That order keeps proof before abstraction and keeps the pure core visible before you hit effects and integrations.
Package groups¶
| Group | Paths | Owns | First matching tests |
|---|---|---|---|
| Functional core | src/funcpipe_rag/fp/, result/, tree/, streaming/ |
reusable algebra, containers, folds, and lazy stream behavior | tests/unit/fp/, tests/unit/result/, tests/unit/tree/, tests/unit/streaming/ |
| RAG model | src/funcpipe_rag/core/, rag/, rag/domain/ |
chunk shapes, stage composition, RAG assembly, and domain values | tests/unit/rag/, tests/unit/rag/domain/ |
| Orchestration and policy | src/funcpipe_rag/pipelines/, policies/ |
configured pipelines, policies, and runtime choices that stay explicit | tests/unit/pipelines/, tests/unit/policies/ |
| Effect boundaries | src/funcpipe_rag/domain/, domain/effects/, boundaries/, infra/ |
capabilities, adapters, effect descriptions, shells, and concrete runtime edges | tests/unit/domain/, tests/unit/boundaries/, tests/unit/infra/adapters/ |
| Interop | src/funcpipe_rag/interop/ |
bridges to stdlib and external library styles | tests/unit/interop/ |
Start with the question you have¶
| If you are asking... | Open these source packages first | Then open these proofs |
|---|---|---|
| Where do the pure helpers and composition primitives live? | src/funcpipe_rag/fp/, result/, tree/, streaming/ |
tests/unit/fp/, tests/unit/result/, tests/unit/tree/, tests/unit/streaming/ |
| Where does the RAG-specific domain model live? | src/funcpipe_rag/core/, rag/, rag/domain/ |
tests/unit/rag/, tests/unit/rag/domain/ |
| Where do configured pipelines and policy choices live? | src/funcpipe_rag/pipelines/, policies/ |
tests/unit/pipelines/, tests/unit/policies/ |
| Where do effect descriptions and execution boundaries begin? | src/funcpipe_rag/domain/, domain/effects/, boundaries/, infra/ |
tests/unit/domain/ |
| Where do library bridges and compatibility layers live? | src/funcpipe_rag/interop/ |
tests/unit/interop/ |
Short routes by course pressure¶
Purity, substitution, and local reasoning¶
src/funcpipe_rag/fp/core.pysrc/funcpipe_rag/core/rag_types.pytests/unit/fp/test_core_chunk_roundtrip.pytests/unit/fp/test_core_state_machine.py
Data-first APIs and explicit configuration¶
src/funcpipe_rag/rag/rag_api.pysrc/funcpipe_rag/rag/config.pysrc/funcpipe_rag/pipelines/configured.pytests/unit/rag/test_api.pytests/unit/pipelines/test_configured_pipeline.py
Iterators, laziness, and streaming pressure¶
src/funcpipe_rag/rag/chunking.pysrc/funcpipe_rag/rag/streaming_rag.pysrc/funcpipe_rag/streaming/fanout.pysrc/funcpipe_rag/streaming/time.pytests/unit/streaming/test_streaming.py
Failure handling, validation, and explicit context¶
src/funcpipe_rag/result/src/funcpipe_rag/fp/validation.pysrc/funcpipe_rag/fp/effects/tests/unit/result/tests/unit/fp/test_configurable.pytests/unit/result/test_option_result.py
Ports, adapters, resource safety, and async work¶
src/funcpipe_rag/domain/capabilities.pysrc/funcpipe_rag/domain/effects/src/funcpipe_rag/boundaries/src/funcpipe_rag/infra/adapters/tests/unit/domain/
Interop and long-lived project review¶
src/funcpipe_rag/interop/src/funcpipe_rag/pipelines/cli.pysrc/funcpipe_rag/boundaries/shells/cli.pytests/unit/interop/tests/unit/pipelines/test_cli_overrides.py
Review questions by group¶
- Functional core: Which helpers stay pure, lawful, and lazily composable?
- RAG model: Which values and stage boundaries define the application-specific semantics?
- Orchestration and policy: Which choices are configurable policy rather than hidden control flow?
- Effect boundaries: Which package describes effects and which one actually executes them?
- Interop: Which compatibility helper can disappear without corrupting the core model?
What this guide prevents¶
- starting in adapters and mistaking them for the center of the design
- reading the pipeline shell before you know what the pure stages promise
- treating every package as equally effectful or equally important
- changing an interop layer without knowing which proofs should stay unchanged
Best companion files¶
ARCHITECTURE.mdTEST_GUIDE.mdPUBLIC_SURFACE_MAP.mdPROOF_GUIDE.md