You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Reserve runtime error handling for truly unpredictable failures.
18
18
- Ask not just "Will this work?" but "When will it break?"
19
+
20
+
Flowthru also depends on, and connects to, many other projects. Projects that may be helpful to directly introspect can be found in `docs/reference/misc/external/*/repo` subdirectories. If a source's `repo` subdirectory is missing, it can be pulled by running `nx run xdocs:pull <source>`.
Copy file name to clipboardExpand all lines: docs/project.json
+26-11Lines changed: 26 additions & 11 deletions
Original file line number
Diff line number
Diff line change
@@ -5,7 +5,7 @@
5
5
"sourceRoot": "./docs",
6
6
"targets": {
7
7
"_build-reference": {
8
-
"//": "Generates markdown API reference from C# docstrings into docs/reference/src/. Inputs are scoped to the C# source + the docfx script — hand-written docs (tutorials/, guides/, explanation/) do NOT invalidate this cache, since docfx doesn't read them.",
8
+
"//": "Generates markdown API reference from C# docstrings into docs/reference/src/. Inputs are scoped to the C# source + the docfx script — hand-written docs (tutorials/, guides/, explanation/) do NOT invalidate this cache, since docfx doesn't read them. Private subtarget; composed into docs:build.",
9
9
"executor": "nx:run-commands",
10
10
"dependsOn": [ "flowthru:restore" ],
11
11
"cache": true,
@@ -24,25 +24,40 @@
24
24
"parallel": false
25
25
}
26
26
},
27
-
"build": {
28
-
"//": "Umbrella docs build target. Inputs mirror _build-reference so this stays in sync with the underlying docfx run; downstream consumers (site:_ingest-docs) read the produced reference/src/ tree directly.",
27
+
"_build-capability-matrix": {
28
+
"//": "Regenerates docs/reference/extensions/capability-matrix.md by running the file-based C# program at scripts/_test/capability-matrix.cs. The same script is exercised in freshness mode by tests:_test:capability-matrix-freshness; this target is the generation half. Private subtarget; composed into docs:build. Inputs scoped to the format-extension surface the generator reflects on plus the script itself, so unrelated source changes don't invalidate the cache.",
"dotnet run scripts/_test/capability-matrix.cs --verbosity quiet"
43
49
],
50
+
"cwd": "{workspaceRoot}",
44
51
"parallel": false
45
52
}
53
+
},
54
+
"build": {
55
+
"//": "Public docs build barrel. Composes private _build-* subtargets via dependsOn — each subtarget owns its own input/output footprint and caches independently. Adding a new MD generator (e.g., a future schema-gallery or diagnostic-id catalog) is a new _build-<name> private subtarget plus one line here. Mirrors the tests:test pattern.",
This document is **auto-generated** from each format extension's `IFormatSerializer<TRow>.RowFeatures` declaration. Do not edit by hand — the `_test:capability-matrix-freshness` meta-test fails on drift.
3
+
This document is **auto-generated** from each format extension's `IFormatBase<TRow>.RowFeatures` declaration and which capability segments it implements (`IFormatRowReader<TRow>`, `IFormatRowWriter<TRow>`, `IFormatStreamReader<TRow>`). Do not edit by hand — the `_test:capability-matrix-freshness` meta-test fails on drift.
4
4
5
-
Regenerate locally via `nx run tests:_test:capability-matrix-freshness` or directly via the `Flowthru.Tools.CapabilityMatrix` tool.
5
+
Regenerate locally via `nx run tests:_test:capability-matrix-freshness`, `nx run docs:build`, or directly via `dotnet run scripts/_test/capability-matrix.cs`.
6
+
7
+
## Universal baseline
8
+
9
+
All four formats round-trip the universal row-shape baseline:
-`Nullable<T>` value types and nullable reference types
14
+
-`[SerializedLabel("…")]` field-name mapping
15
+
-`[SerializedEnum("…")]` enum value mapping
16
+
-`required` members and positional-record activation
17
+
18
+
These features are intrinsic to the planner's classification cascade and don't vary across formats. The matrix below tracks capabilities **on top of** that baseline — features where format-by-format support genuinely differs.
6
19
7
20
## Row-shape Features
8
21
9
-
Each format declares which row-shape features it round-trips. A `✓` cell means the format claims support and the corresponding kit conformance fixture (under `tests/helpers/Flowthru.Tests.Kits/Fixtures/`) round-trips successfully. A `✗` cell means the format declares the feature unsupported — kit fixtures requiring that feature skip vacuously for this format.
22
+
Each format declares which row-shape features it round-trips on top of the universal baseline. Cell semantics:
-**`✓`** — format claims support; the matching kit conformance fixture round-trips successfully.
25
+
-**`✗`** — format claims false; could be implemented but isn't. Tracked as a follow-up; kit fixtures requiring the feature skip vacuously.
26
+
-**`—`** — structurally not applicable; the format's generic constraint (`where TRow : IFlatSchema`) prevents the schema shape from compiling. The matching fixture cannot be wired against this format.
Primitive-level format mechanics (`byte[]` blobs handled as base64/binary, timezone semantics on `DateTimeOffset`, etc.) are intrinsic to each format's underlying serialization library and aren't tracked here.
17
36
18
37
## Property Mapping
19
38
@@ -30,10 +49,16 @@ Format extensions are expected to consume Core's `PropertyMappingPlanner` for pe
30
49
31
50
Medium-level capabilities of each format. See `Flowthru.Core.Data.Capabilities.StorageTraits` for the full surface.
32
51
52
+
**Read / Write / Stream columns** carry two signals. Phase D (capability-segmented interfaces) split the format surface into `IFormatRowReader<TRow>`, `IFormatRowWriter<TRow>`, and `IFormatStreamReader<TRow>` (a sub-interface of the row reader, marking bounded-memory decoding). A format that does not implement a segment is *structurally* incapable of that operation — the absence is enforced by the type system, not a runtime trait flag. A format that implements the segment but reports `Traits.CanWrite = false` (etc.) is *runtime*-disabled.
53
+
54
+
-**`✓`** — segment implemented and runtime trait permits.
55
+
-**`—`** — segment not implemented (structural / compile-time signal). Calling code paths against the missing segment fail at compile time.
56
+
-**`✗`** — segment implemented but runtime trait reports unavailable (e.g., medium pointed at a read-only file system).
pass <ahref="https://learn.microsoft.com/dotnet/csharp/language-reference/keywords/null">null</a> for the writer; the resulting adapter exposes
117
+
<xrefhref="Flowthru.Core.Data.Storage.ComposedStorageAdapter%602.Traits" data-throw-if-not-resolved="false"></xref>.<xrefhref="Flowthru.Core.Data.Capabilities.StorageTraits.CanWrite" data-throw-if-not-resolved="false"></xref> as <ahref="https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool">false</a>
118
+
and <xrefhref="Flowthru.Core.Data.Storage.ComposedStorageAdapter%602.Save(%600)" data-throw-if-not-resolved="false"></xref> failsfast.
0 commit comments