Skip to content

Release v19.11.0

Choose a tag to compare

@github-actions github-actions released this 30 Jul 12:09
· 174 commits to main since this release

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

npm Package

Full Changelog: v19.10.1...v19.11.0