@bevel-software/platform-core-backend 0.35.0 → 0.36.1
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.
- package/agent-guide/directory-structure.md +1 -1
- package/agent-guide/onboarding.md +111 -0
- package/agent-guide/start-here.md +1 -0
- package/agent-guide/tool-manuals.md +1 -0
- package/dist/core/catalog-cache-invalidation.d.ts +2 -2
- package/dist/core/catalog-cache-invalidation.d.ts.map +1 -1
- package/dist/core/compose-embed.d.ts +2 -2
- package/dist/core/compose-embed.d.ts.map +1 -1
- package/dist/core/compose-embed.js +1 -1
- package/dist/core/compose-embed.js.map +1 -1
- package/dist/core/core-ports.d.ts +19 -4
- package/dist/core/core-ports.d.ts.map +1 -1
- package/dist/core/core-ports.js.map +1 -1
- package/dist/core/create-core-server.d.ts.map +1 -1
- package/dist/core/create-core-server.js +26 -24
- package/dist/core/create-core-server.js.map +1 -1
- package/dist/core/create-core-services.d.ts +19 -13
- package/dist/core/create-core-services.d.ts.map +1 -1
- package/dist/core/create-core-services.js +68 -56
- package/dist/core/create-core-services.js.map +1 -1
- package/dist/core/lifecycle.d.ts +4 -4
- package/dist/core/lifecycle.d.ts.map +1 -1
- package/dist/core/lifecycle.js +5 -5
- package/dist/core/lifecycle.js.map +1 -1
- package/dist/core-config.d.ts +2 -2
- package/dist/core-config.js +3 -3
- package/dist/core-config.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/modules/access/access-control.service.js +1 -1
- package/dist/modules/access/access-control.service.js.map +1 -1
- package/dist/modules/access/access-declarations.d.ts +2 -2
- package/dist/modules/access/access-declarations.d.ts.map +1 -1
- package/dist/modules/access/access-declarations.js +2 -2
- package/dist/modules/access/access-declarations.js.map +1 -1
- package/dist/modules/access/access-mutation.service.d.ts +2 -2
- package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
- package/dist/modules/access/access-mutation.service.js +2 -2
- package/dist/modules/access/access-mutation.service.js.map +1 -1
- package/dist/modules/access/access-requests.routes.d.ts +2 -2
- package/dist/modules/access/access-requests.routes.d.ts.map +1 -1
- package/dist/modules/access/access-requests.routes.js +5 -5
- package/dist/modules/access/access-requests.routes.js.map +1 -1
- package/dist/modules/access/access-requests.service.d.ts +2 -2
- package/dist/modules/access/access-requests.service.d.ts.map +1 -1
- package/dist/modules/access/access-requests.service.js +11 -11
- package/dist/modules/access/access-requests.service.js.map +1 -1
- package/dist/modules/access/access.routes.d.ts +2 -2
- package/dist/modules/access/access.routes.d.ts.map +1 -1
- package/dist/modules/access/access.routes.js +9 -9
- package/dist/modules/access/access.routes.js.map +1 -1
- package/dist/modules/access/admin-locked-commit.d.ts +5 -5
- package/dist/modules/access/admin-locked-commit.d.ts.map +1 -1
- package/dist/modules/access/admin-locked-commit.js +7 -7
- package/dist/modules/access/admin-locked-commit.js.map +1 -1
- package/dist/modules/access/admin-route-helpers.d.ts +1 -1
- package/dist/modules/access/admin-route-helpers.js +5 -5
- package/dist/modules/access/admin-route-helpers.js.map +1 -1
- package/dist/modules/access/change-read-gate.d.ts +1 -1
- package/dist/modules/access/change-read-gate.js +1 -1
- package/dist/modules/access/groups-admin.service.d.ts +7 -7
- package/dist/modules/access/groups-admin.service.d.ts.map +1 -1
- package/dist/modules/access/groups-admin.service.js +6 -6
- package/dist/modules/access/groups-admin.service.js.map +1 -1
- package/dist/modules/access/reference-scan.d.ts +1 -1
- package/dist/modules/access/roles-admin.service.d.ts +7 -7
- package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
- package/dist/modules/access/roles-admin.service.js +8 -8
- package/dist/modules/access/roles-admin.service.js.map +1 -1
- package/dist/modules/access/synced-groups-committer.d.ts +4 -4
- package/dist/modules/access/synced-groups-committer.d.ts.map +1 -1
- package/dist/modules/access/synced-groups-committer.js +7 -7
- package/dist/modules/access/synced-groups-committer.js.map +1 -1
- package/dist/modules/access/user-access-removal.service.d.ts +6 -6
- package/dist/modules/access/user-access-removal.service.d.ts.map +1 -1
- package/dist/modules/access/user-access-removal.service.js +4 -4
- package/dist/modules/access/user-access-removal.service.js.map +1 -1
- package/dist/modules/access-model/access-errors.d.ts +4 -4
- package/dist/modules/access-model/access-errors.d.ts.map +1 -1
- package/dist/modules/access-model/access-errors.js +4 -4
- package/dist/modules/access-model/access-errors.js.map +1 -1
- package/dist/modules/access-model/access-grammar.d.ts +1 -1
- package/dist/modules/access-model/access-grammar.js +4 -4
- package/dist/modules/access-model/change-gate.d.ts +1 -1
- package/dist/modules/access-model/change-gate.js +1 -1
- package/dist/modules/access-model/roles-yaml-guard.d.ts +4 -4
- package/dist/modules/access-model/roles-yaml-guard.d.ts.map +1 -1
- package/dist/modules/access-model/roles-yaml-guard.js +4 -4
- package/dist/modules/access-model/roles-yaml-guard.js.map +1 -1
- package/dist/modules/agent-guide/agent-guide.d.ts +19 -14
- package/dist/modules/agent-guide/agent-guide.d.ts.map +1 -1
- package/dist/modules/agent-guide/agent-guide.js +42 -18
- package/dist/modules/agent-guide/agent-guide.js.map +1 -1
- package/dist/modules/agent-guide/guide-budget.d.ts +5 -2
- package/dist/modules/agent-guide/guide-budget.d.ts.map +1 -1
- package/dist/modules/agent-guide/guide-budget.js +6 -2
- package/dist/modules/agent-guide/guide-budget.js.map +1 -1
- package/dist/modules/agent-instructions/agent-instructions.routes.d.ts +12 -5
- package/dist/modules/agent-instructions/agent-instructions.routes.d.ts.map +1 -1
- package/dist/modules/agent-instructions/agent-instructions.routes.js +13 -6
- package/dist/modules/agent-instructions/agent-instructions.routes.js.map +1 -1
- package/dist/modules/agent-instructions/compose.d.ts +15 -8
- package/dist/modules/agent-instructions/compose.d.ts.map +1 -1
- package/dist/modules/agent-instructions/compose.js +24 -10
- package/dist/modules/agent-instructions/compose.js.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.d.ts +14 -6
- package/dist/modules/agent-instructions/shared-file-rules.d.ts.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.js +51 -11
- package/dist/modules/agent-instructions/shared-file-rules.js.map +1 -1
- package/dist/modules/auth/account-erasure.service.d.ts +36 -7
- package/dist/modules/auth/account-erasure.service.d.ts.map +1 -1
- package/dist/modules/auth/account-erasure.service.js +30 -10
- package/dist/modules/auth/account-erasure.service.js.map +1 -1
- package/dist/modules/auth/account-hooks.d.ts +20 -0
- package/dist/modules/auth/account-hooks.d.ts.map +1 -1
- package/dist/modules/auth/account-hooks.js +10 -0
- package/dist/modules/auth/account-hooks.js.map +1 -1
- package/dist/modules/auth/account-switch-lock.js +2 -2
- package/dist/modules/auth/account-switch-lock.js.map +1 -1
- package/dist/modules/auth/account.routes.d.ts +7 -2
- package/dist/modules/auth/account.routes.d.ts.map +1 -1
- package/dist/modules/auth/account.routes.js +23 -4
- package/dist/modules/auth/account.routes.js.map +1 -1
- package/dist/modules/auth/auth.service.d.ts +1 -1
- package/dist/modules/auth/auth.service.js +4 -4
- package/dist/modules/auth/auth.service.js.map +1 -1
- package/dist/modules/auth/index.d.ts +1 -0
- package/dist/modules/auth/index.d.ts.map +1 -1
- package/dist/modules/database/core-schema.js +2 -2
- package/dist/modules/database/core-schema.js.map +1 -1
- package/dist/modules/diff/diff.routes.d.ts +3 -3
- package/dist/modules/diff/diff.routes.d.ts.map +1 -1
- package/dist/modules/diff/diff.routes.js +7 -7
- package/dist/modules/diff/diff.routes.js.map +1 -1
- package/dist/modules/embed/embed.routes.js +1 -1
- package/dist/modules/embed/embed.routes.js.map +1 -1
- package/dist/modules/embed/embed.service.d.ts +4 -4
- package/dist/modules/embed/embed.service.d.ts.map +1 -1
- package/dist/modules/embed/embed.service.js +18 -18
- package/dist/modules/embed/embed.service.js.map +1 -1
- package/dist/modules/kb-fs/branch-name.js +8 -8
- package/dist/modules/kb-fs/branch-name.js.map +1 -1
- package/dist/modules/kb-fs/file-change-notifier.d.ts +2 -2
- package/dist/modules/kb-fs/locking-filesystem.d.ts +9 -9
- package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
- package/dist/modules/kb-fs/locking-filesystem.js +27 -27
- package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
- package/dist/modules/kb-fs/repo-path.js +5 -5
- package/dist/modules/kb-fs/repo-path.js.map +1 -1
- package/dist/modules/kb-fs/tmp-ref.d.ts +2 -2
- package/dist/modules/kb-fs/tmp-ref.d.ts.map +1 -1
- package/dist/modules/kb-fs/tmp-ref.js +2 -2
- package/dist/modules/kb-fs/tmp-ref.js.map +1 -1
- package/dist/modules/kb-sync/index.d.ts +1 -1
- package/dist/modules/kb-sync/index.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.interface.d.ts +3 -3
- package/dist/modules/kb-sync/kb-sync.interface.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.d.ts +3 -3
- package/dist/modules/kb-sync/kb-sync.service.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.js +10 -10
- package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
- package/dist/modules/mcp/mcp.service.d.ts +11 -4
- package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.service.js +75 -19
- package/dist/modules/mcp/mcp.service.js.map +1 -1
- package/dist/modules/onboarding/onboarding.contract.d.ts +1 -1
- package/dist/modules/onboarding/onboarding.routes.js +2 -2
- package/dist/modules/onboarding/onboarding.routes.js.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.d.ts +4 -4
- package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.js +4 -4
- package/dist/modules/onboarding/starter-pack.service.js.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.d.ts +2 -2
- package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.js +7 -7
- package/dist/modules/plugins/join-request-jobs.service.js.map +1 -1
- package/dist/modules/plugins/join-requests.service.d.ts +3 -3
- package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-requests.service.js +5 -5
- package/dist/modules/plugins/join-requests.service.js.map +1 -1
- package/dist/modules/plugins/plugin-rename.service.js +1 -1
- package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
- package/dist/modules/plugins/plugins.routes.d.ts +2 -2
- package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.js +8 -8
- package/dist/modules/plugins/plugins.routes.js.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +77 -2
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.js +479 -53
- package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
- package/dist/modules/secrets-vault/index.d.ts +2 -1
- package/dist/modules/secrets-vault/index.d.ts.map +1 -1
- package/dist/modules/secrets-vault/index.js +1 -0
- package/dist/modules/secrets-vault/index.js.map +1 -1
- package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts +36 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts.map +1 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.js +37 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.js.map +1 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts +152 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.contract.js.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +7 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.js +125 -10
- package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
- package/dist/modules/settings/connection-check.js +1 -1
- package/dist/modules/settings/connection-check.js.map +1 -1
- package/dist/modules/settings/deployment-settings.service.js +1 -1
- package/dist/modules/settings/git-root-folders.js +1 -1
- package/dist/modules/settings/git-root-folders.js.map +1 -1
- package/dist/modules/settings/setup.routes.d.ts +1 -1
- package/dist/modules/settings/setup.routes.js +1 -1
- package/dist/modules/skills/pending-skills.service.d.ts +3 -3
- package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
- package/dist/modules/skills/pending-skills.service.js +4 -4
- package/dist/modules/skills/pending-skills.service.js.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.d.ts +2 -2
- package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.js +5 -5
- package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
- package/dist/modules/tool-helpers/tool-context.d.ts +4 -4
- package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-context.js +2 -2
- package/dist/modules/tool-helpers/tool-context.js.map +1 -1
- package/dist/modules/tool-helpers/tool-handler.js +2 -2
- package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
- package/dist/modules/tool-helpers/tool.contract.d.ts +4 -4
- package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.js +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.js.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.d.ts +3 -3
- package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.js +4 -4
- package/dist/modules/tool-manuals/pending-tools.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.js +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +43 -3
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts +6 -0
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.js +51 -5
- package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +3 -0
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.js +36 -15
- package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
- package/dist/modules/version-control/agent-tools/change-request-read-shape.d.ts.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-read-shape.js.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-read.tools.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.js +2 -2
- package/dist/modules/version-control/agent-tools/change-request-read.tools.js.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-summary.d.ts.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-summary.js.map +1 -0
- package/dist/modules/{workflow/agent-tools/workflow.tools.d.ts → version-control/agent-tools/version-control.tools.d.ts} +4 -4
- package/dist/modules/version-control/agent-tools/version-control.tools.d.ts.map +1 -0
- package/dist/modules/{workflow/agent-tools/workflow.tools.js → version-control/agent-tools/version-control.tools.js} +31 -31
- package/dist/modules/version-control/agent-tools/version-control.tools.js.map +1 -0
- package/dist/modules/{workflow → version-control}/change-request-hooks.d.ts +1 -1
- package/dist/modules/version-control/change-request-hooks.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-hooks.js.map +1 -0
- package/dist/modules/version-control/change-request-review/approval-lock.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-review/approval-lock.js.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.interface.d.ts → version-control/change-request-review/change-request-review.interface.d.ts} +2 -2
- package/dist/modules/version-control/change-request-review/change-request-review.interface.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-review/change-request-review.interface.js +2 -0
- package/dist/modules/version-control/change-request-review/change-request-review.interface.js.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.service.d.ts → version-control/change-request-review/change-request-review.service.d.ts} +3 -3
- package/dist/modules/version-control/change-request-review/change-request-review.service.d.ts.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.service.js → version-control/change-request-review/change-request-review.service.js} +26 -26
- package/dist/modules/version-control/change-request-review/change-request-review.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/event-bus.d.ts +8 -8
- package/dist/modules/version-control/event-bus.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/event-bus.js +4 -4
- package/dist/modules/version-control/event-bus.js.map +1 -0
- package/dist/modules/{workflow → version-control}/events-delivery.d.ts +4 -4
- package/dist/modules/version-control/events-delivery.d.ts.map +1 -0
- package/dist/modules/version-control/events-delivery.js.map +1 -0
- package/dist/modules/{workflow → version-control}/events.routes.d.ts +4 -4
- package/dist/modules/version-control/events.routes.d.ts.map +1 -0
- package/dist/modules/version-control/events.routes.js.map +1 -0
- package/dist/modules/{workflow → version-control}/file-lock.service.d.ts +2 -2
- package/dist/modules/version-control/file-lock.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/file-lock.service.js +6 -6
- package/dist/modules/version-control/file-lock.service.js.map +1 -0
- package/dist/modules/version-control/git/change-request-link.d.ts.map +1 -0
- package/dist/modules/version-control/git/change-request-link.js.map +1 -0
- package/dist/modules/version-control/git/git-version.d.ts.map +1 -0
- package/dist/modules/version-control/git/git-version.js.map +1 -0
- package/dist/modules/{workflow → version-control}/git/git.service.d.ts +8 -8
- package/dist/modules/version-control/git/git.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/git.service.js +53 -53
- package/dist/modules/version-control/git/git.service.js.map +1 -0
- package/dist/modules/version-control/git/merge-commit.d.ts.map +1 -0
- package/dist/modules/version-control/git/merge-commit.js.map +1 -0
- package/dist/modules/version-control/git/node-git-runner.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/node-git-runner.js +1 -1
- package/dist/modules/version-control/git/node-git-runner.js.map +1 -0
- package/dist/modules/{workflow → version-control}/git/pull-request.service.d.ts +5 -5
- package/dist/modules/version-control/git/pull-request.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/pull-request.service.js +10 -10
- package/dist/modules/version-control/git/pull-request.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/index.d.ts +6 -5
- package/dist/modules/version-control/index.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/index.js +3 -2
- package/dist/modules/version-control/index.js.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.service.d.ts +2 -2
- package/dist/modules/version-control/pending-commits.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.service.js +2 -2
- package/dist/modules/version-control/pending-commits.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.worker.d.ts +5 -5
- package/dist/modules/version-control/pending-commits.worker.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.worker.js +3 -3
- package/dist/modules/version-control/pending-commits.worker.js.map +1 -0
- package/dist/modules/{workflow → version-control}/read-on-branch.d.ts +2 -2
- package/dist/modules/version-control/read-on-branch.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/read-on-branch.js +2 -2
- package/dist/modules/version-control/read-on-branch.js.map +1 -0
- package/dist/modules/version-control/recovery-bot.d.ts.map +1 -0
- package/dist/modules/version-control/recovery-bot.js.map +1 -0
- package/dist/modules/version-control/sanitize-error.d.ts.map +1 -0
- package/dist/modules/version-control/sanitize-error.js.map +1 -0
- package/dist/modules/{workflow/workflow-hooks.d.ts → version-control/version-control-hooks.d.ts} +4 -4
- package/dist/modules/version-control/version-control-hooks.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow-hooks.js → version-control/version-control-hooks.js} +3 -3
- package/dist/modules/version-control/version-control-hooks.js.map +1 -0
- package/dist/modules/{workflow/workflow.routes.d.ts → version-control/version-control.routes.d.ts} +6 -5
- package/dist/modules/version-control/version-control.routes.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow.routes.js → version-control/version-control.routes.js} +61 -60
- package/dist/modules/version-control/version-control.routes.js.map +1 -0
- package/dist/modules/{workflow/workflow.service.d.ts → version-control/version-control.service.d.ts} +26 -31
- package/dist/modules/version-control/version-control.service.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow.service.js → version-control/version-control.service.js} +89 -94
- package/dist/modules/version-control/version-control.service.js.map +1 -0
- package/dist/modules/workspace/agent-access.gate.d.ts +5 -5
- package/dist/modules/workspace/agent-access.gate.d.ts.map +1 -1
- package/dist/modules/workspace/agent-access.gate.js +1 -1
- package/dist/modules/workspace/git-internals.middleware.d.ts +1 -1
- package/dist/modules/workspace/git-internals.middleware.js +2 -2
- package/dist/modules/workspace/kb-repository.js +1 -1
- package/dist/modules/workspace/kb-repository.js.map +1 -1
- package/dist/modules/workspace/startup/kb-git.d.ts +1 -1
- package/dist/modules/workspace/startup/kb-git.d.ts.map +1 -1
- package/dist/modules/workspace/startup/kb-git.js +1 -1
- package/dist/modules/workspace/startup/kb-git.js.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts +2 -2
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts +2 -2
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.js +2 -2
- package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.d.ts +17 -4
- package/dist/modules/workspace/startup/steps/template-source.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.js +8 -5
- package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
- package/dist/modules/workspace/workspace-tmp.js +3 -3
- package/dist/modules/workspace/workspace-tmp.js.map +1 -1
- package/dist/modules/workspace/workspace.routes.d.ts +4 -4
- package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.routes.js +22 -22
- package/dist/modules/workspace/workspace.routes.js.map +1 -1
- package/dist/modules/workspace/workspace.service.d.ts +6 -6
- package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.service.js +11 -11
- package/dist/modules/workspace/workspace.service.js.map +1 -1
- package/dist/modules/workspace/workspace.tools.d.ts +2 -1
- package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.tools.js +15 -10
- package/dist/modules/workspace/workspace.tools.js.map +1 -1
- package/dist/shared/canonical-file-identity.d.ts +2 -2
- package/dist/shared/canonical-file-identity.js +5 -5
- package/dist/shared/canonical-file-identity.js.map +1 -1
- package/dist/shared/domain-errors.d.ts +39 -39
- package/dist/shared/domain-errors.d.ts.map +1 -1
- package/dist/shared/domain-errors.js +44 -44
- package/dist/shared/domain-errors.js.map +1 -1
- package/dist/shared/git.contract.d.ts +1 -1
- package/dist/shared/git.contract.js +1 -1
- package/dist/shared/http-errors.d.ts +3 -3
- package/dist/shared/http-errors.d.ts.map +1 -1
- package/dist/shared/http-errors.js +1 -1
- package/dist/shared/http-errors.js.map +1 -1
- package/dist/shared/pending-proposals.d.ts +3 -3
- package/dist/shared/pending-proposals.d.ts.map +1 -1
- package/dist/shared/pending-proposals.js +2 -2
- package/dist/shared/pending-proposals.js.map +1 -1
- package/dist/tenancy/static-tenant-source.js +1 -1
- package/dist/tenancy/static-tenant-source.js.map +1 -1
- package/migrations/0012_agent_audit.sql +40 -40
- package/migrations/0013_agent_identity_and_key_soft_delete.sql +29 -29
- package/migrations/meta/0012_snapshot.json +2246 -2246
- package/migrations/meta/0013_snapshot.json +2258 -2258
- package/package.json +4 -4
- package/src/__tests__/account-admin.ts +27 -0
- package/src/__tests__/hexis-catalog.ts +4 -4
- package/src/__tests__/kb-context.ts +30 -30
- package/src/__tests__/kb-layout-config.test.ts +21 -0
- package/src/__tests__/open-change-gate.ts +1 -1
- package/src/__tests__/tool-handler.ts +15 -0
- package/src/__tests__/tool-wiring.ts +10 -4
- package/src/__tests__/workspace-service.ts +1 -1
- package/src/core/__tests__/catalog-cache-invalidation.test.ts +3 -3
- package/src/core/__tests__/compose-embed.test.ts +1 -1
- package/src/core/__tests__/damaged-document.tools.test.ts +3 -3
- package/src/core/__tests__/erasure-slices-wired-once.test.ts +46 -0
- package/src/core/__tests__/gated-boot.test.ts +2 -2
- package/src/core/__tests__/lifecycle.test.ts +9 -9
- package/src/core/catalog-cache-invalidation.ts +2 -2
- package/src/core/compose-embed.ts +3 -3
- package/src/core/core-ports.ts +19 -4
- package/src/core/create-core-server.ts +39 -25
- package/src/core/create-core-services.ts +79 -63
- package/src/core/lifecycle.ts +9 -9
- package/src/core-config.ts +3 -3
- package/src/index.ts +5 -5
- package/src/modules/access/__tests__/access-control.admin-root-floor.test.ts +4 -4
- package/src/modules/access/__tests__/access-own-read-grant.test.ts +14 -14
- package/src/modules/access/__tests__/access-requests.routes.test.ts +20 -20
- package/src/modules/access/__tests__/access.routes.admins.test.ts +4 -4
- package/src/modules/access/__tests__/access.routes.batch.test.ts +4 -4
- package/src/modules/access/__tests__/access.routes.folder-governs.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.group-grant.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.overrides.test.ts +5 -5
- package/src/modules/access/__tests__/access.routes.proposal-branch.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.prospective.test.ts +3 -3
- package/src/modules/access/__tests__/access.routes.revoke.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.unknown-email.test.ts +6 -6
- package/src/modules/access/__tests__/admin-locked-commit.test.ts +6 -6
- package/src/modules/access/__tests__/admin-route-helpers.test.ts +5 -5
- package/src/modules/access/__tests__/groups-admin.service.test.ts +27 -27
- package/src/modules/access/__tests__/roles-admin.security.test.ts +14 -13
- package/src/modules/access/__tests__/roles-admin.service.test.ts +27 -27
- package/src/modules/access/__tests__/roles-capabilities.test.ts +19 -19
- package/src/modules/access/__tests__/roles.routes.test.ts +6 -6
- package/src/modules/access/__tests__/synced-groups-committer.test.ts +13 -13
- package/src/modules/access/__tests__/user-access-removal.service.test.ts +29 -29
- package/src/modules/access/access-control.service.ts +1 -1
- package/src/modules/access/access-declarations.ts +2 -2
- package/src/modules/access/access-mutation.service.ts +2 -2
- package/src/modules/access/access-requests.routes.ts +7 -7
- package/src/modules/access/access-requests.service.ts +13 -13
- package/src/modules/access/access.routes.ts +11 -11
- package/src/modules/access/admin-locked-commit.ts +11 -11
- package/src/modules/access/admin-route-helpers.ts +5 -5
- package/src/modules/access/change-read-gate.ts +1 -1
- package/src/modules/access/groups-admin.service.ts +7 -7
- package/src/modules/access/reference-scan.ts +1 -1
- package/src/modules/access/roles-admin.service.ts +9 -9
- package/src/modules/access/synced-groups-committer.ts +11 -11
- package/src/modules/access/user-access-removal.service.ts +7 -7
- package/src/modules/access-model/__tests__/access-grammar.test.ts +2 -2
- package/src/modules/access-model/access-errors.ts +4 -4
- package/src/modules/access-model/access-grammar.ts +4 -4
- package/src/modules/access-model/change-gate.ts +1 -1
- package/src/modules/access-model/roles-yaml-guard.ts +4 -4
- package/src/modules/agent-guide/__tests__/agent-guide.test.ts +19 -4
- package/src/modules/agent-guide/__tests__/agent-guide.tools.test.ts +1 -1
- package/src/modules/agent-guide/__tests__/guide-matches-code.test.ts +2 -2
- package/src/modules/agent-guide/agent-guide.ts +48 -22
- package/src/modules/agent-guide/guide-budget.ts +6 -2
- package/src/modules/agent-instructions/__tests__/agent-instructions.route.test.ts +4 -5
- package/src/modules/agent-instructions/__tests__/compose.test.ts +1 -1
- package/src/modules/agent-instructions/__tests__/shared-file-rules.test.ts +113 -7
- package/src/modules/agent-instructions/agent-instructions.routes.ts +12 -5
- package/src/modules/agent-instructions/compose.ts +24 -9
- package/src/modules/agent-instructions/shared-file-rules.ts +53 -11
- package/src/modules/agent-scope/__tests__/agent-surfaces.connect-as.test.ts +1 -1
- package/src/modules/audit/__tests__/agent-rest-audit.middleware.test.ts +113 -113
- package/src/modules/audit/__tests__/event-classifier.test.ts +121 -121
- package/src/modules/audit/event-classifier.ts +155 -155
- package/src/modules/auth/__tests__/account-deactivation.test.ts +1 -1
- package/src/modules/auth/__tests__/account-erasure.approval-gate.test.ts +4 -4
- package/src/modules/auth/__tests__/account-erasure.participants.test.ts +56 -0
- package/src/modules/auth/__tests__/account-switch-lock.pg.test.ts +2 -2
- package/src/modules/auth/__tests__/account-switch-lock.test.ts +2 -2
- package/src/modules/auth/__tests__/account.routes.test.ts +73 -11
- package/src/modules/auth/__tests__/auth.service.test.ts +1 -1
- package/src/modules/auth/account-erasure.service.ts +27 -9
- package/src/modules/auth/account-hooks.ts +34 -0
- package/src/modules/auth/account-switch-lock.ts +2 -2
- package/src/modules/auth/account.routes.ts +23 -5
- package/src/modules/auth/auth.service.ts +4 -4
- package/src/modules/auth/index.ts +1 -0
- package/src/modules/database/__tests__/advisory-lock.test.ts +169 -169
- package/src/modules/database/__tests__/migrations-unqualified.test.ts +32 -32
- package/src/modules/database/core-schema.ts +2 -2
- package/src/modules/diff/__tests__/diff.routes.read-gate.test.ts +2 -2
- package/src/modules/diff/__tests__/diff.routes.rejectPathsLocked.test.ts +12 -12
- package/src/modules/diff/diff.routes.ts +8 -8
- package/src/modules/embed/__tests__/embed.service.lock.test.ts +7 -7
- package/src/modules/embed/__tests__/embed.service.test.ts +42 -42
- package/src/modules/embed/__tests__/embed.tools.test.ts +1 -1
- package/src/modules/embed/embed.routes.ts +1 -1
- package/src/modules/embed/embed.service.ts +17 -17
- package/src/modules/kb-fs/__tests__/branch-name.test.ts +2 -2
- package/src/modules/kb-fs/__tests__/locking-filesystem.test.ts +260 -260
- package/src/modules/kb-fs/__tests__/move-with-edits.test.ts +34 -34
- package/src/modules/kb-fs/__tests__/repo-path.test.ts +8 -8
- package/src/modules/kb-fs/branch-name.ts +8 -8
- package/src/modules/kb-fs/file-change-notifier.ts +2 -2
- package/src/modules/kb-fs/locking-filesystem.ts +30 -30
- package/src/modules/kb-fs/repo-path.ts +5 -5
- package/src/modules/kb-fs/tmp-ref.ts +3 -3
- package/src/modules/kb-sync/__tests__/kb-sync.service.test.ts +36 -36
- package/src/modules/kb-sync/index.ts +1 -1
- package/src/modules/kb-sync/kb-sync.interface.ts +3 -3
- package/src/modules/kb-sync/kb-sync.service.ts +9 -9
- package/src/modules/marketplace/__tests__/github-facade.test.ts +1 -1
- package/src/modules/marketplace/__tests__/marketplace-git.test.ts +1 -1
- package/src/modules/mcp/__tests__/mcp-proxy-helpers.test.ts +4 -2
- package/src/modules/mcp/__tests__/mcp.e2e.test.ts +69 -8
- package/src/modules/mcp/__tests__/mcp.service.test.ts +91 -13
- package/src/modules/mcp/__tests__/read-only-hint.pg.test.ts +194 -0
- package/src/modules/mcp/mcp.service.ts +89 -28
- package/src/modules/onboarding/__tests__/starter-pack.service.test.ts +55 -55
- package/src/modules/onboarding/onboarding.contract.ts +1 -1
- package/src/modules/onboarding/onboarding.routes.ts +2 -2
- package/src/modules/onboarding/starter-pack.service.ts +6 -6
- package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +1 -1
- package/src/modules/plugins/__tests__/compile-marketplace.test.ts +1 -1
- package/src/modules/plugins/__tests__/join-request-jobs.service.test.ts +43 -43
- package/src/modules/plugins/__tests__/join-requests.service.test.ts +19 -19
- package/src/modules/plugins/__tests__/join-requests.settlement.test.ts +26 -26
- package/src/modules/plugins/__tests__/plugins.routes.test.ts +25 -25
- package/src/modules/plugins/join-request-jobs.service.ts +10 -10
- package/src/modules/plugins/join-requests.service.ts +4 -4
- package/src/modules/plugins/plugin-rename.service.ts +1 -1
- package/src/modules/plugins/plugins.routes.ts +9 -9
- package/src/modules/secrets-vault/__tests__/db-secrets-vault.managed.test.ts +773 -0
- package/src/modules/secrets-vault/__tests__/db-secrets-vault.oauth.test.ts +28 -1
- package/src/modules/secrets-vault/__tests__/managed-sign-in.route.test.ts +351 -0
- package/src/modules/secrets-vault/db-secrets-vault.service.ts +562 -95
- package/src/modules/secrets-vault/index.ts +7 -0
- package/src/modules/secrets-vault/managed-sign-in-erasure.ts +41 -0
- package/src/modules/secrets-vault/secrets-variable-loader.ts +134 -134
- package/src/modules/secrets-vault/secrets-vault.contract.ts +152 -0
- package/src/modules/secrets-vault/secrets-vault.routes.ts +157 -10
- package/src/modules/settings/__tests__/repository-source.test.ts +1 -1
- package/src/modules/settings/__tests__/setup.routes.layout-phase.test.ts +1 -1
- package/src/modules/settings/__tests__/setup.routes.managed-phase.test.ts +1 -1
- package/src/modules/settings/connection-check.ts +1 -1
- package/src/modules/settings/deployment-settings.service.ts +1 -1
- package/src/modules/settings/git-root-folders.ts +1 -1
- package/src/modules/settings/setup.routes.ts +1 -1
- package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +3 -3
- package/src/modules/skills/__tests__/branch-skills.tools.test.ts +1 -1
- package/src/modules/skills/__tests__/pending-skills.service.test.ts +8 -8
- package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +18 -18
- package/src/modules/skills/__tests__/skills.service.test.ts +3 -3
- package/src/modules/skills/pending-skills.service.ts +3 -3
- package/src/modules/skills/skill-access-requests.routes.ts +7 -7
- package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +4 -4
- package/src/modules/tool-helpers/__tests__/branch-declaration.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/can-write.tools.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +4 -4
- package/src/modules/tool-helpers/__tests__/tools-surface.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/validate-token.test.ts +1 -1
- package/src/modules/tool-helpers/tool-context.ts +6 -6
- package/src/modules/tool-helpers/tool-handler.ts +2 -2
- package/src/modules/tool-helpers/tool.contract.ts +4 -4
- package/src/modules/tool-manuals/__tests__/pending-tools.service.test.ts +9 -9
- package/src/modules/tool-manuals/__tests__/tool-manuals.managed-sign-in.test.ts +89 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.restart.test.ts +1 -1
- package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +36 -1
- package/src/modules/tool-manuals/mcp-server-edit.service.ts +1 -1
- package/src/modules/tool-manuals/pending-tools.service.ts +3 -3
- package/src/modules/tool-manuals/tool-delete.service.ts +1 -1
- package/src/modules/tool-manuals/tool-manuals.contract.ts +41 -3
- package/src/modules/tool-manuals/tool-manuals.service.ts +53 -5
- package/src/modules/tool-manuals/tool-manuals.tools.ts +41 -15
- package/src/modules/tool-registry/__tests__/own-tool-schemas.test.ts +4 -4
- package/src/modules/tool-registry/__tests__/read-only-hints.test.ts +3 -3
- package/src/modules/tool-registry/__tests__/tool-description-length.test.ts +6 -6
- package/src/modules/{workflow → version-control}/__tests__/apply-failure.test.ts +54 -54
- package/src/modules/{workflow → version-control}/__tests__/event-bus.test.ts +27 -27
- package/src/modules/{workflow → version-control}/__tests__/events-delivery.test.ts +37 -37
- package/src/modules/{workflow → version-control}/__tests__/file-lock.service.deletion-gate.test.ts +2 -2
- package/src/modules/{workflow → version-control}/__tests__/file-lock.service.path-identity.test.ts +8 -8
- package/src/modules/{workflow → version-control}/__tests__/merge-announces-tree.test.ts +11 -11
- package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.concurrency.test.ts +9 -9
- package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.test.ts +25 -25
- package/src/modules/{workflow → version-control}/__tests__/preserve-roles-yaml.test.ts +42 -42
- package/src/modules/version-control/__tests__/public-surface.test.ts +114 -0
- package/src/modules/{workflow/__tests__/workflow.routes.folder-proposals.test.ts → version-control/__tests__/version-control.routes.folder-proposals.test.ts} +18 -18
- package/src/modules/{workflow/__tests__/workflow.routes.fork-point-file.test.ts → version-control/__tests__/version-control.routes.fork-point-file.test.ts} +19 -19
- package/src/modules/{workflow/__tests__/workflow.routes.history-read-gate.test.ts → version-control/__tests__/version-control.routes.history-read-gate.test.ts} +13 -13
- package/src/modules/{workflow/__tests__/workflow.routes.lock-path.test.ts → version-control/__tests__/version-control.routes.lock-path.test.ts} +18 -18
- package/src/modules/{workflow/__tests__/workflow.routes.open-change-request.test.ts → version-control/__tests__/version-control.routes.open-change-request.test.ts} +7 -7
- package/src/modules/{workflow/__tests__/workflow.routes.push-refused.test.ts → version-control/__tests__/version-control.routes.push-refused.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.branch-in-use.test.ts → version-control/__tests__/version-control.service.branch-in-use.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts → version-control/__tests__/version-control.service.commitFileWhileLocked.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.delete-branch.test.ts → version-control/__tests__/version-control.service.delete-branch.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.deleted-branch-sweep.test.ts → version-control/__tests__/version-control.service.deleted-branch-sweep.test.ts} +4 -4
- package/src/modules/{workflow/__tests__/workflow.service.facade.test.ts → version-control/__tests__/version-control.service.facade.test.ts} +97 -99
- package/src/modules/{workflow/__tests__/workflow.service.folder-proposals.test.ts → version-control/__tests__/version-control.service.folder-proposals.test.ts} +7 -7
- package/src/modules/{workflow/__tests__/workflow.service.platform-restore.test.ts → version-control/__tests__/version-control.service.platform-restore.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.read-gate.test.ts → version-control/__tests__/version-control.service.read-gate.test.ts} +9 -9
- package/src/modules/{workflow/__tests__/workflow.service.releaseLock.test.ts → version-control/__tests__/version-control.service.releaseLock.test.ts} +42 -42
- package/src/modules/{workflow/__tests__/workflow.service.repository-replaced.test.ts → version-control/__tests__/version-control.service.repository-replaced.test.ts} +4 -4
- package/src/modules/{workflow/__tests__/workflow.service.sync.test.ts → version-control/__tests__/version-control.service.sync.test.ts} +17 -17
- package/src/modules/{workflow/__tests__/workflow.service.update-change-request.pg.test.ts → version-control/__tests__/version-control.service.update-change-request.pg.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.update-change-request.test.ts → version-control/__tests__/version-control.service.update-change-request.test.ts} +11 -11
- package/src/modules/{workflow/__tests__/workflow.service.update-from-target.test.ts → version-control/__tests__/version-control.service.update-from-target.test.ts} +22 -22
- package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read.tools.test.ts +3 -3
- package/src/modules/{workflow → version-control}/agent-tools/__tests__/update-change-request.parity.test.ts +16 -16
- package/src/modules/{workflow/agent-tools/__tests__/workflow.tools.test.ts → version-control/agent-tools/__tests__/version-control.tools.test.ts} +9 -9
- package/src/modules/{workflow → version-control}/agent-tools/change-request-read.tools.ts +2 -2
- package/src/modules/{workflow/agent-tools/workflow.tools.ts → version-control/agent-tools/version-control.tools.ts} +30 -30
- package/src/modules/{workflow → version-control}/change-request-hooks.ts +1 -1
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/approval-states.test.ts +5 -5
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/cancel-pr.test.ts +8 -8
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/carry-approvals-forward.test.ts +6 -6
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/erase-approver.test.ts +5 -5
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-gate.test.ts +3 -3
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-records-own-commit.test.ts +3 -3
- package/src/modules/{workflow/review-workflow/review-workflow.interface.ts → version-control/change-request-review/change-request-review.interface.ts} +1 -1
- package/src/modules/{workflow/review-workflow/review-workflow.service.ts → version-control/change-request-review/change-request-review.service.ts} +28 -28
- package/src/modules/{workflow → version-control}/event-bus.ts +14 -14
- package/src/modules/{workflow → version-control}/events-delivery.ts +11 -11
- package/src/modules/{workflow → version-control}/events.routes.ts +5 -5
- package/src/modules/{workflow → version-control}/file-lock.service.ts +6 -6
- package/src/modules/{workflow → version-control}/git/__tests__/git-test-helpers.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.accessGating.test.ts +5 -5
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.appliedChange.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedFilesForPr.test.ts +16 -16
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedPathsMemo.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitChanges.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.strayPath.test.ts +10 -10
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.createBranch.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.deleteBranch.test.ts +7 -7
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileAtCommit.test.ts +9 -9
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileBetweenBranches.test.ts +23 -23
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileBytesAtCommit.test.ts +7 -7
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileContentsAtCommit.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.forkPoint.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.history-guards.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.list-branches.test.ts +12 -12
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.listTrackedFiles.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.logForFile.test.ts +6 -6
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeChangeRequest.test.ts +20 -20
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeIntoBranch.test.ts +16 -16
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.pendingChanges.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.postMergePull.test.ts +5 -5
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.prFetchFailure.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.pull.test.ts +12 -12
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.readFileAtRef.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.revertPathsAndPush.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.status.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.syncFromRemote.test.ts +8 -8
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.worktrees.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.list-fetch.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.test.ts +6 -6
- package/src/modules/{workflow → version-control}/git/git.service.ts +57 -57
- package/src/modules/{workflow → version-control}/git/node-git-runner.ts +1 -1
- package/src/modules/{workflow → version-control}/git/pull-request.service.ts +12 -12
- package/src/modules/{workflow → version-control}/index.ts +6 -5
- package/src/modules/{workflow → version-control}/pending-commits.service.ts +2 -2
- package/src/modules/{workflow → version-control}/pending-commits.worker.ts +8 -8
- package/src/modules/{workflow → version-control}/read-on-branch.ts +2 -2
- package/src/modules/{workflow/workflow-hooks.ts → version-control/version-control-hooks.ts} +3 -3
- package/src/modules/{workflow/workflow.routes.ts → version-control/version-control.routes.ts} +64 -63
- package/src/modules/{workflow/workflow.service.ts → version-control/version-control.service.ts} +92 -97
- package/src/modules/workspace/__tests__/agent-access.gate.test.ts +8 -8
- package/src/modules/workspace/__tests__/agent-downloads.test.ts +13 -16
- package/src/modules/workspace/__tests__/agent-uploads.test.ts +11 -12
- package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +11 -16
- package/src/modules/workspace/__tests__/file-stat-access.test.ts +3 -3
- package/src/modules/workspace/__tests__/git-internals.security.test.ts +27 -27
- package/src/modules/workspace/__tests__/kb-repository.test.ts +1 -1
- package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +3 -3
- package/src/modules/workspace/__tests__/start-session.default-branch.test.ts +152 -0
- package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace-tmp.tools.test.ts +13 -14
- package/src/modules/workspace/__tests__/workspace.routes.at-ref.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.branch-errors.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +8 -8
- package/src/modules/workspace/__tests__/workspace.routes.download-implies-read.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.file-writes.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.folder-zip-access.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.folders.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +7 -7
- package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +13 -13
- package/src/modules/workspace/__tests__/workspace.service.any-workspace-credentials.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.service.replaced-repository.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.service.worktrees.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +5 -5
- package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +5 -5
- package/src/modules/workspace/__tests__/workspace.tools.test.ts +27 -27
- package/src/modules/workspace/agent-access.gate.ts +5 -5
- package/src/modules/workspace/git-internals.middleware.ts +2 -2
- package/src/modules/workspace/kb-repository.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.degraded.test.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.test.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.worktrees.test.ts +1 -1
- package/src/modules/workspace/startup/kb-git.ts +1 -1
- package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +94 -70
- package/src/modules/workspace/startup/steps/seed-tree.ts +4 -5
- package/src/modules/workspace/startup/steps/template-files.step.ts +4 -5
- package/src/modules/workspace/startup/steps/template-source.ts +21 -6
- package/src/modules/workspace/workspace-tmp.ts +4 -4
- package/src/modules/workspace/workspace.routes.ts +26 -26
- package/src/modules/workspace/workspace.service.ts +11 -11
- package/src/modules/workspace/workspace.tools.ts +17 -10
- package/src/shared/__tests__/canonical-file-identity.test.ts +5 -5
- package/src/shared/__tests__/http-errors.test.ts +4 -4
- package/src/shared/canonical-file-identity.ts +5 -5
- package/src/shared/domain-errors.ts +44 -44
- package/src/shared/git.contract.ts +1 -1
- package/src/shared/http-errors.ts +3 -3
- package/src/shared/kb-context.ts +130 -130
- package/src/shared/pending-proposals.ts +4 -4
- package/src/tenancy/__tests__/tenant-host.test.ts +372 -372
- package/src/tenancy/__tests__/tenant-runtime.test.ts +221 -221
- package/src/tenancy/__tests__/tenant-secrets.test.ts +35 -35
- package/src/tenancy/index.ts +35 -35
- package/src/tenancy/static-tenant-source.ts +1 -1
- package/src/tenancy/tenant-host.ts +261 -261
- package/src/tenancy/tenant-runtime.ts +208 -208
- package/src/tenancy/tenant-source.contract.ts +59 -59
- package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read-shape.js.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.js.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.js.map +0 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.js.map +0 -1
- package/dist/modules/workflow/change-request-hooks.d.ts.map +0 -1
- package/dist/modules/workflow/change-request-hooks.js.map +0 -1
- package/dist/modules/workflow/event-bus.d.ts.map +0 -1
- package/dist/modules/workflow/event-bus.js.map +0 -1
- package/dist/modules/workflow/events-delivery.d.ts.map +0 -1
- package/dist/modules/workflow/events-delivery.js.map +0 -1
- package/dist/modules/workflow/events.routes.d.ts.map +0 -1
- package/dist/modules/workflow/events.routes.js.map +0 -1
- package/dist/modules/workflow/file-lock.service.d.ts.map +0 -1
- package/dist/modules/workflow/file-lock.service.js.map +0 -1
- package/dist/modules/workflow/git/change-request-link.d.ts.map +0 -1
- package/dist/modules/workflow/git/change-request-link.js.map +0 -1
- package/dist/modules/workflow/git/git-version.d.ts.map +0 -1
- package/dist/modules/workflow/git/git-version.js.map +0 -1
- package/dist/modules/workflow/git/git.service.d.ts.map +0 -1
- package/dist/modules/workflow/git/git.service.js.map +0 -1
- package/dist/modules/workflow/git/merge-commit.d.ts.map +0 -1
- package/dist/modules/workflow/git/merge-commit.js.map +0 -1
- package/dist/modules/workflow/git/node-git-runner.d.ts.map +0 -1
- package/dist/modules/workflow/git/node-git-runner.js.map +0 -1
- package/dist/modules/workflow/git/pull-request.service.d.ts.map +0 -1
- package/dist/modules/workflow/git/pull-request.service.js.map +0 -1
- package/dist/modules/workflow/index.d.ts.map +0 -1
- package/dist/modules/workflow/index.js.map +0 -1
- package/dist/modules/workflow/pending-commits.service.d.ts.map +0 -1
- package/dist/modules/workflow/pending-commits.service.js.map +0 -1
- package/dist/modules/workflow/pending-commits.worker.d.ts.map +0 -1
- package/dist/modules/workflow/pending-commits.worker.js.map +0 -1
- package/dist/modules/workflow/read-on-branch.d.ts.map +0 -1
- package/dist/modules/workflow/read-on-branch.js.map +0 -1
- package/dist/modules/workflow/recovery-bot.d.ts.map +0 -1
- package/dist/modules/workflow/recovery-bot.js.map +0 -1
- package/dist/modules/workflow/review-workflow/approval-lock.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/approval-lock.js.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.interface.js +0 -2
- package/dist/modules/workflow/review-workflow/review-workflow.interface.js.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +0 -1
- package/dist/modules/workflow/sanitize-error.d.ts.map +0 -1
- package/dist/modules/workflow/sanitize-error.js.map +0 -1
- package/dist/modules/workflow/workflow-hooks.d.ts.map +0 -1
- package/dist/modules/workflow/workflow-hooks.js.map +0 -1
- package/dist/modules/workflow/workflow.routes.d.ts.map +0 -1
- package/dist/modules/workflow/workflow.routes.js.map +0 -1
- package/dist/modules/workflow/workflow.service.d.ts.map +0 -1
- package/dist/modules/workflow/workflow.service.js.map +0 -1
- package/src/modules/mcp/__tests__/read-only-hint.e2e.test.ts +0 -213
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.js +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.js +0 -0
- /package/dist/modules/{workflow → version-control}/change-request-hooks.js +0 -0
- /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.d.ts +0 -0
- /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.js +0 -0
- /package/dist/modules/{workflow → version-control}/events-delivery.js +0 -0
- /package/dist/modules/{workflow → version-control}/events.routes.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/change-request-link.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/change-request-link.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/git-version.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/git-version.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/merge-commit.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/merge-commit.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/node-git-runner.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/recovery-bot.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/recovery-bot.js +0 -0
- /package/dist/modules/{workflow → version-control}/sanitize-error.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/sanitize-error.js +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/change-request-hooks.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/fake-file-lock-db.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.canonical.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.enqueue-if-absent.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.repository-replaced.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/sanitize-error.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read-shape.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/change-request-read-shape.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/change-request-summary.ts +0 -0
- /package/src/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/branchAuthor.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/change-request-link.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/git-version.failure.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/git-version.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/node-git-runner.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.getPrDetail.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.placeholder.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-cancel.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-delete.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-update.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/change-request-link.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/git-version.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/merge-commit.ts +0 -0
- /package/src/modules/{workflow → version-control}/recovery-bot.ts +0 -0
- /package/src/modules/{workflow → version-control}/sanitize-error.ts +0 -0
|
@@ -53,7 +53,7 @@ function heldCommits() {
|
|
|
53
53
|
const open = new Map<string, () => void>();
|
|
54
54
|
let inFlight = 0;
|
|
55
55
|
let peak = 0;
|
|
56
|
-
const
|
|
56
|
+
const versionControl = {
|
|
57
57
|
runPendingCommit: vi.fn(
|
|
58
58
|
(workspaceId: string) =>
|
|
59
59
|
new Promise<void>((resolve) => {
|
|
@@ -67,7 +67,7 @@ function heldCommits() {
|
|
|
67
67
|
),
|
|
68
68
|
};
|
|
69
69
|
return {
|
|
70
|
-
|
|
70
|
+
versionControl,
|
|
71
71
|
release: (workspaceId: string) => open.get(workspaceId)?.(),
|
|
72
72
|
releaseAll: () => [...open.keys()].forEach((id) => open.get(id)?.()),
|
|
73
73
|
get inFlight() {
|
|
@@ -81,12 +81,12 @@ function heldCommits() {
|
|
|
81
81
|
|
|
82
82
|
function makeWorker(
|
|
83
83
|
service: PendingCommitsService,
|
|
84
|
-
|
|
84
|
+
versionControl: { runPendingCommit: ReturnType<typeof vi.fn> },
|
|
85
85
|
workspaceIds: string[],
|
|
86
86
|
): PendingCommitsWorker {
|
|
87
87
|
const worker = new PendingCommitsWorker({
|
|
88
88
|
service,
|
|
89
|
-
|
|
89
|
+
versionControl: versionControl as never,
|
|
90
90
|
recoveryAgent: { run: vi.fn() } as unknown as RecoveryAgentRunner,
|
|
91
91
|
feedback: { send: vi.fn() } as unknown as ISystemNoticeSink,
|
|
92
92
|
workspaces: { knownWorkspaces: () => workspaceIds.map((id) => ({ id, branch: 'feat/x' })) },
|
|
@@ -104,7 +104,7 @@ describe('PendingCommitsWorker.drainOnce across workspaces', () => {
|
|
|
104
104
|
it('a workspace whose remote has stalled does not delay another workspace', async () => {
|
|
105
105
|
const service = queueWith([row('ws-stalled'), row('ws-fine')]);
|
|
106
106
|
const commits = heldCommits();
|
|
107
|
-
const worker = makeWorker(service, commits.
|
|
107
|
+
const worker = makeWorker(service, commits.versionControl, ['ws-stalled', 'ws-fine']);
|
|
108
108
|
|
|
109
109
|
const pass = worker.drainOnce();
|
|
110
110
|
await settle();
|
|
@@ -127,7 +127,7 @@ describe('PendingCommitsWorker.drainOnce across workspaces', () => {
|
|
|
127
127
|
// encoded one. They are one workspace, one clone, and one drain.
|
|
128
128
|
const service = queueWith([]);
|
|
129
129
|
const commits = heldCommits();
|
|
130
|
-
const worker = makeWorker(service, commits.
|
|
130
|
+
const worker = makeWorker(service, commits.versionControl, ['alice/feature', 'alice%2Ffeature']);
|
|
131
131
|
|
|
132
132
|
await worker.drainOnce();
|
|
133
133
|
|
|
@@ -139,7 +139,7 @@ describe('PendingCommitsWorker.drainOnce across workspaces', () => {
|
|
|
139
139
|
const ids = ['ws-1', 'ws-2', 'ws-3', 'ws-4', 'ws-5', 'ws-6'];
|
|
140
140
|
const service = queueWith(ids.map((id) => row(id)));
|
|
141
141
|
const commits = heldCommits();
|
|
142
|
-
const worker = makeWorker(service, commits.
|
|
142
|
+
const worker = makeWorker(service, commits.versionControl, ids);
|
|
143
143
|
|
|
144
144
|
const pass = worker.drainOnce();
|
|
145
145
|
await settle();
|
|
@@ -169,7 +169,7 @@ describe('PendingCommitsWorker.drainOnce across workspaces', () => {
|
|
|
169
169
|
(service.claimNext as ReturnType<typeof vi.fn>).mockImplementation(async () => rows.shift() ?? null);
|
|
170
170
|
(service.hasReadyRow as ReturnType<typeof vi.fn>).mockImplementation(async () => rows.length > 0);
|
|
171
171
|
const commits = heldCommits();
|
|
172
|
-
const worker = makeWorker(service, commits.
|
|
172
|
+
const worker = makeWorker(service, commits.versionControl, ['ws-1']);
|
|
173
173
|
|
|
174
174
|
const pass = worker.drainOnce();
|
|
175
175
|
await settle();
|
|
@@ -177,7 +177,7 @@ describe('PendingCommitsWorker.drainOnce across workspaces', () => {
|
|
|
177
177
|
|
|
178
178
|
commits.release('ws-1');
|
|
179
179
|
await settle();
|
|
180
|
-
expect(commits.
|
|
180
|
+
expect(commits.versionControl.runPendingCommit).toHaveBeenCalledTimes(2);
|
|
181
181
|
|
|
182
182
|
commits.release('ws-1');
|
|
183
183
|
await pass;
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
N_TRANSIENT,
|
|
7
7
|
PendingCommitsWorker,
|
|
8
8
|
type RecoveryAgentRunner,
|
|
9
|
-
type
|
|
9
|
+
type VersionControlCommitDriver,
|
|
10
10
|
type WorkspaceProvider,
|
|
11
11
|
} from '../pending-commits.worker.js';
|
|
12
12
|
import type {
|
|
@@ -16,7 +16,7 @@ import type {
|
|
|
16
16
|
import { assertInsideRepo } from '../../kb-fs/repo-path.js';
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
|
-
* Unit tests for the queue-draining worker. The service +
|
|
19
|
+
* Unit tests for the queue-draining worker. The service + version-control layers
|
|
20
20
|
* have their own tests; here we focus on the *decision tree* the worker
|
|
21
21
|
* applies per claimed row:
|
|
22
22
|
*
|
|
@@ -88,7 +88,7 @@ function makeFeedback(): ISystemNoticeSink {
|
|
|
88
88
|
|
|
89
89
|
describe('PendingCommitsWorker.drainOnce', () => {
|
|
90
90
|
let service: PendingCommitsService;
|
|
91
|
-
let
|
|
91
|
+
let versionControl: VersionControlCommitDriver & {
|
|
92
92
|
runPendingCommit: ReturnType<typeof vi.fn>;
|
|
93
93
|
};
|
|
94
94
|
let recoveryAgent: RecoveryAgentRunner & { run: ReturnType<typeof vi.fn> };
|
|
@@ -97,12 +97,12 @@ describe('PendingCommitsWorker.drainOnce', () => {
|
|
|
97
97
|
|
|
98
98
|
beforeEach(() => {
|
|
99
99
|
service = makeService();
|
|
100
|
-
|
|
100
|
+
versionControl = { runPendingCommit: vi.fn() } as never;
|
|
101
101
|
recoveryAgent = { run: vi.fn() } as never;
|
|
102
102
|
feedback = makeFeedback() as never;
|
|
103
103
|
worker = new PendingCommitsWorker({
|
|
104
104
|
service,
|
|
105
|
-
|
|
105
|
+
versionControl,
|
|
106
106
|
recoveryAgent,
|
|
107
107
|
feedback,
|
|
108
108
|
workspaces: makeWorkspaces(),
|
|
@@ -118,12 +118,12 @@ describe('PendingCommitsWorker.drainOnce', () => {
|
|
|
118
118
|
it('happy path: claims row, runs commit, marks succeeded — no other branches taken', async () => {
|
|
119
119
|
const row = makeRow();
|
|
120
120
|
(service.claimNext as ReturnType<typeof vi.fn>).mockResolvedValueOnce(row);
|
|
121
|
-
|
|
121
|
+
versionControl.runPendingCommit.mockResolvedValueOnce(undefined);
|
|
122
122
|
|
|
123
123
|
await worker.drainOnce();
|
|
124
124
|
|
|
125
125
|
expect(service.claimNext).toHaveBeenCalledWith('ws-1', expect.any(Date));
|
|
126
|
-
expect(
|
|
126
|
+
expect(versionControl.runPendingCommit).toHaveBeenCalledWith(
|
|
127
127
|
'ws-1',
|
|
128
128
|
'feat/x',
|
|
129
129
|
'Foo.md',
|
|
@@ -147,7 +147,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
|
|
|
147
147
|
*/
|
|
148
148
|
it("the commit author's id carries no address, and is the same for one person", async () => {
|
|
149
149
|
const seen: string[] = [];
|
|
150
|
-
|
|
150
|
+
versionControl.runPendingCommit.mockImplementation(async (_ws: string, _b: string, _p: string, user: AuthUser) => {
|
|
151
151
|
seen.push(user.id);
|
|
152
152
|
});
|
|
153
153
|
for (const authorEmail of ['alice@example.com', 'Alice@Example.com ', 'bob@example.com']) {
|
|
@@ -168,7 +168,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
|
|
|
168
168
|
|
|
169
169
|
await worker.drainOnce();
|
|
170
170
|
|
|
171
|
-
expect(
|
|
171
|
+
expect(versionControl.runPendingCommit).not.toHaveBeenCalled();
|
|
172
172
|
expect(service.markSucceeded).not.toHaveBeenCalled();
|
|
173
173
|
});
|
|
174
174
|
|
|
@@ -176,7 +176,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
|
|
|
176
176
|
// attempts=0 → next attempt would be 1, which is < N_TRANSIENT (3).
|
|
177
177
|
const row = makeRow({ attempts: 0 });
|
|
178
178
|
(service.claimNext as ReturnType<typeof vi.fn>).mockResolvedValueOnce(row);
|
|
179
|
-
|
|
179
|
+
versionControl.runPendingCommit.mockRejectedValueOnce(new Error('transient git error'));
|
|
180
180
|
|
|
181
181
|
await worker.drainOnce();
|
|
182
182
|
|
|
@@ -192,7 +192,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
|
|
|
192
192
|
// crossing the budget. recoveryAgentRuns=0 → still within recovery budget.
|
|
193
193
|
const row = makeRow({ attempts: N_TRANSIENT - 1, recoveryAgentRuns: 0 });
|
|
194
194
|
(service.claimNext as ReturnType<typeof vi.fn>).mockResolvedValueOnce(row);
|
|
195
|
-
|
|
195
|
+
versionControl.runPendingCommit.mockRejectedValueOnce(new Error('cannot push: needs human'));
|
|
196
196
|
recoveryAgent.run.mockResolvedValueOnce(undefined);
|
|
197
197
|
|
|
198
198
|
await worker.drainOnce();
|
|
@@ -213,7 +213,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
|
|
|
213
213
|
it('a recovery-agent crash does not abort the worker — the row stays pending for the next pass', async () => {
|
|
214
214
|
const row = makeRow({ attempts: N_TRANSIENT - 1, recoveryAgentRuns: 0 });
|
|
215
215
|
(service.claimNext as ReturnType<typeof vi.fn>).mockResolvedValueOnce(row);
|
|
216
|
-
|
|
216
|
+
versionControl.runPendingCommit.mockRejectedValueOnce(new Error('cannot push'));
|
|
217
217
|
recoveryAgent.run.mockRejectedValueOnce(new Error('codemode wiring broken'));
|
|
218
218
|
|
|
219
219
|
// No throw — the worker swallows the agent crash and moves on.
|
|
@@ -233,7 +233,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
|
|
|
233
233
|
recoveryAgentRuns: N_RECOVERY,
|
|
234
234
|
});
|
|
235
235
|
(service.claimNext as ReturnType<typeof vi.fn>).mockResolvedValueOnce(row);
|
|
236
|
-
|
|
236
|
+
versionControl.runPendingCommit.mockRejectedValueOnce(new Error('unrecoverable'));
|
|
237
237
|
|
|
238
238
|
await worker.drainOnce();
|
|
239
239
|
|
|
@@ -265,7 +265,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
|
|
|
265
265
|
(service.claimNext as ReturnType<typeof vi.fn>).mockResolvedValueOnce(row);
|
|
266
266
|
// The commit layer's own refusal, built by its producer so the shape the
|
|
267
267
|
// worker switches on cannot drift from what is actually thrown.
|
|
268
|
-
|
|
268
|
+
versionControl.runPendingCommit.mockRejectedValueOnce(captureRefusal('KnowledgeBase/Reviews/PR-12.html'));
|
|
269
269
|
|
|
270
270
|
await worker.drainOnce();
|
|
271
271
|
|
|
@@ -293,7 +293,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
|
|
|
293
293
|
it('a feedback-sink failure does not throw — the row stays needs_attention regardless', async () => {
|
|
294
294
|
const row = makeRow({ attempts: N_TRANSIENT - 1, recoveryAgentRuns: N_RECOVERY });
|
|
295
295
|
(service.claimNext as ReturnType<typeof vi.fn>).mockResolvedValueOnce(row);
|
|
296
|
-
|
|
296
|
+
versionControl.runPendingCommit.mockRejectedValueOnce(new Error('unrecoverable'));
|
|
297
297
|
(feedback.send as ReturnType<typeof vi.fn>).mockRejectedValueOnce(new Error('feedback DB down'));
|
|
298
298
|
|
|
299
299
|
await expect(worker.drainOnce()).resolves.toBeUndefined();
|
|
@@ -324,7 +324,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
|
|
|
324
324
|
it('commits every queued row in ONE pass', async () => {
|
|
325
325
|
queue(12);
|
|
326
326
|
await worker.drainOnce();
|
|
327
|
-
expect(
|
|
327
|
+
expect(versionControl.runPendingCommit).toHaveBeenCalledTimes(12);
|
|
328
328
|
expect(service.markSucceeded).toHaveBeenCalledTimes(12);
|
|
329
329
|
});
|
|
330
330
|
|
|
@@ -333,7 +333,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
|
|
|
333
333
|
// so per-file runs cost a full parse each and all say the same thing.
|
|
334
334
|
queue(5);
|
|
335
335
|
await worker.drainOnce();
|
|
336
|
-
const skipped =
|
|
336
|
+
const skipped = versionControl.runPendingCommit.mock.calls.map((c) => c[4]?.skipValidation);
|
|
337
337
|
expect(skipped).toEqual([true, true, true, true, false]);
|
|
338
338
|
});
|
|
339
339
|
|
|
@@ -342,16 +342,16 @@ describe('PendingCommitsWorker.drainOnce', () => {
|
|
|
342
342
|
// would park every other user's save behind a huge migration.
|
|
343
343
|
queue(200);
|
|
344
344
|
await worker.drainOnce();
|
|
345
|
-
expect(
|
|
345
|
+
expect(versionControl.runPendingCommit).toHaveBeenCalledTimes(50);
|
|
346
346
|
});
|
|
347
347
|
|
|
348
348
|
it('gives up the pass the moment stop() lands mid-burst', async () => {
|
|
349
349
|
queue(12);
|
|
350
|
-
|
|
350
|
+
versionControl.runPendingCommit.mockImplementation(async () => {
|
|
351
351
|
(worker as unknown as { running: boolean }).running = false;
|
|
352
352
|
});
|
|
353
353
|
await worker.drainOnce();
|
|
354
|
-
expect(
|
|
354
|
+
expect(versionControl.runPendingCommit).toHaveBeenCalledTimes(1);
|
|
355
355
|
});
|
|
356
356
|
|
|
357
357
|
it('carries on after a transient failure and ends the pass when nothing is ready', async () => {
|
|
@@ -370,7 +370,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
|
|
|
370
370
|
.mockResolvedValueOnce(makeRow({ id: 'bad' }))
|
|
371
371
|
.mockResolvedValueOnce(makeRow({ id: 'good' }))
|
|
372
372
|
.mockResolvedValue(null);
|
|
373
|
-
|
|
373
|
+
versionControl.runPendingCommit
|
|
374
374
|
.mockRejectedValueOnce(new Error('push rejected'))
|
|
375
375
|
.mockResolvedValueOnce(undefined);
|
|
376
376
|
|
|
@@ -378,7 +378,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
|
|
|
378
378
|
|
|
379
379
|
expect(service.markTransientFailure).toHaveBeenCalledTimes(1);
|
|
380
380
|
expect(service.markSucceeded).toHaveBeenCalledTimes(1);
|
|
381
|
-
expect(
|
|
381
|
+
expect(versionControl.runPendingCommit).toHaveBeenCalledTimes(2);
|
|
382
382
|
});
|
|
383
383
|
|
|
384
384
|
it('validates the final slot when the burst hits its ceiling', async () => {
|
|
@@ -387,7 +387,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
|
|
|
387
387
|
// backlog on an unvalidated commit.
|
|
388
388
|
queue(200);
|
|
389
389
|
await worker.drainOnce();
|
|
390
|
-
const calls =
|
|
390
|
+
const calls = versionControl.runPendingCommit.mock.calls;
|
|
391
391
|
expect(calls).toHaveLength(50);
|
|
392
392
|
expect(calls[49]?.[4]?.skipValidation).toBe(false);
|
|
393
393
|
expect(calls[48]?.[4]?.skipValidation).toBe(true);
|
|
@@ -411,7 +411,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
|
|
|
411
411
|
await expect(worker.drainOnce()).resolves.toBeUndefined();
|
|
412
412
|
|
|
413
413
|
expect(service.markSucceeded).toHaveBeenCalledTimes(1);
|
|
414
|
-
expect(
|
|
414
|
+
expect(versionControl.runPendingCommit.mock.calls[0]?.[4]?.skipValidation).toBe(false);
|
|
415
415
|
});
|
|
416
416
|
});
|
|
417
417
|
});
|
|
@@ -420,7 +420,7 @@ describe('PendingCommitsWorker lifecycle', () => {
|
|
|
420
420
|
it('start() is idempotent; stop() awaits the in-flight pass without throwing', async () => {
|
|
421
421
|
const worker = new PendingCommitsWorker({
|
|
422
422
|
service: makeService(),
|
|
423
|
-
|
|
423
|
+
versionControl: { runPendingCommit: vi.fn() },
|
|
424
424
|
recoveryAgent: { run: vi.fn() },
|
|
425
425
|
feedback: makeFeedback(),
|
|
426
426
|
workspaces: makeWorkspaces(),
|
|
@@ -6,18 +6,18 @@ import os from 'node:os';
|
|
|
6
6
|
|
|
7
7
|
import type { GitService } from '../git/git.service.js';
|
|
8
8
|
import type { PullRequestService } from '../git/pull-request.service.js';
|
|
9
|
-
import type {
|
|
9
|
+
import type { IChangeRequestReviewService } from '../change-request-review/change-request-review.interface.js';
|
|
10
10
|
import type { WorkspaceService } from '../../workspace/workspace.service.js';
|
|
11
11
|
import type { IAccessControl } from '../../access/access-control.interface.js';
|
|
12
12
|
import { FileLockService } from '../file-lock.service.js';
|
|
13
13
|
import { PendingCommitsService } from '../pending-commits.service.js';
|
|
14
|
-
import {
|
|
14
|
+
import { VersionControlService } from '../version-control.service.js';
|
|
15
15
|
import type { Database } from '../../database/connection.js';
|
|
16
16
|
import {
|
|
17
17
|
PushNeedsAgentResolutionError,
|
|
18
18
|
RolesYamlPreservationError,
|
|
19
19
|
} from '../../../shared/domain-errors.js';
|
|
20
|
-
import type {
|
|
20
|
+
import type { VersionControlEventBus } from '../event-bus.js';
|
|
21
21
|
import { openChangeGate } from '../../../__tests__/open-change-gate.js';
|
|
22
22
|
|
|
23
23
|
/**
|
|
@@ -78,12 +78,12 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
|
|
|
78
78
|
// Simulate a concurrent editor already holding the roles.yaml lock. When set,
|
|
79
79
|
// acquire returns { acquired: false } and the restore must fail-closed.
|
|
80
80
|
lockHeldBy?: string;
|
|
81
|
-
events?:
|
|
81
|
+
events?: VersionControlEventBus;
|
|
82
82
|
}) {
|
|
83
83
|
const ac = noopAccessControl();
|
|
84
|
-
const
|
|
84
|
+
const changeRequestReview = {
|
|
85
85
|
mergePr: vi.fn().mockResolvedValue({ prNumber: 1, sha: 'merged', mergedAt: 't' }),
|
|
86
|
-
} as unknown as
|
|
86
|
+
} as unknown as IChangeRequestReviewService;
|
|
87
87
|
|
|
88
88
|
const workspaceService = {
|
|
89
89
|
getOrCreateForBranch: vi.fn(async (branch: string) => ({ id: encodeURIComponent(branch) })),
|
|
@@ -132,44 +132,44 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
|
|
|
132
132
|
const release = vi.fn(async () => undefined);
|
|
133
133
|
const fileLocks = { acquire, release } as unknown as FileLockService;
|
|
134
134
|
|
|
135
|
-
const svc = new
|
|
135
|
+
const svc = new VersionControlService(
|
|
136
136
|
{} as unknown as Database,
|
|
137
|
-
git, prs,
|
|
137
|
+
git, prs, changeRequestReview, workspaceService, ac,
|
|
138
138
|
fileLocks, {} as unknown as PendingCommitsService,
|
|
139
139
|
testKbContext({ kbDirName: KB_DIR }),
|
|
140
140
|
openChangeGate(),
|
|
141
141
|
opts.events,
|
|
142
142
|
);
|
|
143
|
-
// Conflicts are now surfaced by the local merge inside `
|
|
143
|
+
// Conflicts are now surfaced by the local merge inside `changeRequestReview.mergePr`
|
|
144
144
|
// (mocked to resolve here), so there's no provider "mergeable" pre-check to stub.
|
|
145
|
-
return { svc, git, prs,
|
|
145
|
+
return { svc, git, prs, changeRequestReview, fileLocks };
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
async function merge(svc:
|
|
148
|
+
async function merge(svc: VersionControlService) {
|
|
149
149
|
return svc.mergeChangeRequest(1, USER, 'sha', [], 'open', 'Title', BASE, 'w1', { bypass: false });
|
|
150
150
|
}
|
|
151
151
|
|
|
152
152
|
it('no-ops when the CR does not change roles.yaml (identical content)', async () => {
|
|
153
|
-
const { svc, git,
|
|
153
|
+
const { svc, git, changeRequestReview } = makeSvc({ headRoles: BASE_ROLES, baseRoles: BASE_ROLES });
|
|
154
154
|
await merge(svc);
|
|
155
155
|
// No restore write/commit/push, but the merge still proceeds.
|
|
156
156
|
expect(git.commitFile).not.toHaveBeenCalled();
|
|
157
157
|
expect(git.push).not.toHaveBeenCalled();
|
|
158
|
-
expect(
|
|
158
|
+
expect(changeRequestReview.mergePr).toHaveBeenCalledTimes(1);
|
|
159
159
|
});
|
|
160
160
|
|
|
161
161
|
it('no-ops when neither base nor head has a roles.yaml (both absent)', async () => {
|
|
162
|
-
const { svc, git,
|
|
162
|
+
const { svc, git, changeRequestReview } = makeSvc({ headRoles: null, baseRoles: null });
|
|
163
163
|
await merge(svc);
|
|
164
164
|
expect(git.commitFile).not.toHaveBeenCalled();
|
|
165
|
-
expect(
|
|
165
|
+
expect(changeRequestReview.mergePr).toHaveBeenCalledTimes(1);
|
|
166
166
|
});
|
|
167
167
|
|
|
168
168
|
it('restores base roles.yaml on the source branch when the CR changed it (escalation guard)', async () => {
|
|
169
169
|
// Seed the source workspace with the ATTACKER version, as it would be after
|
|
170
170
|
// reset-to-origin of the CR head.
|
|
171
171
|
await fs.writeFile(path.join(headRepoDir, 'roles.yaml'), ATTACKER_ROLES);
|
|
172
|
-
const { svc, git,
|
|
172
|
+
const { svc, git, changeRequestReview, fileLocks } = makeSvc({ headRoles: ATTACKER_ROLES, baseRoles: BASE_ROLES });
|
|
173
173
|
|
|
174
174
|
await merge(svc);
|
|
175
175
|
|
|
@@ -202,7 +202,7 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
|
|
|
202
202
|
USER,
|
|
203
203
|
);
|
|
204
204
|
// ...and only THEN does the merge proceed.
|
|
205
|
-
expect(
|
|
205
|
+
expect(changeRequestReview.mergePr).toHaveBeenCalledTimes(1);
|
|
206
206
|
});
|
|
207
207
|
|
|
208
208
|
it('ABORTS the merge when roles.yaml is locked by a concurrent editor (fail-closed)', async () => {
|
|
@@ -210,7 +210,7 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
|
|
|
210
210
|
// it — acquire returns { acquired: false }, so the merge aborts rather than
|
|
211
211
|
// writing over (or being overwritten by) the live edit.
|
|
212
212
|
await fs.writeFile(path.join(headRepoDir, 'roles.yaml'), ATTACKER_ROLES);
|
|
213
|
-
const { svc, git,
|
|
213
|
+
const { svc, git, changeRequestReview } = makeSvc({
|
|
214
214
|
headRoles: ATTACKER_ROLES,
|
|
215
215
|
baseRoles: BASE_ROLES,
|
|
216
216
|
lockHeldBy: 'Someone Else',
|
|
@@ -220,7 +220,7 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
|
|
|
220
220
|
// Nothing was written/committed/pushed, and the merge never ran.
|
|
221
221
|
expect(git.commitFile).not.toHaveBeenCalled();
|
|
222
222
|
expect(git.push).not.toHaveBeenCalled();
|
|
223
|
-
expect(
|
|
223
|
+
expect(changeRequestReview.mergePr).not.toHaveBeenCalled();
|
|
224
224
|
// The on-disk attacker version is untouched — the lock holder's edit stands.
|
|
225
225
|
const onDisk = await fs.readFile(path.join(headRepoDir, 'roles.yaml'), 'utf-8');
|
|
226
226
|
expect(onDisk).toBe(ATTACKER_ROLES);
|
|
@@ -240,13 +240,13 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
|
|
|
240
240
|
it('ABORTS the merge when the host refuses the restore push, keeping the restore locally (409, saved-locally, banner)', async () => {
|
|
241
241
|
await fs.writeFile(path.join(headRepoDir, 'roles.yaml'), ATTACKER_ROLES);
|
|
242
242
|
const emit = vi.fn();
|
|
243
|
-
const { svc, git,
|
|
243
|
+
const { svc, git, changeRequestReview, fileLocks } = makeSvc({
|
|
244
244
|
headRoles: ATTACKER_ROLES,
|
|
245
245
|
baseRoles: BASE_ROLES,
|
|
246
246
|
pushImpl: async () => {
|
|
247
247
|
throw new Error('git push failed: remote: Internal Server Error');
|
|
248
248
|
},
|
|
249
|
-
events: { emit } as unknown as
|
|
249
|
+
events: { emit } as unknown as VersionControlEventBus,
|
|
250
250
|
});
|
|
251
251
|
|
|
252
252
|
const err = await merge(svc).catch((e: unknown) => e);
|
|
@@ -258,7 +258,7 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
|
|
|
258
258
|
expect(JSON.stringify((err as PushNeedsAgentResolutionError).payload)).not.toContain('Internal Server Error');
|
|
259
259
|
// Fail-closed: the merge must NOT have run — origin still carries the
|
|
260
260
|
// divergent roles.yaml.
|
|
261
|
-
expect(
|
|
261
|
+
expect(changeRequestReview.mergePr).not.toHaveBeenCalled();
|
|
262
262
|
// The local result stays: base version on disk, committed, lock dropped.
|
|
263
263
|
expect(await fs.readFile(path.join(headRepoDir, 'roles.yaml'), 'utf-8')).toBe(BASE_ROLES);
|
|
264
264
|
expect(git.commitFile).toHaveBeenCalled();
|
|
@@ -274,7 +274,7 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
|
|
|
274
274
|
it('a non-fast-forward restore push takes the cooperative pull-rebase, then the merge proceeds', async () => {
|
|
275
275
|
await fs.writeFile(path.join(headRepoDir, 'roles.yaml'), ATTACKER_ROLES);
|
|
276
276
|
let pushes = 0;
|
|
277
|
-
const { svc, git,
|
|
277
|
+
const { svc, git, changeRequestReview } = makeSvc({
|
|
278
278
|
headRoles: ATTACKER_ROLES,
|
|
279
279
|
baseRoles: BASE_ROLES,
|
|
280
280
|
pushImpl: async () => {
|
|
@@ -285,13 +285,13 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
|
|
|
285
285
|
await merge(svc);
|
|
286
286
|
expect(git.pull).toHaveBeenCalled();
|
|
287
287
|
expect(git.push).toHaveBeenCalledTimes(2);
|
|
288
|
-
expect(
|
|
288
|
+
expect(changeRequestReview.mergePr).toHaveBeenCalledTimes(1);
|
|
289
289
|
});
|
|
290
290
|
|
|
291
291
|
it('ABORTS the merge if the CR (PR) cannot be resolved', async () => {
|
|
292
|
-
const { svc,
|
|
292
|
+
const { svc, changeRequestReview } = makeSvc({ headRoles: BASE_ROLES, baseRoles: BASE_ROLES, getPrResult: null });
|
|
293
293
|
await expect(merge(svc)).rejects.toBeInstanceOf(RolesYamlPreservationError);
|
|
294
|
-
expect(
|
|
294
|
+
expect(changeRequestReview.mergePr).not.toHaveBeenCalled();
|
|
295
295
|
});
|
|
296
296
|
|
|
297
297
|
it('refreshes the merge inputs from the updated PR head after a preservation commit', async () => {
|
|
@@ -299,13 +299,13 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
|
|
|
299
299
|
// (resolved pre-preservation) go stale. mergeChangeRequest must re-resolve them
|
|
300
300
|
// from the live PR before merging, not forward the originals.
|
|
301
301
|
await fs.writeFile(path.join(headRepoDir, 'roles.yaml'), ATTACKER_ROLES);
|
|
302
|
-
const { svc, prs,
|
|
302
|
+
const { svc, prs, changeRequestReview } = makeSvc({ headRoles: ATTACKER_ROLES, baseRoles: BASE_ROLES });
|
|
303
303
|
|
|
304
304
|
await merge(svc);
|
|
305
305
|
|
|
306
306
|
expect(prs.getPrDetail).toHaveBeenCalledWith(1, expect.objectContaining({ fresh: true }));
|
|
307
307
|
// mergePr is called with the REFRESHED head sha, not the original 'sha'.
|
|
308
|
-
expect(
|
|
308
|
+
expect(changeRequestReview.mergePr).toHaveBeenCalledWith(
|
|
309
309
|
1, USER, 'sha-after-preserve', [], 'open', 'Title', BASE, 'w1', { bypass: false },
|
|
310
310
|
);
|
|
311
311
|
});
|
|
@@ -313,10 +313,10 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
|
|
|
313
313
|
it('does NOT refresh (keeps the caller inputs) when the CR does not touch roles.yaml', async () => {
|
|
314
314
|
// No preservation commit → no head advance → nothing to refresh; the original
|
|
315
315
|
// headSha/approvals flow straight through.
|
|
316
|
-
const { svc, prs,
|
|
316
|
+
const { svc, prs, changeRequestReview } = makeSvc({ headRoles: BASE_ROLES, baseRoles: BASE_ROLES });
|
|
317
317
|
await merge(svc);
|
|
318
318
|
expect(prs.getPrDetail).not.toHaveBeenCalled();
|
|
319
|
-
expect(
|
|
319
|
+
expect(changeRequestReview.mergePr).toHaveBeenCalledWith(
|
|
320
320
|
1, USER, 'sha', [], 'open', 'Title', BASE, 'w1', { bypass: false },
|
|
321
321
|
);
|
|
322
322
|
});
|
|
@@ -327,14 +327,14 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
|
|
|
327
327
|
// origin/head would still carry the divergent roles.yaml, so this must fail
|
|
328
328
|
// closed rather than return "nothing to do".
|
|
329
329
|
await fs.writeFile(path.join(headRepoDir, 'roles.yaml'), BASE_ROLES);
|
|
330
|
-
const { svc, git,
|
|
330
|
+
const { svc, git, changeRequestReview } = makeSvc({
|
|
331
331
|
headRoles: ATTACKER_ROLES,
|
|
332
332
|
baseRoles: BASE_ROLES,
|
|
333
333
|
commitFileResult: null,
|
|
334
334
|
});
|
|
335
335
|
await expect(merge(svc)).rejects.toBeInstanceOf(RolesYamlPreservationError);
|
|
336
336
|
expect(git.push).not.toHaveBeenCalled();
|
|
337
|
-
expect(
|
|
337
|
+
expect(changeRequestReview.mergePr).not.toHaveBeenCalled();
|
|
338
338
|
});
|
|
339
339
|
|
|
340
340
|
it('a merge retried after a refused restore push pushes the restore that is already committed, then merges', async () => {
|
|
@@ -345,7 +345,7 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
|
|
|
345
345
|
// of everything origin has. The retry must push it and merge, not refuse
|
|
346
346
|
// "out of sync" forever.
|
|
347
347
|
await fs.writeFile(path.join(headRepoDir, 'roles.yaml'), BASE_ROLES);
|
|
348
|
-
const { svc, git,
|
|
348
|
+
const { svc, git, changeRequestReview } = makeSvc({
|
|
349
349
|
headRoles: ATTACKER_ROLES,
|
|
350
350
|
baseRoles: BASE_ROLES,
|
|
351
351
|
commitFileResult: null,
|
|
@@ -353,7 +353,7 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
|
|
|
353
353
|
});
|
|
354
354
|
await expect(merge(svc)).resolves.toMatchObject({ kind: 'merged' });
|
|
355
355
|
expect(git.push).toHaveBeenCalledTimes(1);
|
|
356
|
-
expect(
|
|
356
|
+
expect(changeRequestReview.mergePr).toHaveBeenCalled();
|
|
357
357
|
});
|
|
358
358
|
|
|
359
359
|
it('still ABORTS when the base version is on disk but the clone is BEHIND origin/head (fail-closed)', async () => {
|
|
@@ -363,7 +363,7 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
|
|
|
363
363
|
// the merge would land it — so holding unpushed work is not the question,
|
|
364
364
|
// holding all of origin is.
|
|
365
365
|
await fs.writeFile(path.join(headRepoDir, 'roles.yaml'), BASE_ROLES);
|
|
366
|
-
const { svc, git,
|
|
366
|
+
const { svc, git, changeRequestReview } = makeSvc({
|
|
367
367
|
headRoles: ATTACKER_ROLES,
|
|
368
368
|
baseRoles: BASE_ROLES,
|
|
369
369
|
commitFileResult: null,
|
|
@@ -371,12 +371,12 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
|
|
|
371
371
|
});
|
|
372
372
|
await expect(merge(svc)).rejects.toBeInstanceOf(RolesYamlPreservationError);
|
|
373
373
|
expect(git.push).not.toHaveBeenCalled();
|
|
374
|
-
expect(
|
|
374
|
+
expect(changeRequestReview.mergePr).not.toHaveBeenCalled();
|
|
375
375
|
});
|
|
376
376
|
|
|
377
377
|
it('ABORTS when the probe for "does HEAD hold origin/head" itself fails (fail-closed, not open)', async () => {
|
|
378
378
|
await fs.writeFile(path.join(headRepoDir, 'roles.yaml'), BASE_ROLES);
|
|
379
|
-
const { svc, git,
|
|
379
|
+
const { svc, git, changeRequestReview } = makeSvc({
|
|
380
380
|
headRoles: ATTACKER_ROLES,
|
|
381
381
|
baseRoles: BASE_ROLES,
|
|
382
382
|
commitFileResult: null,
|
|
@@ -384,7 +384,7 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
|
|
|
384
384
|
});
|
|
385
385
|
await expect(merge(svc)).rejects.toBeInstanceOf(RolesYamlPreservationError);
|
|
386
386
|
expect(git.push).not.toHaveBeenCalled();
|
|
387
|
-
expect(
|
|
387
|
+
expect(changeRequestReview.mergePr).not.toHaveBeenCalled();
|
|
388
388
|
});
|
|
389
389
|
|
|
390
390
|
it('ABORTS the merge when the post-preservation CR detail cannot be reloaded (fail-closed)', async () => {
|
|
@@ -392,24 +392,24 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
|
|
|
392
392
|
// re-resolved. If the fresh detail is unavailable, abort — never fall back to
|
|
393
393
|
// the stale headSha/approvals.
|
|
394
394
|
await fs.writeFile(path.join(headRepoDir, 'roles.yaml'), ATTACKER_ROLES);
|
|
395
|
-
const { svc,
|
|
395
|
+
const { svc, changeRequestReview } = makeSvc({
|
|
396
396
|
headRoles: ATTACKER_ROLES,
|
|
397
397
|
baseRoles: BASE_ROLES,
|
|
398
398
|
getPrDetailResult: null,
|
|
399
399
|
});
|
|
400
400
|
await expect(merge(svc)).rejects.toBeInstanceOf(RolesYamlPreservationError);
|
|
401
|
-
expect(
|
|
401
|
+
expect(changeRequestReview.mergePr).not.toHaveBeenCalled();
|
|
402
402
|
});
|
|
403
403
|
|
|
404
404
|
it('ABORTS the merge when reading roles.yaml fails for a non-absence reason (fail-closed)', async () => {
|
|
405
405
|
// readFileAtRef now rethrows real git errors (only true absence maps to null),
|
|
406
406
|
// so a fatal read must surface as RolesYamlPreservationError — never be mistaken
|
|
407
407
|
// for "roles.yaml absent" and waved through.
|
|
408
|
-
const { svc, git,
|
|
408
|
+
const { svc, git, changeRequestReview } = makeSvc({ headRoles: ATTACKER_ROLES, baseRoles: BASE_ROLES });
|
|
409
409
|
(git.readFileAtRef as unknown as ReturnType<typeof vi.fn>).mockRejectedValue(
|
|
410
410
|
new Error('git show failed: fatal: unable to read tree object'),
|
|
411
411
|
);
|
|
412
412
|
await expect(merge(svc)).rejects.toBeInstanceOf(RolesYamlPreservationError);
|
|
413
|
-
expect(
|
|
413
|
+
expect(changeRequestReview.mergePr).not.toHaveBeenCalled();
|
|
414
414
|
});
|
|
415
415
|
});
|