Problem
The 2026-07 ecosystem audit produced a set of medium/low-value recommendations that don't warrant individual issues yet. This backlog keeps them tracked without flooding the tracker; promote an item to its own issue when it is picked up. Section references point into the audit report.
Medium value (§14)
- Domain-side aggregation:
Outcome.Combine(envelopeFactory, …) gated on a documented envelope error, arity-capped per ADR-0015's spirit (§13.4).
- OpenTelemetry semantic conventions, doc-first (
firstclasserrors.code, .instance_id, .transience…), then a minimal Activity helper if demand confirms; Transience→Polly retry recipe (docs only) (§13.4).
- Serialize-only JSON contract for runtime errors (rehydration explicitly out of scope — ADR first); JSON Schemas for the JSON catalog and
errors-baseline.json, validated in gendoc-docs.yml (§13.4).
- AOT/trimming support statement for the binder (promote the
PropertyGetters fallback-chain knowledge into RequestBinder.en.md) (§13.4).
- gRPC mapping table (taxonomy→StatusCode, ErrorCode+context→
google.rpc.ErrorInfo); no package (§13.4).
- CLI: unify the duplicated source-resolution/precedence logic (GenerateOptionsResolver vs CatalogSourceResolver, byte-identical messages); give the config/renderer commands the ports pattern + tests; add a CommandAppTester argv tier pinning the command tree, help output and parse-error exit code (§8.2-CLI).
- GenDoc: extract the duplicated RFC 9457 example-rendering helpers into one internal type; introduce a process-runner seam so timeout/kill/corrupt-output branches become unit-testable; reserve group-file names in the split-Markdown slug namespace (§8.2-GenDoc).
- Docs: document the exception→Outcome bridge idiom (
catch (DiagnosableException ex) → Outcome.Failure(ex.Error)); out-of-DTO argument sample in BinderShowcase (or soften the guide's "every remaining overload" claim); reconcile sample Amount with UsagePatterns' Outcome-first derivation rule; dogfood FirstClassErrors.Testing in the sample tests (§11.3).
- Two structural opt-in analyzers: inline error construction outside
[ProvidesErrorsFor] types; interpolated/concatenated strings passed as public messages (§13.4).
- CI: route
github.head_ref through env vars in gendoc-docs.yml; reuse exported env vars in release.yml's baseline-refresh commit; document (or engineer around) the stranded-required-checks effect of the gendoc-docs bot push; fix the misleading "ready for a Sonar scan" artifact comment (§11.5).
- ADR housekeeping: enumerate ADR-0024's affected set in the implementation reference; sharpen ADR-0017's decision sentence (freeze-on-first-read); make ADR-0022's referenced documents carry the promised content; index annotations for "refines"/"revisits" relationships; dual dates on supersession; a number-uniqueness CI guard (§6.4).
- Tests: write down the two test-style conventions; extend property-based coverage to ErrorContext/inner-error invariants; core Outcome/Error benchmark project + comparison perf row (§8.2-Tests, §5.6).
- A maintainer-facing supply-chain overview page consolidating the per-file policies (§11.5).
Low priority (§14)
Make ErrorCode.Unspecified public · chain the three Error constructors · fix the XML-doc drift items (never-thrown InvalidOperationException on ToException(), stale To reference, "thrown errors" wording) · PrimaryPortInnerErrors params factory/IEnumerable · BindingScope default-construction message · cached empty list on absent optional lists · solution-taxonomy tidy (Documentation csproj x64/x86 configs, samples out of the tests folder, one InternalsVisibleTo idiom) · fce config init bootstrap (detect .sln, seed serviceName) · atomic baseline/snapshot writes · normalize/document the Spectre parse-error exit code · translate or exempt the ADR rulebook · broaden thin analyzer test matrices (FCE004/005/010/012/015) · label FsCheck conjunctions · GenDoc.Worker smoke seam · converge the duplicated DocumentationFormatter · sweep the stale-pointer constellation (changelog preamble, "English only" note, tag-format example, train allowlist quote, EXCHANGE_RATE code prefix) · publication recipes (TechDocs/MkDocs/Pages) as docs · OpenAPI renderer as a documented sample plugin · bring WhenNotToUse up to the house standard (and correct its hot-loop cost description) · repair prev/next chain reciprocity · shrink the 919 KB packed icon.png · worker formatting-culture golden test · ParseMsBuildGetPropertyLine value-only tightening · enable the opt-in analyzers in the dogfood .editorconfig · consolidate duplicated metadata-name constants · Any/AnyContext mirror-completeness test.
Acceptance criteria
Items are struck through here (or moved to dedicated issues) as they land; the list shrinks, never silently grows stale.
Context
Surfaced by the 2026-07-20 architecture, design & ecosystem audit (doc/handwritten/for-maintainers/audit/2026-07-20-firstclasserrors-architecture-and-design-audit.md, §14; branch claude/firstclasserrors-audit-83gap7). Out-of-scope rejections (§13.6) are deliberately NOT tracked — the audit recommends keeping them rejected.
Problem
The 2026-07 ecosystem audit produced a set of medium/low-value recommendations that don't warrant individual issues yet. This backlog keeps them tracked without flooding the tracker; promote an item to its own issue when it is picked up. Section references point into the audit report.
Medium value (§14)
Outcome.Combine(envelopeFactory, …)gated on a documented envelope error, arity-capped per ADR-0015's spirit (§13.4).firstclasserrors.code,.instance_id,.transience…), then a minimal Activity helper if demand confirms; Transience→Polly retry recipe (docs only) (§13.4).errors-baseline.json, validated in gendoc-docs.yml (§13.4).PropertyGettersfallback-chain knowledge into RequestBinder.en.md) (§13.4).google.rpc.ErrorInfo); no package (§13.4).catch (DiagnosableException ex) → Outcome.Failure(ex.Error)); out-of-DTO argument sample in BinderShowcase (or soften the guide's "every remaining overload" claim); reconcile sampleAmountwith UsagePatterns' Outcome-first derivation rule; dogfood FirstClassErrors.Testing in the sample tests (§11.3).[ProvidesErrorsFor]types; interpolated/concatenated strings passed as public messages (§13.4).github.head_refthrough env vars in gendoc-docs.yml; reuse exported env vars in release.yml's baseline-refresh commit; document (or engineer around) the stranded-required-checks effect of the gendoc-docs bot push; fix the misleading "ready for a Sonar scan" artifact comment (§11.5).Low priority (§14)
Make
ErrorCode.Unspecifiedpublic · chain the threeErrorconstructors · fix the XML-doc drift items (never-thrownInvalidOperationExceptiononToException(), staleToreference, "thrown errors" wording) ·PrimaryPortInnerErrorsparams factory/IEnumerable·BindingScopedefault-construction message · cached empty list on absent optional lists · solution-taxonomy tidy (Documentation csproj x64/x86 configs, samples out of thetestsfolder, oneInternalsVisibleToidiom) ·fce config initbootstrap (detect .sln, seed serviceName) · atomic baseline/snapshot writes · normalize/document the Spectre parse-error exit code · translate or exempt the ADR rulebook · broaden thin analyzer test matrices (FCE004/005/010/012/015) · label FsCheck conjunctions · GenDoc.Worker smoke seam · converge the duplicatedDocumentationFormatter· sweep the stale-pointer constellation (changelog preamble, "English only" note, tag-format example, train allowlist quote,EXCHANGE_RATEcode prefix) · publication recipes (TechDocs/MkDocs/Pages) as docs · OpenAPI renderer as a documented sample plugin · bringWhenNotToUseup to the house standard (and correct its hot-loop cost description) · repair prev/next chain reciprocity · shrink the 919 KB packedicon.png· worker formatting-culture golden test ·ParseMsBuildGetPropertyLinevalue-only tightening · enable the opt-in analyzers in the dogfood.editorconfig· consolidate duplicated metadata-name constants ·Any/AnyContextmirror-completeness test.Acceptance criteria
Items are struck through here (or moved to dedicated issues) as they land; the list shrinks, never silently grows stale.
Context
Surfaced by the 2026-07-20 architecture, design & ecosystem audit (
doc/handwritten/for-maintainers/audit/2026-07-20-firstclasserrors-architecture-and-design-audit.md, §14; branchclaude/firstclasserrors-audit-83gap7). Out-of-scope rejections (§13.6) are deliberately NOT tracked — the audit recommends keeping them rejected.