json-rest-api 1.0.22 → 1.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (260) hide show
  1. package/CLAUDE.md +1 -2
  2. package/JSKIT_BACKEND_MIGRATION_TRACKER.txt +180 -0
  3. package/SINGLE_VALIDATION_CONTRACT_TODO.txt +172 -0
  4. package/docs/API.md +51 -14
  5. package/docs/COMPARISON.md +2 -2
  6. package/docs/GUIDE/GUIDE_1_Initial_Setup.md +28 -1
  7. package/docs/GUIDE/GUIDE_2_2_Manipulating_And_Searching_Tables.md +5 -1
  8. package/docs/GUIDE/GUIDE_2_7_Pagination_And_Ordering.md +3 -1
  9. package/docs/GUIDE/GUIDE_2_8_Effects_of_PUT_and_PATCH.md +12 -60
  10. package/docs/GUIDE/GUIDE_2_Data_And_Relations.md +2 -2
  11. package/docs/GUIDE/GUIDE_3_Field_Transformations.md +5 -1
  12. package/docs/GUIDE/GUIDE_7_Hooks_Data_Management_And_Plugins.md +2 -0
  13. package/docs/GUIDE/GUIDE_X_Autofiltering.md +355 -0
  14. package/docs/GUIDE/GUIDE_X_Fastify.md +78 -0
  15. package/docs/GUIDE/GUIDE_X_Knex_Schema_And_Migrations.md +250 -0
  16. package/docs/GUIDE/GUIDE_X_Query_Projections.md +159 -0
  17. package/docs/GUIDE/GUIDE_X_Writing_Plugins.md +199 -0
  18. package/docs/GUIDE/index.md +18 -9
  19. package/docs/QUICKSTART.md +5 -1
  20. package/docs/index.md +1 -1
  21. package/index.js +3 -2
  22. package/package.json +2 -2
  23. package/plugins/core/connectors/express-plugin.js +97 -184
  24. package/plugins/core/connectors/fastify-plugin.js +206 -0
  25. package/plugins/core/connectors/lib/connector-core.js +195 -0
  26. package/plugins/core/connectors/lib/transport-http-helpers.js +122 -0
  27. package/plugins/core/connectors/lib/transport-route-schemas.js +92 -0
  28. package/plugins/core/lib/dbIntrospection.js +1078 -0
  29. package/plugins/core/lib/dbTablesOperations.js +1104 -160
  30. package/plugins/core/lib/querying/knex-json-api-transformers-querying.js +5 -2
  31. package/plugins/core/lib/querying/knex-process-includes.js +3 -4
  32. package/plugins/core/lib/querying/knex-query-helpers.js +17 -71
  33. package/plugins/core/lib/querying/knex-relationship-includes.js +466 -206
  34. package/plugins/core/lib/querying/query-builder-utils.js +19 -0
  35. package/plugins/core/lib/querying/query-field-sort-helpers.js +135 -0
  36. package/plugins/core/lib/querying/sort-helpers.js +33 -0
  37. package/plugins/core/lib/querying/storage-adapter-utils.js +51 -0
  38. package/plugins/core/lib/querying/url-helpers.js +8 -2
  39. package/plugins/core/lib/querying-writing/compile-schemas.js +12 -1
  40. package/plugins/core/lib/querying-writing/knex-field-helpers.js +83 -13
  41. package/plugins/core/lib/querying-writing/knex-json-api-transformers.js +13 -12
  42. package/plugins/core/lib/querying-writing/query-field-helpers.js +88 -0
  43. package/plugins/core/lib/querying-writing/request-contracts.js +590 -0
  44. package/plugins/core/lib/storage/canonical-storage-mapping.js +113 -0
  45. package/plugins/core/lib/storage/storage-adapter.js +79 -2
  46. package/plugins/core/lib/storage/storage-mapping.js +204 -0
  47. package/plugins/core/rest-api-anyapi-knex-plugin.js +355 -228
  48. package/plugins/core/rest-api-autofilter-plugin.js +414 -0
  49. package/plugins/core/rest-api-knex-plugin.js +249 -211
  50. package/plugins/core/rest-api-plugin-hooks/register-relationship-routes.js +10 -5
  51. package/plugins/core/rest-api-plugin-hooks/register-scope-routes.js +12 -6
  52. package/plugins/core/rest-api-plugin-methods/apply-query-filters.js +41 -0
  53. package/plugins/core/rest-api-plugin-methods/common.js +121 -83
  54. package/plugins/core/rest-api-plugin-methods/enrich-attributes.js +6 -1
  55. package/plugins/core/rest-api-plugin-methods/get.js +23 -14
  56. package/plugins/core/rest-api-plugin-methods/patch.js +28 -12
  57. package/plugins/core/rest-api-plugin-methods/post.js +13 -8
  58. package/plugins/core/rest-api-plugin-methods/put.js +45 -21
  59. package/plugins/core/rest-api-plugin-methods/query.js +15 -53
  60. package/plugins/core/rest-api-plugin.js +2 -0
  61. package/plugins/core/rest-api-positioning-plugin.js +1 -1
  62. package/plugins/core/rest-api-query-projections-plugin.js +130 -0
  63. package/plugins/core/socketio-plugin.js +1 -3
  64. package/tests/autofilter.test.js +463 -0
  65. package/tests/custom-id-simplified-post.test.js +75 -0
  66. package/tests/custom-idproperty-relationships.test.js +33 -0
  67. package/tests/db-introspection.test.js +518 -0
  68. package/tests/db-table-operations.test.js +781 -0
  69. package/tests/fastify-plugin.test.js +141 -0
  70. package/tests/field-getters.test.js +1 -2
  71. package/tests/field-setters.test.js +0 -4
  72. package/tests/fixtures/api-configs.js +188 -219
  73. package/tests/helpers/fake-fastify.js +99 -0
  74. package/tests/http-connectors-parity.test.js +235 -0
  75. package/tests/projected-fields.test.js +319 -0
  76. package/tests/relationships.test.js +3 -3
  77. package/tests/searchschema-knex-behavior.test.js +187 -0
  78. package/tests/searchschema-merge.test.js +21 -69
  79. package/tests/storage-mapping.test.js +210 -0
  80. package/audit/00-charter.md +0 -103
  81. package/audit/01-scope-map.md +0 -84
  82. package/audit/02-coverage-matrix.csv +0 -174
  83. package/audit/03-invariants.md +0 -123
  84. package/audit/04-standards-rubric.md +0 -56
  85. package/audit/05-competitor-rubric.md +0 -77
  86. package/audit/06-findings.md +0 -160
  87. package/audit/07-risk-register.csv +0 -10
  88. package/audit/08-remediation-roadmap.md +0 -177
  89. package/audit/09-signoff-check.md +0 -23
  90. package/audit/10-final-synthesis.md +0 -29
  91. package/audit/evidence/code/all-files-json-rest-api.txt +0 -168
  92. package/audit/evidence/code/all-files-json-rest-schema.txt +0 -12
  93. package/audit/evidence/code/boundary-leak-checks.txt +0 -72
  94. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__bulk-operations-plugin.js.txt +0 -480
  95. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__connectors__express-plugin.js.txt +0 -532
  96. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__connectors__lib__busboy-detector.js.txt +0 -175
  97. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__connectors__lib__formidable-detector.js.txt +0 -138
  98. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__connectors__lib__request-helpers.js.txt +0 -222
  99. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__file-handling-plugin.js.txt +0 -342
  100. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__dbTablesOperations.js.txt +0 -304
  101. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__fractional-positioning.js.txt +0 -188
  102. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__compile-schemas.js.txt +0 -336
  103. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__connectors-query-parser.js.txt +0 -165
  104. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__database-capabilities.js.txt +0 -265
  105. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__database-value-normalizers.js.txt +0 -369
  106. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__default-data-helpers.js.txt +0 -72
  107. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__field-utils.js.txt +0 -139
  108. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__knex-constants.js.txt +0 -45
  109. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__knex-field-helpers.js.txt +0 -396
  110. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__knex-json-api-transformers.js.txt +0 -162
  111. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__payload-validators.js.txt +0 -1314
  112. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__schema-helpers.js.txt +0 -488
  113. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__scope-validations.js.txt +0 -484
  114. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__simplified-helpers.js.txt +0 -857
  115. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-cross-table-search.js.txt +0 -565
  116. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-json-api-transformers-querying.js.txt +0 -485
  117. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-pagination-helpers.js.txt +0 -560
  118. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-process-includes.js.txt +0 -167
  119. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-query-helpers-base.js.txt +0 -109
  120. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-query-helpers.js.txt +0 -1064
  121. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-relationship-includes.js.txt +0 -1983
  122. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-window-queries.js.txt +0 -328
  123. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__url-helpers.js.txt +0 -119
  124. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__storage__storage-adapter.js.txt +0 -160
  125. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__writing__many-to-many-manipulations.js.txt +0 -300
  126. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__writing__relationship-processor.js.txt +0 -245
  127. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-access.js.txt +0 -459
  128. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-cors-plugin.js.txt +0 -237
  129. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-knex-plugin.js.txt +0 -1135
  130. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-multihome-plugin.js.txt +0 -314
  131. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__compile-resource-schemas.js.txt +0 -7
  132. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__register-relationship-routes.js.txt +0 -71
  133. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__register-scope-routes.js.txt +0 -102
  134. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__turn-scope-init-into-vars.js.txt +0 -49
  135. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__validate-include-configurations.js.txt +0 -39
  136. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__add-route.js.txt +0 -23
  137. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__check-permissions.js.txt +0 -13
  138. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__common.js.txt +0 -639
  139. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__delete-relationship.js.txt +0 -117
  140. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__delete.js.txt +0 -104
  141. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__enrich-attributes.js.txt +0 -199
  142. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__get-related.js.txt +0 -353
  143. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__get-relationship.js.txt +0 -61
  144. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__get.js.txt +0 -184
  145. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__patch-relationship.js.txt +0 -55
  146. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__patch.js.txt +0 -191
  147. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__post-relationship.js.txt +0 -110
  148. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__post.js.txt +0 -168
  149. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__put.js.txt +0 -253
  150. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__query.js.txt +0 -207
  151. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__release.js.txt +0 -12
  152. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin.js.txt +0 -165
  153. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-positioning-plugin.js.txt +0 -668
  154. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__socketio-plugin.js.txt +0 -621
  155. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__storage__local-storage.js.txt +0 -218
  156. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__storage__s3-storage.js.txt +0 -124
  157. package/audit/evidence/code/critical-pass1/json-rest-schema__src__CorePlugin.js.txt +0 -269
  158. package/audit/evidence/code/critical-pass1/json-rest-schema__src__Schema.js.txt +0 -242
  159. package/audit/evidence/code/critical-pass1/json-rest-schema__src__index.js.txt +0 -77
  160. package/audit/evidence/code/critical-pass1-risk-keywords.txt +0 -238
  161. package/audit/evidence/code/critical-pass1-summary.csv +0 -67
  162. package/audit/evidence/code/critical-pass2-summary.csv +0 -67
  163. package/audit/evidence/code/early-silent-zones-no-test-token.txt +0 -57
  164. package/audit/evidence/code/error-model-signals.txt +0 -98
  165. package/audit/evidence/code/git-files-json-rest-api.txt +0 -171
  166. package/audit/evidence/code/git-files-json-rest-schema.txt +0 -27
  167. package/audit/evidence/code/hook-flow-signals.txt +0 -282
  168. package/audit/evidence/code/idproperty-signals.txt +0 -157
  169. package/audit/evidence/code/import-cycles-non-anyapi.txt +0 -3
  170. package/audit/evidence/code/import-hotspots-non-anyapi.txt +0 -96
  171. package/audit/evidence/code/imports-json-rest-api.txt +0 -354
  172. package/audit/evidence/code/imports-json-rest-schema.txt +0 -15
  173. package/audit/evidence/code/in-scope-files-json-rest-api.txt +0 -160
  174. package/audit/evidence/code/in-scope-files-json-rest-schema.txt +0 -13
  175. package/audit/evidence/code/non-anyapi-core-files.txt +0 -101
  176. package/audit/evidence/code/permission-signals.txt +0 -193
  177. package/audit/evidence/code/query-include-signals.txt +0 -687
  178. package/audit/evidence/code/transaction-signals.txt +0 -28
  179. package/audit/evidence/code/validation-signals.txt +0 -650
  180. package/audit/evidence/code/write-path-signals.txt +0 -61
  181. package/audit/evidence/docs/docs-claims-signals.txt +0 -1075
  182. package/audit/evidence/docs/schema-docs-claims-signals.txt +0 -179
  183. package/audit/evidence/external/corpus-freeze.md +0 -21
  184. package/audit/evidence/external/npm-competitor-metadata.txt +0 -70
  185. package/audit/evidence/external/npm-download-signals.txt +0 -23
  186. package/audit/evidence/external/npm-jsonapi-server.txt +0 -8
  187. package/audit/evidence/external/npm-modern-jsonapi-metadata.txt +0 -38
  188. package/audit/evidence/external/readme-fortune-signals.txt +0 -26
  189. package/audit/evidence/external/readme-fortune.md +0 -165
  190. package/audit/evidence/external/readme-json-api-serializer-signals.txt +0 -80
  191. package/audit/evidence/external/readme-json-api-serializer.md +0 -690
  192. package/audit/evidence/external/readme-jsonapi-serde-server-signals.txt +0 -0
  193. package/audit/evidence/external/readme-jsonapi-serde-server.md +0 -22
  194. package/audit/evidence/external/readme-jsonapi-serializer-signals.txt +0 -63
  195. package/audit/evidence/external/readme-jsonapi-serializer.md +0 -315
  196. package/audit/evidence/external/readme-jsonapi-server-signals.txt +0 -19
  197. package/audit/evidence/external/readme-jsonapi-server.md +0 -104
  198. package/audit/evidence/external/readme-nestjs-json-api-signals.txt +0 -4
  199. package/audit/evidence/external/readme-nestjs-json-api.md +0 -94
  200. package/audit/evidence/external/readme-yaser-json-api-nestjs-signals.txt +0 -47
  201. package/audit/evidence/external/readme-yaser-json-api-nestjs.md +0 -447
  202. package/audit/evidence/external/standard-jsonapi-snippets.txt +0 -84
  203. package/audit/evidence/external/standard-rfc-snippets.txt +0 -168
  204. package/audit/evidence/external/standards-sources.txt +0 -6
  205. package/audit/evidence/runtime/baseline-commits.txt +0 -2
  206. package/audit/evidence/runtime/db-adapter-assumptions.txt +0 -3
  207. package/audit/evidence/runtime/environment.txt +0 -4
  208. package/audit/evidence/runtime/invariant-runtime-mapping.md +0 -38
  209. package/audit/evidence/runtime/probe-patch-relationship-error.exitcode +0 -1
  210. package/audit/evidence/runtime/probe-patch-relationship-error.log +0 -76
  211. package/audit/evidence/runtime/probe-patch-relationship-error.mjs +0 -67
  212. package/audit/evidence/runtime/probe-patch-relationship-referenceerror.exitcode +0 -1
  213. package/audit/evidence/runtime/probe-patch-relationship-referenceerror.log +0 -62
  214. package/audit/evidence/runtime/probe-patch-relationship-referenceerror.mjs +0 -47
  215. package/audit/evidence/runtime/test-exitcodes.txt +0 -4
  216. package/audit/evidence/runtime/test-summary.md +0 -107
  217. package/audit/evidence/runtime/trace-anchors.txt +0 -61
  218. package/audit/evidence/tests/access-multitenancy-test-signals.txt +0 -125
  219. package/audit/evidence/tests/failing-tests-summary.txt +0 -25
  220. package/audit/evidence/tests/npm-test-json-rest-api.exitcode +0 -1
  221. package/audit/evidence/tests/npm-test-json-rest-api.log +0 -5885
  222. package/audit/evidence/tests/npm-test-json-rest-schema.exitcode +0 -1
  223. package/audit/evidence/tests/npm-test-json-rest-schema.log +0 -356
  224. package/audit/evidence/tests/query-include-test-signals.txt +0 -948
  225. package/audit/evidence/tests/relationship-test-signals.txt +0 -223
  226. package/audit/evidence/tests/skipped-tests.txt +0 -10
  227. package/audit/evidence/tests/test-suite-list-non-anyapi.txt +0 -30
  228. package/audit/evidence/tests/test-suite-list.txt +0 -32
  229. package/audit/subsystems/docs-drift.md +0 -49
  230. package/audit/subsystems/pass2-cross-review.md +0 -131
  231. package/audit/subsystems/plugins-access.md +0 -51
  232. package/audit/subsystems/plugins-bulk.md +0 -50
  233. package/audit/subsystems/plugins-cors.md +0 -48
  234. package/audit/subsystems/plugins-file.md +0 -53
  235. package/audit/subsystems/plugins-multihome.md +0 -50
  236. package/audit/subsystems/plugins-positioning.md +0 -54
  237. package/audit/subsystems/plugins-socketio.md +0 -50
  238. package/audit/subsystems/query-engine.md +0 -61
  239. package/audit/subsystems/relationships.md +0 -55
  240. package/audit/subsystems/rest-orchestration.md +0 -66
  241. package/audit/subsystems/schema-core.md +0 -64
  242. package/audit/subsystems/storage-knex.md +0 -57
  243. package/audit/subsystems/tests.md +0 -48
  244. package/audit/subsystems/transport-express.md +0 -55
  245. package/audit/traces/trace-read-get.md +0 -22
  246. package/audit/traces/trace-read-query.md +0 -25
  247. package/audit/traces/trace-relationship-endpoints.md +0 -31
  248. package/audit/traces/trace-write-delete.md +0 -17
  249. package/audit/traces/trace-write-patch.md +0 -26
  250. package/audit/traces/trace-write-post.md +0 -22
  251. package/audit/traces/trace-write-put.md +0 -23
  252. package/docs/GUIDE/GUIDE_4_Authentication_And_Permissions.md +0 -707
  253. package/docs/GUIDE/GUIDE_X_Multihome.md +0 -666
  254. package/plugins/core/lib/querying-writing/payload-validators.js +0 -1314
  255. package/plugins/core/rest-api-access.js +0 -459
  256. package/plugins/core/rest-api-multihome-plugin.js +0 -314
  257. package/tests/multihome.test.js +0 -553
  258. package/tests/multihome.test.js.bak +0 -550
  259. package/tests/ownership-optout.test.js +0 -76
  260. package/tests/rest-api-access.test.js +0 -206
@@ -1,84 +0,0 @@
1
- # Scope Map (M1)
2
-
3
- ## Inventory Baseline (In Scope)
4
- - `json-rest-api`: 160 tracked files in scope (`audit/evidence/code/in-scope-files-json-rest-api.txt`)
5
- - `json-rest-schema`: 13 tracked files in scope (`audit/evidence/code/in-scope-files-json-rest-schema.txt`)
6
- - Coverage matrix rows: 173 files + header (`audit/02-coverage-matrix.csv`)
7
-
8
- ## Architecture Boundaries (Expected Layer Contract)
9
- `transport -> REST methods -> helper contracts -> storage adapter -> DB`
10
-
11
- ### schema-core
12
- - Repo: `json-rest-schema`
13
- - Core files: `src/index.js`, `src/Schema.js`, `src/CorePlugin.js`
14
- - Responsibility: field casting, validation pipeline, validator/type plugin system.
15
-
16
- ### rest-orchestration
17
- - Repo: `json-rest-api`
18
- - Core files: `plugins/core/rest-api-plugin.js`, `plugins/core/rest-api-plugin-methods/*.js`, `plugins/core/rest-api-plugin-hooks/*.js`
19
- - Responsibility: request lifecycle orchestration, permission hook dispatch, transaction lifecycle, response shape mode.
20
-
21
- ### transport-express
22
- - Core files: `plugins/core/connectors/express-plugin.js`, `plugins/core/connectors/lib/*`
23
- - Responsibility: HTTP ingress/egress, request parsing, status mapping, transport hooks.
24
-
25
- ### storage-knex
26
- - Core files: `plugins/core/rest-api-knex-plugin.js`, `plugins/core/lib/storage/storage-adapter.js`, `plugins/core/lib/querying-writing/*`
27
- - Responsibility: data adapter abstraction, SQL query/write execution, schema compilation and ID/column translation.
28
-
29
- ### query-engine
30
- - Core files: `plugins/core/lib/querying/*`, `plugins/core/rest-api-plugin-methods/query.js`, `.../get.js`
31
- - Responsibility: filtering/sorting/pagination/include processing and JSON:API assembly.
32
-
33
- ### relationships
34
- - Core files: `plugins/core/lib/writing/relationship-processor.js`, `.../many-to-many-manipulations.js`, relationship endpoint methods
35
- - Responsibility: relation semantics across CRUD + relationship endpoints.
36
-
37
- ### plugin subsystems
38
- - Access: `plugins/core/rest-api-access.js`
39
- - CORS: `plugins/core/rest-api-cors-plugin.js`
40
- - File: `plugins/core/file-handling-plugin.js`
41
- - Positioning: `plugins/core/rest-api-positioning-plugin.js`, `plugins/core/lib/fractional-positioning.js`
42
- - Multihome: `plugins/core/rest-api-multihome-plugin.js`
43
- - SocketIO: `plugins/core/socketio-plugin.js`
44
- - Bulk: `plugins/core/bulk-operations-plugin.js`
45
-
46
- ## Primary Data/Control Flows
47
- ### Read flow
48
- 1. Route registration: `register-scope-routes.js` + `add-route.js`
49
- 2. Transport ingress + parsing: `express-plugin.js`, `connectors-query-parser.js`
50
- 3. Method orchestration: `query.js`/`get.js` -> payload validation -> `checkPermissions`
51
- 4. Storage read: `rest-api-knex-plugin.js` (`helpers.dataQuery`/`helpers.dataGet`)
52
- 5. Include/transform: `knex-process-includes.js`, `knex-relationship-includes.js`, `knex-json-api-transformers-querying.js`
53
- 6. Field enrichment/filtering: `enrich-attributes.js`, `field-utils.js`
54
- 7. Transport response/error mapping: `express-plugin.js`
55
-
56
- ### Write flow
57
- 1. Transport ingress/body validation.
58
- 2. Method setup + transaction open: `common.js::setupCommonRequest`
59
- 3. Payload validation and schema validation: `payload-validators.js` + `validateResourceAttributesBeforeWrite`
60
- 4. Permission checks before storage side effects: `scope.checkPermissions`
61
- 5. Storage mutation: `helpers.dataPost|dataPut|dataPatch|dataDelete`
62
- 6. Relationship side effects: `relationship-processor.js`, `many-to-many-manipulations.js`
63
- 7. Return mode and hooks: `handleRecordReturnAfterWrite`
64
- 8. Commit/rollback path: `common.js::handleWriteMethodError` and method-level transaction logic
65
-
66
- ## Early Silent Zones (Initial Detection)
67
- ### Files with weak direct test linkage (heuristic)
68
- - Source: `audit/evidence/code/early-silent-zones-no-test-token.txt`
69
- - 54/67 runtime files had no direct token mention in tests (heuristic, not execution coverage).
70
- - Notable high-risk modules in this set: file upload detector libs, relationship endpoint methods, core helper glue, error formatting.
71
-
72
- ### Docs claims with likely weak direct code/test mapping (to validate in M2/M6)
73
- - File upload guides vs no dedicated file-upload test suite name match.
74
- - Label plugin present (`rest-api-label-plugin.js`) with no dedicated test suite name match.
75
- - Transport helper internals (`connectors/lib/*`) lack targeted test files by name.
76
-
77
- ### Weak call-site coverage candidates (initial static signal)
78
- - Relationship endpoint error path consistency needs runtime confirmation (`patch-relationship.js` catch path references symbols not declared in-file).
79
- - Cross-table/polymorphic filter branches require targeted scenario coverage beyond happy-path query tests.
80
-
81
- ## Unknown Queue (Must Resolve)
82
- - Exact runtime path usage for some helper modules without explicit test targeting.
83
- - Relationship endpoint error envelope consistency under thrown failures.
84
- - Performance behavior under nested includes and cross-table filter combinations.
@@ -1,174 +0,0 @@
1
- "repo","path","layer","subsystem","criticality","review_pass_1","review_pass_2","runtime_touched","test_touched","notes_ref"
2
- "json-rest-api",".claude/agents/library-guide-expert.md","support","docs-drift","supporting","pending","pending","no","no","audit/subsystems/docs-drift.md"
3
- "json-rest-api",".claude/agents/rest-api-internals-expert.md","support","docs-drift","supporting","pending","pending","no","no","audit/subsystems/docs-drift.md"
4
- "json-rest-api",".gitignore","support","docs-drift","supporting","pending","pending","no","no","audit/subsystems/docs-drift.md"
5
- "json-rest-api","AGENTS.md","docs","docs-drift","supporting","pending","pending","no","no","audit/subsystems/docs-drift.md"
6
- "json-rest-api","CLAUDE.md","docs","docs-drift","supporting","pending","pending","no","no","audit/subsystems/docs-drift.md"
7
- "json-rest-api","connectors_ideas/fastify.js","tooling","docs-drift","supporting","pending","pending","no","no","audit/subsystems/docs-drift.md"
8
- "json-rest-api","connectors_ideas/koa-plugin.js","tooling","docs-drift","supporting","pending","pending","no","no","audit/subsystems/docs-drift.md"
9
- "json-rest-api","CRUSH.md","docs","docs-drift","supporting","pending","pending","no","no","audit/subsystems/docs-drift.md"
10
- "json-rest-api","docs/_config.yml","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
11
- "json-rest-api","docs/_layouts/default.html","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
12
- "json-rest-api","docs/.bundle/config","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
13
- "json-rest-api","docs/API.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
14
- "json-rest-api","docs/apple-touch-icon.svg","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
15
- "json-rest-api","docs/assets/css/style.scss","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
16
- "json-rest-api","docs/COMPARISON.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
17
- "json-rest-api","docs/favicon.svg","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
18
- "json-rest-api","docs/Gemfile","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
19
- "json-rest-api","docs/Gemfile.lock","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
20
- "json-rest-api","docs/GUIDE/GUIDE_1_Initial_Setup.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
21
- "json-rest-api","docs/GUIDE/GUIDE_2_1_The_Starting_Point.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
22
- "json-rest-api","docs/GUIDE/GUIDE_2_2_Manipulating_And_Searching_Tables.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
23
- "json-rest-api","docs/GUIDE/GUIDE_2_3_BelongsTo_Relationships.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
24
- "json-rest-api","docs/GUIDE/GUIDE_2_4_HasMany_Records.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
25
- "json-rest-api","docs/GUIDE/GUIDE_2_5_HasMany_Polymorphic.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
26
- "json-rest-api","docs/GUIDE/GUIDE_2_6_Many_To_Many.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
27
- "json-rest-api","docs/GUIDE/GUIDE_2_7_Pagination_And_Ordering.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
28
- "json-rest-api","docs/GUIDE/GUIDE_2_8_Effects_of_PUT_and_PATCH.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
29
- "json-rest-api","docs/GUIDE/GUIDE_2_9_Relationships_Urls.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
30
- "json-rest-api","docs/GUIDE/GUIDE_2_Data_And_Relations.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
31
- "json-rest-api","docs/GUIDE/GUIDE_3_Field_Transformations.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
32
- "json-rest-api","docs/GUIDE/GUIDE_4_Authentication_And_Permissions.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
33
- "json-rest-api","docs/GUIDE/GUIDE_5_Non-Db_Resources.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
34
- "json-rest-api","docs/GUIDE/GUIDE_6_Positioning.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
35
- "json-rest-api","docs/GUIDE/GUIDE_7_Hooks_Data_Management_And_Plugins.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
36
- "json-rest-api","docs/GUIDE/GUIDE_X_Bulk_Operations.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
37
- "json-rest-api","docs/GUIDE/GUIDE_X_Cors.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
38
- "json-rest-api","docs/GUIDE/GUIDE_X_File_Uploads.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
39
- "json-rest-api","docs/GUIDE/GUIDE_X_Multihome.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
40
- "json-rest-api","docs/GUIDE/GUIDE_X_SocketIO.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
41
- "json-rest-api","docs/GUIDE/GUIDE_X_URL_Management.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
42
- "json-rest-api","docs/GUIDE/GUIDE_Y_Appendices.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
43
- "json-rest-api","docs/GUIDE/index.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
44
- "json-rest-api","docs/index.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
45
- "json-rest-api","docs/mini-guides/file-uploads-complete.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
46
- "json-rest-api","docs/ONBOARDING.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
47
- "json-rest-api","docs/QUICKSTART.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
48
- "json-rest-api","eslint.config.js","meta","docs-drift","supporting","pending","pending","no","no","audit/subsystems/docs-drift.md"
49
- "json-rest-api","examples/url-override-example.js","tooling","docs-drift","supporting","pending","pending","no","no","audit/subsystems/docs-drift.md"
50
- "json-rest-api","index.js","runtime-core","rest-orchestration","important","pending","pending","no","no","audit/subsystems/rest-orchestration.md"
51
- "json-rest-api","lib/enhanced-logger.js","runtime-core","rest-orchestration","important","pending","pending","no","no","audit/subsystems/rest-orchestration.md"
52
- "json-rest-api","lib/error-formatter.js","runtime-core","rest-orchestration","important","pending","pending","no","no","audit/subsystems/rest-orchestration.md"
53
- "json-rest-api","lib/rest-api-errors.js","runtime-core","rest-orchestration","important","pending","pending","no","no","audit/subsystems/rest-orchestration.md"
54
- "json-rest-api","LICENSE","support","docs-drift","supporting","pending","pending","no","no","audit/subsystems/docs-drift.md"
55
- "json-rest-api","package-lock.json","meta","docs-drift","supporting","pending","pending","no","no","audit/subsystems/docs-drift.md"
56
- "json-rest-api","package.json","meta","docs-drift","supporting","pending","pending","no","no","audit/subsystems/docs-drift.md"
57
- "json-rest-api","plugins/core/bulk-operations-plugin.js","plugin","plugins-bulk","critical","yes","yes","yes","yes","audit/subsystems/plugins-bulk.md"
58
- "json-rest-api","plugins/core/connectors/express-plugin.js","transport","transport-express","critical","yes","yes","yes","yes","audit/subsystems/transport-express.md"
59
- "json-rest-api","plugins/core/connectors/lib/busboy-detector.js","transport","transport-express","critical","yes","yes","no","no","audit/subsystems/transport-express.md"
60
- "json-rest-api","plugins/core/connectors/lib/formidable-detector.js","transport","transport-express","critical","yes","yes","no","no","audit/subsystems/transport-express.md"
61
- "json-rest-api","plugins/core/connectors/lib/request-helpers.js","transport","transport-express","critical","yes","yes","no","no","audit/subsystems/transport-express.md"
62
- "json-rest-api","plugins/core/file-handling-plugin.js","plugin","plugins-file","critical","yes","yes","no","no","audit/subsystems/plugins-file.md"
63
- "json-rest-api","plugins/core/lib/dbTablesOperations.js","runtime-storage","storage-knex","critical","yes","yes","no","no","audit/subsystems/storage-knex.md"
64
- "json-rest-api","plugins/core/lib/fractional-positioning.js","plugin","plugins-positioning","critical","yes","yes","no","no","audit/subsystems/plugins-positioning.md"
65
- "json-rest-api","plugins/core/lib/querying-writing/compile-schemas.js","runtime-storage","storage-knex","critical","yes","yes","yes","yes","audit/subsystems/storage-knex.md"
66
- "json-rest-api","plugins/core/lib/querying-writing/connectors-query-parser.js","runtime-storage","storage-knex","critical","yes","yes","no","no","audit/subsystems/storage-knex.md"
67
- "json-rest-api","plugins/core/lib/querying-writing/database-capabilities.js","runtime-storage","storage-knex","critical","yes","yes","no","no","audit/subsystems/storage-knex.md"
68
- "json-rest-api","plugins/core/lib/querying-writing/database-value-normalizers.js","runtime-storage","storage-knex","critical","yes","yes","no","no","audit/subsystems/storage-knex.md"
69
- "json-rest-api","plugins/core/lib/querying-writing/default-data-helpers.js","runtime-storage","storage-knex","critical","yes","yes","no","no","audit/subsystems/storage-knex.md"
70
- "json-rest-api","plugins/core/lib/querying-writing/field-utils.js","runtime-storage","storage-knex","critical","yes","yes","no","no","audit/subsystems/storage-knex.md"
71
- "json-rest-api","plugins/core/lib/querying-writing/knex-constants.js","runtime-storage","storage-knex","critical","yes","yes","no","no","audit/subsystems/storage-knex.md"
72
- "json-rest-api","plugins/core/lib/querying-writing/knex-field-helpers.js","runtime-storage","storage-knex","critical","yes","yes","yes","yes","audit/subsystems/storage-knex.md"
73
- "json-rest-api","plugins/core/lib/querying-writing/knex-json-api-transformers.js","runtime-storage","storage-knex","critical","yes","yes","no","no","audit/subsystems/storage-knex.md"
74
- "json-rest-api","plugins/core/lib/querying-writing/payload-validators.js","runtime-storage","storage-knex","critical","yes","yes","yes","yes","audit/subsystems/storage-knex.md"
75
- "json-rest-api","plugins/core/lib/querying-writing/schema-helpers.js","runtime-storage","storage-knex","critical","yes","yes","no","no","audit/subsystems/storage-knex.md"
76
- "json-rest-api","plugins/core/lib/querying-writing/scope-validations.js","runtime-storage","storage-knex","critical","yes","yes","no","no","audit/subsystems/storage-knex.md"
77
- "json-rest-api","plugins/core/lib/querying-writing/simplified-helpers.js","runtime-storage","storage-knex","critical","yes","yes","no","no","audit/subsystems/storage-knex.md"
78
- "json-rest-api","plugins/core/lib/querying/knex-cross-table-search.js","runtime-query","query-engine","critical","yes","yes","no","no","audit/subsystems/query-engine.md"
79
- "json-rest-api","plugins/core/lib/querying/knex-json-api-transformers-querying.js","runtime-query","query-engine","critical","yes","yes","no","no","audit/subsystems/query-engine.md"
80
- "json-rest-api","plugins/core/lib/querying/knex-pagination-helpers.js","runtime-query","query-engine","critical","yes","yes","no","no","audit/subsystems/query-engine.md"
81
- "json-rest-api","plugins/core/lib/querying/knex-process-includes.js","runtime-query","query-engine","critical","yes","yes","no","no","audit/subsystems/query-engine.md"
82
- "json-rest-api","plugins/core/lib/querying/knex-query-helpers-base.js","runtime-query","query-engine","critical","yes","yes","no","no","audit/subsystems/query-engine.md"
83
- "json-rest-api","plugins/core/lib/querying/knex-query-helpers.js","runtime-query","query-engine","critical","yes","yes","no","no","audit/subsystems/query-engine.md"
84
- "json-rest-api","plugins/core/lib/querying/knex-relationship-includes.js","runtime-query","query-engine","critical","yes","yes","yes","yes","audit/subsystems/query-engine.md"
85
- "json-rest-api","plugins/core/lib/querying/knex-window-queries.js","runtime-query","query-engine","critical","yes","yes","no","no","audit/subsystems/query-engine.md"
86
- "json-rest-api","plugins/core/lib/querying/url-helpers.js","runtime-query","query-engine","critical","yes","yes","no","no","audit/subsystems/query-engine.md"
87
- "json-rest-api","plugins/core/lib/storage/storage-adapter.js","runtime-storage","storage-knex","critical","yes","yes","no","no","audit/subsystems/storage-knex.md"
88
- "json-rest-api","plugins/core/lib/writing/knex-json-api-transformers-writing.js","support","docs-drift","supporting","pending","pending","no","no","audit/subsystems/docs-drift.md"
89
- "json-rest-api","plugins/core/lib/writing/many-to-many-manipulations.js","runtime-relationships","relationships","critical","yes","yes","yes","yes","audit/subsystems/relationships.md"
90
- "json-rest-api","plugins/core/lib/writing/relationship-processor.js","runtime-relationships","relationships","critical","yes","yes","yes","yes","audit/subsystems/relationships.md"
91
- "json-rest-api","plugins/core/rest-api-access.js","plugin","plugins-access","critical","yes","yes","yes","yes","audit/subsystems/plugins-access.md"
92
- "json-rest-api","plugins/core/rest-api-cors-plugin.js","plugin","plugins-cors","critical","yes","yes","yes","yes","audit/subsystems/plugins-cors.md"
93
- "json-rest-api","plugins/core/rest-api-knex-plugin.js","runtime-storage","storage-knex","critical","yes","yes","yes","yes","audit/subsystems/storage-knex.md"
94
- "json-rest-api","plugins/core/rest-api-label-plugin.js","support","docs-drift","supporting","pending","pending","no","no","audit/subsystems/docs-drift.md"
95
- "json-rest-api","plugins/core/rest-api-multihome-plugin.js","plugin","plugins-multihome","critical","yes","yes","yes","yes","audit/subsystems/plugins-multihome.md"
96
- "json-rest-api","plugins/core/rest-api-plugin-hooks/compile-resource-schemas.js","runtime-orchestration","rest-orchestration","critical","yes","yes","no","no","audit/subsystems/rest-orchestration.md"
97
- "json-rest-api","plugins/core/rest-api-plugin-hooks/register-relationship-routes.js","runtime-orchestration","rest-orchestration","critical","yes","yes","no","no","audit/subsystems/rest-orchestration.md"
98
- "json-rest-api","plugins/core/rest-api-plugin-hooks/register-scope-routes.js","runtime-orchestration","rest-orchestration","critical","yes","yes","no","no","audit/subsystems/rest-orchestration.md"
99
- "json-rest-api","plugins/core/rest-api-plugin-hooks/turn-scope-init-into-vars.js","runtime-orchestration","rest-orchestration","critical","yes","yes","no","no","audit/subsystems/rest-orchestration.md"
100
- "json-rest-api","plugins/core/rest-api-plugin-hooks/validate-include-configurations.js","runtime-orchestration","rest-orchestration","critical","yes","yes","no","no","audit/subsystems/rest-orchestration.md"
101
- "json-rest-api","plugins/core/rest-api-plugin-methods/add-route.js","runtime-orchestration","rest-orchestration","critical","yes","yes","no","no","audit/subsystems/rest-orchestration.md"
102
- "json-rest-api","plugins/core/rest-api-plugin-methods/check-permissions.js","runtime-orchestration","rest-orchestration","critical","yes","yes","no","no","audit/subsystems/rest-orchestration.md"
103
- "json-rest-api","plugins/core/rest-api-plugin-methods/common.js","runtime-orchestration","rest-orchestration","critical","yes","yes","yes","yes","audit/subsystems/rest-orchestration.md"
104
- "json-rest-api","plugins/core/rest-api-plugin-methods/delete-relationship.js","runtime-relationships","relationships","critical","yes","yes","yes","yes","audit/subsystems/relationships.md"
105
- "json-rest-api","plugins/core/rest-api-plugin-methods/delete.js","runtime-orchestration","rest-orchestration","critical","yes","yes","yes","yes","audit/subsystems/rest-orchestration.md"
106
- "json-rest-api","plugins/core/rest-api-plugin-methods/enrich-attributes.js","runtime-orchestration","rest-orchestration","critical","yes","yes","no","no","audit/subsystems/rest-orchestration.md"
107
- "json-rest-api","plugins/core/rest-api-plugin-methods/get-related.js","runtime-relationships","relationships","critical","yes","yes","yes","yes","audit/subsystems/relationships.md"
108
- "json-rest-api","plugins/core/rest-api-plugin-methods/get-relationship.js","runtime-relationships","relationships","critical","yes","yes","yes","yes","audit/subsystems/relationships.md"
109
- "json-rest-api","plugins/core/rest-api-plugin-methods/get.js","runtime-orchestration","rest-orchestration","critical","yes","yes","yes","yes","audit/subsystems/rest-orchestration.md"
110
- "json-rest-api","plugins/core/rest-api-plugin-methods/patch-relationship.js","runtime-relationships","relationships","critical","yes","yes","yes","yes","audit/subsystems/relationships.md"
111
- "json-rest-api","plugins/core/rest-api-plugin-methods/patch.js","runtime-orchestration","rest-orchestration","critical","yes","yes","yes","yes","audit/subsystems/rest-orchestration.md"
112
- "json-rest-api","plugins/core/rest-api-plugin-methods/post-relationship.js","runtime-relationships","relationships","critical","yes","yes","yes","yes","audit/subsystems/relationships.md"
113
- "json-rest-api","plugins/core/rest-api-plugin-methods/post.js","runtime-orchestration","rest-orchestration","critical","yes","yes","yes","yes","audit/subsystems/rest-orchestration.md"
114
- "json-rest-api","plugins/core/rest-api-plugin-methods/put.js","runtime-orchestration","rest-orchestration","critical","yes","yes","yes","yes","audit/subsystems/rest-orchestration.md"
115
- "json-rest-api","plugins/core/rest-api-plugin-methods/query.js","runtime-query","query-engine","critical","yes","yes","yes","yes","audit/subsystems/query-engine.md"
116
- "json-rest-api","plugins/core/rest-api-plugin-methods/release.js","runtime-orchestration","rest-orchestration","critical","yes","yes","no","no","audit/subsystems/rest-orchestration.md"
117
- "json-rest-api","plugins/core/rest-api-plugin.js","runtime-orchestration","rest-orchestration","critical","yes","yes","yes","yes","audit/subsystems/rest-orchestration.md"
118
- "json-rest-api","plugins/core/rest-api-positioning-plugin.js","plugin","plugins-positioning","critical","yes","yes","yes","yes","audit/subsystems/plugins-positioning.md"
119
- "json-rest-api","plugins/core/socketio-plugin.js","plugin","plugins-socketio","critical","yes","yes","yes","yes","audit/subsystems/plugins-socketio.md"
120
- "json-rest-api","plugins/storage/local-storage.js","plugin","plugins-file","critical","yes","yes","no","no","audit/subsystems/plugins-file.md"
121
- "json-rest-api","plugins/storage/s3-storage.js","plugin","plugins-file","critical","yes","yes","no","no","audit/subsystems/plugins-file.md"
122
- "json-rest-api","quickTest.js","tooling","docs-drift","supporting","pending","pending","no","no","audit/subsystems/docs-drift.md"
123
- "json-rest-api","README.md","docs","docs-drift","supporting","pending","pending","no","no","audit/subsystems/docs-drift.md"
124
- "json-rest-api","scripts/run-docs.js","tooling","docs-drift","supporting","pending","pending","no","no","audit/subsystems/docs-drift.md"
125
- "json-rest-api","test-debug.js","tooling","docs-drift","supporting","pending","pending","no","no","audit/subsystems/docs-drift.md"
126
- "json-rest-api","tests/bulk-operations.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
127
- "json-rest-api","tests/computed-fields.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
128
- "json-rest-api","tests/cors.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
129
- "json-rest-api","tests/curl.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
130
- "json-rest-api","tests/custom-idproperty-relationships.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
131
- "json-rest-api","tests/field-getters.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
132
- "json-rest-api","tests/field-setters.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
133
- "json-rest-api","tests/fixtures/api-configs.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
134
- "json-rest-api","tests/helpers/storage-mode.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
135
- "json-rest-api","tests/helpers/test-utils.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
136
- "json-rest-api","tests/include-depth-validation.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
137
- "json-rest-api","tests/includes.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
138
- "json-rest-api","tests/multihome.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
139
- "json-rest-api","tests/nested-includes.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
140
- "json-rest-api","tests/ownership-optout.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
141
- "json-rest-api","tests/pagination-cursor-multifield.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
142
- "json-rest-api","tests/pagination-enhanced.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
143
- "json-rest-api","tests/polymorphic-relationships.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
144
- "json-rest-api","tests/polymorphic-simple.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
145
- "json-rest-api","tests/positioning-advanced.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
146
- "json-rest-api","tests/positioning-extended.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
147
- "json-rest-api","tests/positioning-multifilter.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
148
- "json-rest-api","tests/positioning.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
149
- "json-rest-api","tests/queries.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
150
- "json-rest-api","tests/query-limits.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
151
- "json-rest-api","tests/README.md","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
152
- "json-rest-api","tests/relationship-endpoints.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
153
- "json-rest-api","tests/relationships.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
154
- "json-rest-api","tests/rest-api-access.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
155
- "json-rest-api","tests/rest-api.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
156
- "json-rest-api","tests/searchschema-merge.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
157
- "json-rest-api","tests/socketio.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
158
- "json-rest-api","tests/TEST_TEMPLATE.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
159
- "json-rest-api","tests/test-development-guide.md","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
160
- "json-rest-api","tests/virtual-fields.test.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
161
- "json-rest-api","TODO.todo","meta","docs-drift","supporting","pending","pending","no","no","audit/subsystems/docs-drift.md"
162
- "json-rest-schema",".gitignore","support","docs-drift","supporting","pending","pending","no","no","audit/subsystems/docs-drift.md"
163
- "json-rest-schema","eslint.config.js","meta","schema-core","supporting","pending","pending","no","no","audit/subsystems/schema-core.md"
164
- "json-rest-schema","example.js","meta","schema-core","supporting","pending","pending","no","no","audit/subsystems/schema-core.md"
165
- "json-rest-schema","FUTURE_MIGRATION_MODULE.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
166
- "json-rest-schema","ONBOARDING.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
167
- "json-rest-schema","package-lock.json","meta","schema-core","supporting","pending","pending","no","no","audit/subsystems/schema-core.md"
168
- "json-rest-schema","package.json","meta","schema-core","supporting","pending","pending","no","no","audit/subsystems/schema-core.md"
169
- "json-rest-schema","README.md","docs","docs-drift","important","pending","pending","no","no","audit/subsystems/docs-drift.md"
170
- "json-rest-schema","src/CorePlugin.js","schema-runtime","schema-core","critical","yes","yes","yes","yes","audit/subsystems/schema-core.md"
171
- "json-rest-schema","src/index.js","schema-runtime","schema-core","critical","yes","yes","yes","yes","audit/subsystems/schema-core.md"
172
- "json-rest-schema","src/Schema.js","schema-runtime","schema-core","critical","yes","yes","yes","yes","audit/subsystems/schema-core.md"
173
- "json-rest-schema","test-knex-table-real.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
174
- "json-rest-schema","tests.js","tests","tests","important","pending","pending","no","no","audit/subsystems/tests.md"
@@ -1,123 +0,0 @@
1
- # Architecture Invariants (Final, non-anyapi)
2
-
3
- Scope note: anyapi-specific code paths are excluded from invariant evaluation.
4
- Status legend: `pass | fail | partial`.
5
- Assertion tags: `[Verified]`, `[Inferred]`.
6
-
7
- ## Summary Table
8
-
9
- | Invariant | Status | Confidence | Key evidence |
10
- |---|---|---:|---|
11
- | INV-001 Transactional mutation + rollback safety | fail | C5 | `patchRelationship` runtime `ReferenceError` in error path; catch handler broken |
12
- | INV-002 Permission checks before irreversible side effects | pass | C4 | method ordering + access/multihome tests |
13
- | INV-003 Validation/type normalization before query/write | pass | C4 | payload validators before data helpers; runtime malformed payload rejection |
14
- | INV-004 Relationship semantics consistency across write + relationship endpoints | partial | C4 | post/delete endpoint pass + patch endpoint error-path defect |
15
- | INV-005 idProperty consistency in query/write/transform/response | pass | C4 | compile + knex idProperty paths + custom idProperty tests |
16
- | INV-006 Sparse fieldsets do not leak hidden/internal fields | pass | C4 | field helper behavior + virtual/computed/fieldset tests |
17
- | INV-007 Include processing avoids N+1 in standard scenarios | partial | C3 | include correctness tests pass; no query-count budget assertions |
18
- | INV-008 Error envelope consistency across transport and method paths | fail | C4 | CORS blocked-origin envelope mismatch + patchRelationship error-path mismatch |
19
- | INV-009 Multi-tenant/ownership filters non-bypassable across alternate paths | partial | C3 | access/multihome checks pass; bypass matrix not exhaustive |
20
- | INV-010 Plugin side effects scoped and contract-safe | partial | C4 | positioning test failures + inferred bulk optimization dead-path |
21
- | INV-011 Docs claims match observed critical behavior | partial | C4 | `included` write docs/code mismatch; compliance wording drift |
22
- | INV-012 Tests cover critical invariants (not just happy paths) | partial | C4 | broad suite + explicit gaps (skipped tests, missing patchRelationship regression) |
23
-
24
- ## INV-001 Transactional mutation + rollback safety
25
- - [Verified][C5] `patch-relationship` catch path references undefined `handleWriteMethodError`, breaking canonical rollback/error handler path.
26
- - Code evidence:
27
- - [patch-relationship.js:52](/home/merc/Development/current/json-rest-api/plugins/core/rest-api-plugin-methods/patch-relationship.js:52)
28
- - [common.js:198](/home/merc/Development/current/json-rest-api/plugins/core/rest-api-plugin-methods/common.js:198)
29
- - Runtime evidence:
30
- - [probe-patch-relationship-referenceerror.log](/home/merc/Development/current/json-rest-api/audit/evidence/runtime/probe-patch-relationship-referenceerror.log)
31
- - Existing tests mapped:
32
- - `tests/relationship-endpoints.test.js` covers post/delete but not patch failure path.
33
- - Scenario validation:
34
- - malformed relationship payload -> `ReferenceError: handleWriteMethodError is not defined`.
35
- - Final: `fail`.
36
- - Remediation pointer: `ROADMAP-A-001`.
37
-
38
- ## INV-002 Permission checks before irreversible side effects
39
- - [Verified][C4] CRUD method paths call `scope.checkPermissions` before `helpers.dataPost|Put|Patch|Delete`.
40
- - Code evidence: [post.js](/home/merc/Development/current/json-rest-api/plugins/core/rest-api-plugin-methods/post.js), [put.js](/home/merc/Development/current/json-rest-api/plugins/core/rest-api-plugin-methods/put.js), [patch.js](/home/merc/Development/current/json-rest-api/plugins/core/rest-api-plugin-methods/patch.js), [delete.js](/home/merc/Development/current/json-rest-api/plugins/core/rest-api-plugin-methods/delete.js).
41
- - Test evidence: `tests/rest-api-access.test.js`, `tests/multihome.test.js`, `tests/ownership-optout.test.js` (all in full suite run).
42
- - Final: `pass`.
43
-
44
- ## INV-003 Validation/type normalization before query construction and writes
45
- - [Verified][C4] Method flows validate payload/query before storage helper calls.
46
- - Code evidence: [payload-validators.js](/home/merc/Development/current/json-rest-api/plugins/core/lib/querying-writing/payload-validators.js), [query.js](/home/merc/Development/current/json-rest-api/plugins/core/rest-api-plugin-methods/query.js), [common.js](/home/merc/Development/current/json-rest-api/plugins/core/rest-api-plugin-methods/common.js).
47
- - Runtime evidence: malformed relationship payload rejected in probe before successful write (`REST_API_PAYLOAD` emitted before endpoint-level failure masking).
48
- - Final: `pass`.
49
-
50
- ## INV-004 Relationship semantics consistency across POST/PUT/PATCH + relationship endpoints
51
- - [Verified][C4] POST/DELETE relationship endpoints pass in regression tests.
52
- - [Verified][C5] PATCH relationship endpoint has broken failure semantics (`ReferenceError`).
53
- - Evidence:
54
- - [trace-relationship-endpoints.md](/home/merc/Development/current/json-rest-api/audit/traces/trace-relationship-endpoints.md)
55
- - `audit/evidence/tests/npm-test-json-rest-api.log:5050,5060`
56
- - Final: `partial`.
57
- - Remediation pointer: `ROADMAP-A-001`, `ROADMAP-A-003`.
58
-
59
- ## INV-005 idProperty consistency in query/write/transform/response
60
- - [Verified][C4] `idProperty` appears in compile metadata and knex read/write helpers.
61
- - Code evidence: [compile-schemas.js](/home/merc/Development/current/json-rest-api/plugins/core/lib/querying-writing/compile-schemas.js), [rest-api-knex-plugin.js](/home/merc/Development/current/json-rest-api/plugins/core/rest-api-knex-plugin.js).
62
- - Test evidence: `tests/custom-idproperty-relationships.test.js` passes in full run.
63
- - Final: `pass`.
64
-
65
- ## INV-006 Sparse fieldsets do not leak hidden/internal fields
66
- - [Verified][C4] field helper enforces hidden/sparse behavior and throws on unknown fields.
67
- - Code evidence: [knex-field-helpers.js](/home/merc/Development/current/json-rest-api/plugins/core/lib/querying-writing/knex-field-helpers.js).
68
- - Test evidence: `tests/virtual-fields.test.js`, `tests/computed-fields.test.js`, `tests/field-getters.test.js` pass in full suite.
69
- - Final: `pass`.
70
-
71
- ## INV-007 Include processing avoids N+1 in standard scenarios
72
- - [Verified][C3] include behavior is functionally correct in test suite.
73
- - [Inferred][C3] batching present in include code; no direct query-count budget test.
74
- - Evidence:
75
- - [knex-relationship-includes.js](/home/merc/Development/current/json-rest-api/plugins/core/lib/querying/knex-relationship-includes.js)
76
- - `tests/includes.test.js`, `tests/nested-includes.test.js`
77
- - Final: `partial`.
78
- - Remediation pointer: `ROADMAP-B-003`.
79
-
80
- ## INV-008 Error envelope consistency across transport and method paths
81
- - [Verified][C4] CORS blocked-origin path returns `{ error: ... }` shape, diverging from JSON:API `errors` envelope.
82
- - [Verified][C5] `patchRelationship` failure path returns runtime `ReferenceError` instead of normalized rest-api envelope.
83
- - Evidence:
84
- - [rest-api-cors-plugin.js:112](/home/merc/Development/current/json-rest-api/plugins/core/rest-api-cors-plugin.js:112)
85
- - [probe-patch-relationship-referenceerror.log](/home/merc/Development/current/json-rest-api/audit/evidence/runtime/probe-patch-relationship-referenceerror.log)
86
- - Final: `fail`.
87
- - Remediation pointer: `ROADMAP-A-001`, `ROADMAP-B-002`.
88
-
89
- ## INV-009 Multi-tenant and ownership filters non-bypassable
90
- - [Verified][C4] plugin-level filtering + permission checks exist and tests pass.
91
- - [Inferred][C3] alternate-path bypass matrix (relationship endpoints + includes + custom filters) not exhaustively runtime-proven.
92
- - Evidence:
93
- - [rest-api-access.js](/home/merc/Development/current/json-rest-api/plugins/core/rest-api-access.js)
94
- - [rest-api-multihome-plugin.js](/home/merc/Development/current/json-rest-api/plugins/core/rest-api-multihome-plugin.js)
95
- - `tests/rest-api-access.test.js`, `tests/multihome.test.js`
96
- - Final: `partial`.
97
- - Remediation pointer: `ROADMAP-B-004`.
98
-
99
- ## INV-010 Plugin side effects remain scoped and contract-safe
100
- - [Verified][C5] positioning plugin currently has failing multifilter edge tests.
101
- - [Inferred][C3] bulk optimization hook may be non-executed/dead path.
102
- - Evidence:
103
- - `audit/evidence/tests/npm-test-json-rest-api.log:4235-4296`
104
- - [bulk-operations-plugin.js](/home/merc/Development/current/json-rest-api/plugins/core/bulk-operations-plugin.js)
105
- - Final: `partial`.
106
- - Remediation pointer: `ROADMAP-A-002`, `ROADMAP-B-001`.
107
-
108
- ## INV-011 Documentation claims match observed behavior
109
- - [Verified][C4] docs/comments claim patterns conflict with runtime behavior for write `included` handling.
110
- - Evidence:
111
- - [payload-validators.js](/home/merc/Development/current/json-rest-api/plugins/core/lib/querying-writing/payload-validators.js)
112
- - [common.js](/home/merc/Development/current/json-rest-api/plugins/core/rest-api-plugin-methods/common.js)
113
- - [docs-drift.md](/home/merc/Development/current/json-rest-api/audit/subsystems/docs-drift.md)
114
- - Final: `partial`.
115
- - Remediation pointer: `ROADMAP-B-005`.
116
-
117
- ## INV-012 Tests cover critical invariants beyond happy paths
118
- - [Verified][C4] suite breadth is high, but critical gaps remain.
119
- - Gap evidence:
120
- - skipped cursor tests: [skipped-tests.txt](/home/merc/Development/current/json-rest-api/audit/evidence/tests/skipped-tests.txt)
121
- - no direct regression for `patchRelationship` failure path before this audit probe.
122
- - Final: `partial`.
123
- - Remediation pointer: `ROADMAP-A-003`, `ROADMAP-B-003`.
@@ -1,56 +0,0 @@
1
- # Standards Rubric (M6, non-anyapi)
2
-
3
- ## Corpus freeze and sources
4
- - JSON:API spec: `https://jsonapi.org/format/`
5
- - HTTP Semantics: `https://www.rfc-editor.org/rfc/rfc9110`
6
- - HTTP PATCH: `https://www.rfc-editor.org/rfc/rfc5789`
7
- - Source snapshots:
8
- - [standard-jsonapi-snippets.txt](/home/merc/Development/current/json-rest-api/audit/evidence/external/standard-jsonapi-snippets.txt)
9
- - [standard-rfc-snippets.txt](/home/merc/Development/current/json-rest-api/audit/evidence/external/standard-rfc-snippets.txt)
10
-
11
- Scoring scale: `1` poor, `3` mixed, `5` strong.
12
-
13
- ## Criteria IDs
14
- - `STD-JAPI-01` JSON:API media/document envelope compliance.
15
- - `STD-JAPI-02` Relationship endpoint semantics and consistency.
16
- - `STD-HTTP-01` HTTP status code correctness.
17
- - `STD-HTTP-02` PATCH semantics and failure atomicity handling.
18
- - `STD-ERR-01` Error envelope quality/consistency.
19
- - `STD-SEC-01` Secure defaults and trust-boundary explicitness.
20
- - `STD-EXT-01` Extensibility/configurability hygiene.
21
- - `STD-OBS-01` Observability/operability diagnostics.
22
- - `STD-BC-01` Backward compatibility posture.
23
- - `STD-DOC-01` Documentation reliability.
24
-
25
- ## Gap Matrix
26
-
27
- | ID | Score | Evidence-backed assessment | Gap class | Severity | Confidence |
28
- |---|---:|---|---|---|---|
29
- | STD-JAPI-01 | 3.5 | Core JSON:API document structures and media-type handling are broadly implemented; explicit JSON:API error object support exists in error classes. | design choice | medium | C4 |
30
- | STD-JAPI-02 | 2.5 | Relationship POST/DELETE endpoint paths pass; PATCH relationship error path is runtime-broken (`ReferenceError`), reducing conformance reliability. | defect | high | C5 |
31
- | STD-HTTP-01 | 4.0 | Transport maps major codes (400/403/404/415/500) and method-specific 201/204 behavior correctly in most paths. | design choice | low | C4 |
32
- | STD-HTTP-02 | 2.5 | PATCH baseline works for normal resource updates, but error-path handler defect in relationship PATCH violates robust failure handling expectations. | defect | high | C5 |
33
- | STD-ERR-01 | 2.0 | Envelope inconsistency observed: CORS blocked-origin returns `{ error: ... }`; relationship PATCH can surface raw `ReferenceError`. | defect | high | C4 |
34
- | STD-SEC-01 | 3.0 | Access/multitenancy plugins provide meaningful controls, but default CORS option combinations and error leakage behavior require explicit hardening guidance. | design choice | medium | C3 |
35
- | STD-EXT-01 | 3.5 | Hook/plugin architecture is flexible; bulk optimization hook path appears under-specified in execution wiring. | design choice | medium | C3 |
36
- | STD-OBS-01 | 3.0 | Logging is rich and structured, but unknown exceptions can surface raw messages; limited audit-style invariant telemetry. | design choice | medium | C3 |
37
- | STD-BC-01 | 2.5 | No explicit compatibility matrix/deprecation contract found; test failures indicate regression detection exists but policy is implicit. | documentation drift | medium | C3 |
38
- | STD-DOC-01 | 2.5 | Critical docs/comments drift found (`included` write behavior mismatch) and compliance language overstates edge consistency. | documentation drift | medium | C4 |
39
-
40
- ## Rule-by-rule evidence pointers
41
- - Runtime and traces:
42
- - [trace-write-patch.md](/home/merc/Development/current/json-rest-api/audit/traces/trace-write-patch.md)
43
- - [trace-relationship-endpoints.md](/home/merc/Development/current/json-rest-api/audit/traces/trace-relationship-endpoints.md)
44
- - [probe-patch-relationship-referenceerror.log](/home/merc/Development/current/json-rest-api/audit/evidence/runtime/probe-patch-relationship-referenceerror.log)
45
- - Code:
46
- - [patch-relationship.js](/home/merc/Development/current/json-rest-api/plugins/core/rest-api-plugin-methods/patch-relationship.js)
47
- - [rest-api-cors-plugin.js](/home/merc/Development/current/json-rest-api/plugins/core/rest-api-cors-plugin.js)
48
- - [express-plugin.js](/home/merc/Development/current/json-rest-api/plugins/core/connectors/express-plugin.js)
49
- - [common.js](/home/merc/Development/current/json-rest-api/plugins/core/rest-api-plugin-methods/common.js)
50
- - Docs drift:
51
- - [docs-drift.md](/home/merc/Development/current/json-rest-api/audit/subsystems/docs-drift.md)
52
-
53
- ## Standards takeaways
54
- - Strongest: method ordering discipline (validation/permissions before writes), broad JSON:API-oriented structure support, plugin extensibility.
55
- - Weakest: failure-path consistency for relationship PATCH and error envelope uniformity.
56
- - Immediate standards-critical fixes: `STD-JAPI-02`, `STD-HTTP-02`, `STD-ERR-01`.
@@ -1,77 +0,0 @@
1
- # Competitor Rubric (M6, non-anyapi)
2
-
3
- ## Comparator set (frozen)
4
- 1. `jsonapi-serializer`
5
- 2. `json-api-serializer`
6
- 3. `jsonapi-server` (used as closest available lineage for requested `@jsonapi/server`; npm package `@jsonapi/server` is not found)
7
- 4. `fortune` (+ JSON:API plugin model)
8
- 5. NestJS JSON:API ecosystem (`nestjs-json-api`, `@yaser2us/json-api-nestjs`)
9
- 6. `@jsonapi-serde/server` (+ `@jsonapi-serde/openapi`)
10
-
11
- ## Source evidence
12
- - Package metadata and recency:
13
- - [npm-competitor-metadata.txt](/home/merc/Development/current/json-rest-api/audit/evidence/external/npm-competitor-metadata.txt)
14
- - [npm-jsonapi-server.txt](/home/merc/Development/current/json-rest-api/audit/evidence/external/npm-jsonapi-server.txt)
15
- - [npm-modern-jsonapi-metadata.txt](/home/merc/Development/current/json-rest-api/audit/evidence/external/npm-modern-jsonapi-metadata.txt)
16
- - Activity/adoption signal:
17
- - [npm-download-signals.txt](/home/merc/Development/current/json-rest-api/audit/evidence/external/npm-download-signals.txt)
18
- - Capability claims (maintainer readmes):
19
- - [readme-jsonapi-serializer-signals.txt](/home/merc/Development/current/json-rest-api/audit/evidence/external/readme-jsonapi-serializer-signals.txt)
20
- - [readme-json-api-serializer-signals.txt](/home/merc/Development/current/json-rest-api/audit/evidence/external/readme-json-api-serializer-signals.txt)
21
- - [readme-jsonapi-server-signals.txt](/home/merc/Development/current/json-rest-api/audit/evidence/external/readme-jsonapi-server-signals.txt)
22
- - [readme-fortune-signals.txt](/home/merc/Development/current/json-rest-api/audit/evidence/external/readme-fortune-signals.txt)
23
- - [readme-nestjs-json-api-signals.txt](/home/merc/Development/current/json-rest-api/audit/evidence/external/readme-nestjs-json-api-signals.txt)
24
- - [readme-yaser-json-api-nestjs-signals.txt](/home/merc/Development/current/json-rest-api/audit/evidence/external/readme-yaser-json-api-nestjs-signals.txt)
25
- - [readme-jsonapi-serde-server.md](/home/merc/Development/current/json-rest-api/audit/evidence/external/readme-jsonapi-serde-server.md)
26
-
27
- ## Facts (separated from interpretation)
28
- - [Fact] `@jsonapi/server` package is not available on npm (404 in metadata capture).
29
- - [Fact] Recent updates (2026) are visible for `jsonapi-serializer` and `@jsonapi-serde/*`; several alternatives last modified in 2022.
30
- - [Fact] Download volume is highest for serializer-focused packages; full-server JSON:API frameworks show lower monthly downloads.
31
- - [Fact] `fortune` emphasizes graph relationships/inverse updates and adapter model; JSON:API is via plugin.
32
- - [Fact] NestJS ecosystem options expose decorator-based CRUD/relationship endpoints and query features.
33
-
34
- ## Normalized scoring dimensions
35
- Scoring scale: `1` weak, `3` mixed, `5` strong.
36
-
37
- Dimensions:
38
- - compliance depth
39
- - architecture flexibility
40
- - extensibility model
41
- - relationship capability depth
42
- - query/include sophistication
43
- - performance strategy
44
- - operational ergonomics
45
- - security posture
46
- - DX/migration complexity
47
- - maintenance health
48
-
49
- ## Scored matrix (interpretation)
50
-
51
- | Comparator | Compliance | Flexibility | Extensibility | Relationships | Query/Include | Performance | Ops ergonomics | Security posture | DX/migration | Maintenance |
52
- |---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|
53
- | jsonapi-serializer | 2.5 | 4.0 | 3.0 | 2.0 | 1.0 | 4.0 | 4.0 | 3.0 | 4.5 | 5.0 |
54
- | json-api-serializer | 2.5 | 4.0 | 3.0 | 2.0 | 1.0 | 4.0 | 3.5 | 3.0 | 4.0 | 2.0 |
55
- | jsonapi-server | 3.5 | 3.0 | 3.0 | 3.5 | 3.0 | 2.5 | 2.5 | 2.5 | 3.0 | 2.0 |
56
- | fortune (+JSON:API plugin) | 3.0 | 4.0 | 4.0 | 4.5 | 2.5 | 3.0 | 3.0 | 3.0 | 2.5 | 3.0 |
57
- | NestJS JSON:API ecosystem | 3.0 | 3.5 | 3.5 | 4.0 | 3.5 | 3.0 | 3.5 | 3.5 | 3.5 | 3.0 |
58
- | @jsonapi-serde/server | 2.5 | 4.0 | 4.0 | 2.0 | 1.0 | 4.0 | 3.5 | 3.0 | 3.5 | 5.0 |
59
-
60
- ## Positioning of this repo (non-anyapi)
61
- - [Inferred][C4] `json-rest-api` is positioned as a full JSON:API-oriented server framework with richer runtime relationship/query behavior than serializer-only libraries.
62
- - [Verified][C5] Current competitive weakness is failure-path reliability consistency (`patchRelationship` defect) and partial observability/contract consistency gaps.
63
-
64
- ## Strategic takeaways
65
- - Must-copy patterns:
66
- - Strongly typed/OpenAPI-adjacent tooling direction from `@jsonapi-serde/openapi`.
67
- - Minimal-surface serializer ergonomics from `jsonapi-serializer` for simpler migration paths.
68
- - Intentionally-different patterns:
69
- - Keep hook/plugin orchestration and storage abstraction depth (a differentiator versus serializer-only tools).
70
- - Keep relationship endpoint breadth and multihome/access plugin strategy.
71
- - Avoid patterns:
72
- - Aging/unmaintained core dependencies without clear ownership path.
73
- - Config-driven magic that obscures failure semantics or transaction guarantees.
74
-
75
- ## Confidence notes
76
- - Compliance/flexibility scores: `C3-C4` (feature claims mostly from readmes).
77
- - Maintenance/adoption scores: `C5` (direct npm metadata/download signals).