Release v19.11.0
What's Changed
- test(generators): the compile harness was blind to the generators' own diagnostics (11547bd)
- fix(zoo): a reference-type scalar has two legal shapes, and the zoo emitted a third (eeb3f5c)
- fix(e2e-fixtures): copy TaskAttachment.cs in setup.sh; correct the doc that hid the need (ba359ae)
- refactor(shared): GetEntityFiles is internal, not public API (c1be0f0)
- refactor: /simplify pass on the NRT batch — dedup the derivations, kill the boolean trap (630b155)
- docs: scope the red-commit rule to specific bugs; detectors get a negative control (92cd956)
- fix(generators): resolve the real FK name in the save guard, not just in the access (476e755)
- test(e2e-fixtures): cover both [ForeignKey] branches and a required navigation (RED) (4e23473)
- test(generators): compile both nullable contexts; drop the test the harness supersedes (1423206)
- test(generators): compile every generator's output against the real framework surface (e9d7e15)
- fix(generators): require a SaveBodyDTO's nested entity DTO instead of 500-ing on it (8cdc0ae)
- fix(generators): null-forgiving display-name and FK paths (24 more nullable warnings) (2e10153)
- fix(shared): DeleteNonActiveBlobs takes a nullable active blob name (6b6b952)
- fix(generators): emit null-forgiving filter predicates (704x CS8602/CS8604/CS8600) (ac0b2e8)
- fix(generators): stop emitting async lifecycle hooks with no await (100x CS1998) (6e3db50)
- fix(generators): emit the core type name, not the annotated type, in GetInstanceAsync (a6607d5)
- test(generators): pin that a nullable readonly-object nav drops its annotation in a type argument (RED) (d45bfcd)
- fix(generators): clear RS1032 on SPIDERLY028's message; put the hint next to the problem (f4857f7)
- refactor(generators): host entity diagnostics in an un-gated generator, not MapperGenerator (45e40e7)
- docs(infrastructure): state that scalar requiredness is deliberately unconfigured (20b69fc)
- docs(generators): rewrite SPIDERLY028's rationale now that the FK cause is known; drop the misleading test (b35873b)
- docs(infrastructure): record why the discarded .IsRequired() only broke one case in four (010cc1f)
- test(infrastructure): pin the nullable-oblivious consumer, proving the FK fix is upgrade-inert (b5f3366)
- fix(infrastructure): call .IsRequired() AFTER .HasForeignKey() on many-to-one (44b1e33)
- test(infrastructure): pin column nullability against the real relational model (RED) (9760c41)
- docs(generators): correct SPIDERLY028's scalar rationale — the attribute wins in one direction too (f8662e6)
- refactor(generators): /simplify pass on SPIDERLY028 — and correct its premise (25e563a)
- feat(generators): SPIDERLY028 — annotation must agree with [Required] (b2df41d)
- test(generators): pin SPIDERLY028 — annotation must agree with [Required] (RED) (e2f4c1c)
- fix(e2e-fixtures): annotate the remaining optional navigations nullable (a3bb882)
- fix(e2e-fixtures): TaskComment.Category is optional, so annotate it nullable (a28e380)
- test: pin [Required] as the source of FK nullability; dump the comment-save failure (f7deeae)
- fix(shared): NRT annotations must not make properties implicitly required (bc488b2)
- Revert "test(e2e-fixtures): TEMPORARY — dump failing API request/response bodies" (49923c9)
- test(e2e-fixtures): TEMPORARY — dump failing API request/response bodies (431fd28)
- revert(generators): value-type DTO columns stay nullable under [Required] (4801d20)
- fix(generators): resolve a DTO FK column's nullability, don't infer it (da85160)
- fix(generators): read a flattened FK at its actual nullability (3e3c9d0)
- test(generators): pin how the save service reads a flattened FK (RED) (d639bf9)
- refactor(generators,shared): /simplify pass on the DTO requiredness work (5bb1474)
- docs(entity-design): document generated DTO nullability (271d3bd)
- feat(zoo): cover the requiredness axis end-to-end (715a745)
- feat(shared): opt-in SupportNonNullableReferenceTypes on AddSwagger (c969970)
- feat(generators): key generated DTO nullability off [Required] (081a5d8)
- test(generators): pin DTO nullability keyed off [Required] (RED) (8505fe1)
- refactor(shared,generators): /simplify pass on the NRT triage (74f6eb1)
- refactor(generators): make GetIdType's nullability part of the type (ad7aa8c)
- fix(shared): localize the external-provider config errors (891dfbf)
- test(shared): pin that provider-config errors are localized (RED) (ef6d4bb)
- docs(generators): retire the last TODO(nrt) markers as stated invariants (e1ef2c9)
- fix(generators,shared): make three null contracts honest, pin the fourth (cde2a92)
- test(generators,shared): pin four asserted-not-enforced null contracts (RED) (e688df0)
- fix(generators): diagnose an unresolvable [UITableColumn] field (71d05fc)
- test(generators): pin [UITableColumn] field resolution (RED) (a0d20a3)
- fix(generators): diagnose bare [DisplayName] instead of NRE-ing on it (43db924)
- test(generators): pin bare [DisplayName] handling (RED) (2eeeeef)
- fix(generators): resolve namespaces declared file-scoped (e930a8a)
- test(generators): pin file-scoped namespace entities (RED) (cbf6dfe)
- fix(generators): fail the build when a generator faults (SPIDERLY024) (06227eb)
- test(generators): pin that a faulted generator names itself (RED) (54caeca)
- fix(generators): skip mapper generation for a project with no entities (eb61c66)
- test(generators): pin that a mapper-only project doesn't fault (RED) (f43fa08)
- fix(generators): skip pagination for a project with no entities (b4744f8)
- test(generators): pin that a DTO-only project doesn't fault (RED) (d5942e1)
- fix(shared): fault a token exchange that returns no usable id_token (c955ecf)
- test(shared): pin how a token exchange with no id_token fails (RED) (e322a21)
- fix(shared): never build a rate-limit partition key from a null IP (4d582ab)
- test(shared): pin that a null client IP still partitions (RED) (1384f1c)
- fix(security): fail boot when UseRedisCache has no connection string (1d900c1)
- test(security): pin that UseRedisCache requires a connection string (RED) (bd33478)
- fix(shared): reject an external id token that carries no 'sub' (bd07b54)
- test(shared): pin that a token with no 'sub' is rejected (RED) (ae95bb7)
- fix(security): re-check the user on refresh, and revoke when it fails (be792fc)
- test(security): pin that refresh re-checks the user row (RED) (f08d64f)
- refactor(generators): /simplify pass on the NRT rollout (64f6d7b)
- feat(init): scaffold new apps with enable (338c4e4)
- feat(generators): emit nullable-clean C# for NRT-enabled consumers (1d67d76)
- fix(ci): add Spiderly.Security.Tests to the solution — it was never running in CI (e6927e8)
- feat(tests): enable nullable reference types (+WarningsAsErrors) on all 5 test projects (ba77f0b)
- feat(generators): enable nullable reference types (+WarningsAsErrors) (dc7d360)
- feat(metadata-exporter): enable nullable reference types (+WarningsAsErrors) (c29c501)
- feat(security): enable nullable reference types (+WarningsAsErrors) (5d30b88)
- feat(cli): enable nullable reference types (+WarningsAsErrors) (f5e6e69)
- feat(zoogen): enable nullable reference types (+WarningsAsErrors) (3b8477e)
- feat(infrastructure): enable nullable reference types (+WarningsAsErrors) (07fc647)
- feat(shared): enable nullable reference types (+WarningsAsErrors) (e0c09a0)
- feat(zoo): NRT-annotated reference shapes via ZooShapeNullable under '#nullable enable' (d8071f7)
- feat(generators): generated C# declares its nullable context, keyed off the consumer compilation (039e202)
- fix(generators): resolve navs by Type.Name; keep NRT '?' out of oblivious emission (82cf3bf)
- test(generators): pin NRT-annotated consumer entities — nav resolution + oblivious-output parity (0175152)
- feat(shared): make TraceCorrelation public (061f44c)
- refactor(angular): /simplify pass on sidebar persistence (3843219)
- refactor(mappers): /simplify pass on the hook feature (b0d8b2e)
- docs(mappers): pin hook-vs-override precedence — .Map is first-wins, .Ignore wins, replace needs the full override (c21e93b)
- feat(mappers): strongly-typed Customize* partial hooks replace [ProjectToDTO]; strip Mapster convention flattening (d9e4b50)
- feat(angular): persist the desktop sidebar collapse state across reloads (159800e)
Packages Published
NuGet Packages
- Spiderly.Shared 19.11.0
- Spiderly.SourceGenerators 19.11.0
- Spiderly.Security 19.11.0
- Spiderly.Infrastructure 19.11.0
- Spiderly.CLI 19.11.0
npm Package
Full Changelog: v19.10.1...v19.11.0