# Boundary leak checks (non-anyapi)

## transport touching db/knex signals

## plugins with direct knex access (review for contract bypass)
plugins/core/rest-api-positioning-plugin.js:23:    if (!api.knex?.instance) {
plugins/core/rest-api-positioning-plugin.js:52:      if (scopeVars.schemaInfo && api.knex?.instance) {
plugins/core/rest-api-positioning-plugin.js:53:        const adapter = createStorageAdapter({ knex: api.knex.instance, schemaInfo: scopeVars.schemaInfo })
plugins/core/rest-api-positioning-plugin.js:197:      if (!schemaInfo || !api.knex?.instance) {
plugins/core/rest-api-positioning-plugin.js:208:        const knex = api.knex.instance
plugins/core/rest-api-positioning-plugin.js:422:      const knex = api.knex.instance
plugins/core/rest-api-plugin.js:158:    // Example: helpers.dataGet, helpers.dataPost, etc. will throw "No storage implementation" errors
plugins/core/rest-api-multihome-plugin.js:6:    if (!api.knex?.instance) {
plugins/core/bulk-operations-plugin.js:420:        if (params.atomic && api.knex?.instance && context.bulkOperation === undefined) {
plugins/core/bulk-operations-plugin.js:443:          const knex = api.knex.instance
plugins/core/bulk-operations-plugin.js:447:            const inserted = await knex(tableName)
plugins/core/rest-api-knex-plugin.js:73:    api.knex = {
plugins/core/rest-api-knex-plugin.js:99:    api.knex.helpers.getStorageAdapter = getScopeStorageAdapter
plugins/core/rest-api-knex-plugin.js:125:    api.knex.capabilities = {
plugins/core/rest-api-knex-plugin.js:168:      async ({ api }) => api.knex.instance.destroy()
plugins/core/rest-api-knex-plugin.js:187:      await createKnexTable(api.knex.instance, vars.schemaInfo, tableSchemaInstance, scopeOptions)
plugins/core/rest-api-knex-plugin.js:198:        api.knex.instance,
plugins/core/rest-api-knex-plugin.js:210:      await addKnexFields(api.knex.instance, vars.schemaInfo.tableName, partialTableSchema)
plugins/core/rest-api-knex-plugin.js:232:     * @param {Object} params.context.db - Database connection (knex instance or transaction)
plugins/core/rest-api-knex-plugin.js:235:    helpers.dataExists = async ({ scopeName, context }) => {
plugins/core/rest-api-knex-plugin.js:245:      const db = context.db || api.knex.instance
plugins/core/rest-api-knex-plugin.js:270:     * @param {Object} params.context.db - Database connection (knex instance or transaction)
plugins/core/rest-api-knex-plugin.js:278:    helpers.dataGet = async ({ scopeName, context, runHooks }) => {
plugins/core/rest-api-knex-plugin.js:299:      const db = context.db || api.knex.instance
plugins/core/rest-api-knex-plugin.js:369:     * @param {Object} params.context.db - Database connection (knex instance or transaction)
plugins/core/rest-api-knex-plugin.js:372:    helpers.dataGetMinimal = async ({ scopeName, context }) => {
plugins/core/rest-api-knex-plugin.js:381:      const db = context.db || api.knex.instance
plugins/core/rest-api-knex-plugin.js:426:     * @param {Object} params.context.db - Database connection (knex instance or transaction)
plugins/core/rest-api-knex-plugin.js:433:    helpers.dataQuery = async ({ scopeName, context, runHooks }) => {
plugins/core/rest-api-knex-plugin.js:442:      const db = context.db || api.knex.instance
plugins/core/rest-api-knex-plugin.js:893:     * @param {Object} params.context.db - Database connection (knex instance or transaction)
plugins/core/rest-api-knex-plugin.js:899:    helpers.dataPost = async ({ scopeName, context }) => {
plugins/core/rest-api-knex-plugin.js:907:      const db = context.db || api.knex.instance
plugins/core/rest-api-knex-plugin.js:937:     * @param {Object} params.context.db - Database connection (knex instance or transaction)
plugins/core/rest-api-knex-plugin.js:946:    helpers.dataPut = async ({ scopeName, context }) => {
plugins/core/rest-api-knex-plugin.js:955:      const db = context.db || api.knex.instance
plugins/core/rest-api-knex-plugin.js:1022:     * @param {Object} params.context.db - Database connection (knex instance or transaction)
plugins/core/rest-api-knex-plugin.js:1030:    helpers.dataPatch = async ({ scopeName, context }) => {
plugins/core/rest-api-knex-plugin.js:1039:      const db = context.db || api.knex.instance
plugins/core/rest-api-knex-plugin.js:1091:     * @param {Object} params.context.db - Database connection (knex instance or transaction)
plugins/core/rest-api-knex-plugin.js:1095:    helpers.dataDelete = async ({ scopeName, context }) => {
plugins/core/rest-api-knex-plugin.js:1105:      const db = context.db || api.knex.instance

## method-layer to storage-contract call sites
plugins/core/rest-api-plugin-methods/query.js:126:  await scope.checkPermissions({
plugins/core/rest-api-plugin-methods/query.js:133:  context.record = await helpers.dataQuery({
plugins/core/rest-api-plugin-methods/put.js:95:      const minimalRecord = await helpers.dataGetMinimal({
plugins/core/rest-api-plugin-methods/put.js:171:    await scope.checkPermissions({
plugins/core/rest-api-plugin-methods/put.js:191:    await helpers.dataPut({
plugins/core/rest-api-plugin-methods/post.js:98:    await scope.checkPermissions({
plugins/core/rest-api-plugin-methods/post.js:118:    context.id = await helpers.dataPost({
plugins/core/rest-api-plugin-methods/delete.js:39:      (helpers.newTransaction && !params.transaction ? await helpers.newTransaction() : null)
plugins/core/rest-api-plugin-methods/delete.js:47:    const minimalRecord = await helpers.dataGetMinimal({
plugins/core/rest-api-plugin-methods/delete.js:68:    await scope.checkPermissions({
plugins/core/rest-api-plugin-methods/delete.js:81:    await helpers.dataDelete({
plugins/core/rest-api-plugin-methods/delete-relationship.js:22:    (helpers.newTransaction && !params.transaction ? await helpers.newTransaction() : null)
plugins/core/rest-api-plugin-methods/post-relationship.js:23:  (helpers.newTransaction && !params.transaction ? await helpers.newTransaction() : null)
plugins/core/rest-api-plugin-methods/common.js:128:    (helpers.newTransaction && !params.transaction ? await helpers.newTransaction() : null)
plugins/core/rest-api-plugin-methods/common.js:450:      const record = await helpers.dataGetMinimal({
plugins/core/rest-api-plugin-methods/common.js:557:      const currentRecord = await helpers.dataGetMinimal({
plugins/core/rest-api-plugin-methods/patch-relationship.js:18:    (helpers.newTransaction && !params.transaction ? await helpers.newTransaction() : null)
plugins/core/rest-api-plugin-methods/get.js:69:  const minimalRecord = await helpers.dataGetMinimal({
plugins/core/rest-api-plugin-methods/get.js:89:  await scope.checkPermissions({
plugins/core/rest-api-plugin-methods/get.js:97:  context.record = await helpers.dataGet({
plugins/core/rest-api-plugin-methods/patch.js:87:    const minimalRecord = await helpers.dataGetMinimal({
plugins/core/rest-api-plugin-methods/patch.js:103:    await scope.checkPermissions({
plugins/core/rest-api-plugin-methods/patch.js:131:    await helpers.dataPatch({
