@indigoai-us/hq-cloud 6.18.44-alpha.48 → 6.18.44-alpha.49
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/dist/active-company.test.d.ts +2 -0
- package/dist/active-company.test.d.ts.map +1 -0
- package/dist/active-company.test.js +149 -0
- package/dist/active-company.test.js.map +1 -0
- package/dist/agent-codex-instructions.test.d.ts +2 -0
- package/dist/agent-codex-instructions.test.d.ts.map +1 -0
- package/dist/agent-codex-instructions.test.js +276 -0
- package/dist/agent-codex-instructions.test.js.map +1 -0
- package/dist/backup-prune.test.d.ts +2 -0
- package/dist/backup-prune.test.d.ts.map +1 -0
- package/dist/backup-prune.test.js +154 -0
- package/dist/backup-prune.test.js.map +1 -0
- package/dist/bandwidth.test.d.ts +2 -0
- package/dist/bandwidth.test.d.ts.map +1 -0
- package/dist/bandwidth.test.js +342 -0
- package/dist/bandwidth.test.js.map +1 -0
- package/dist/best-effort-error.test.d.ts +2 -0
- package/dist/best-effort-error.test.d.ts.map +1 -0
- package/dist/best-effort-error.test.js +54 -0
- package/dist/best-effort-error.test.js.map +1 -0
- package/dist/bin/area-ledger-migration.test.d.ts +2 -0
- package/dist/bin/area-ledger-migration.test.d.ts.map +1 -0
- package/dist/bin/area-ledger-migration.test.js +410 -0
- package/dist/bin/area-ledger-migration.test.js.map +1 -0
- package/dist/bin/backup-prune-runner.test.d.ts +2 -0
- package/dist/bin/backup-prune-runner.test.d.ts.map +1 -0
- package/dist/bin/backup-prune-runner.test.js +22 -0
- package/dist/bin/backup-prune-runner.test.js.map +1 -0
- package/dist/bin/journal-repair.test.d.ts +2 -0
- package/dist/bin/journal-repair.test.d.ts.map +1 -0
- package/dist/bin/journal-repair.test.js +53 -0
- package/dist/bin/journal-repair.test.js.map +1 -0
- package/dist/bin/layout-compatibility.test.d.ts +2 -0
- package/dist/bin/layout-compatibility.test.d.ts.map +1 -0
- package/dist/bin/layout-compatibility.test.js +87 -0
- package/dist/bin/layout-compatibility.test.js.map +1 -0
- package/dist/bin/outpost-heartbeat.test.d.ts +7 -0
- package/dist/bin/outpost-heartbeat.test.d.ts.map +1 -0
- package/dist/bin/outpost-heartbeat.test.js +84 -0
- package/dist/bin/outpost-heartbeat.test.js.map +1 -0
- package/dist/bin/outpost-session-host.test.d.ts +7 -0
- package/dist/bin/outpost-session-host.test.d.ts.map +1 -0
- package/dist/bin/outpost-session-host.test.js +52 -0
- package/dist/bin/outpost-session-host.test.js.map +1 -0
- package/dist/bin/sync-mutation.test.d.ts +2 -0
- package/dist/bin/sync-mutation.test.d.ts.map +1 -0
- package/dist/bin/sync-mutation.test.js +64 -0
- package/dist/bin/sync-mutation.test.js.map +1 -0
- package/dist/bin/sync-runner-args.test.d.ts +2 -0
- package/dist/bin/sync-runner-args.test.d.ts.map +1 -0
- package/dist/bin/sync-runner-args.test.js +82 -0
- package/dist/bin/sync-runner-args.test.js.map +1 -0
- package/dist/bin/sync-runner-auth-wait.test.d.ts +2 -0
- package/dist/bin/sync-runner-auth-wait.test.d.ts.map +1 -0
- package/dist/bin/sync-runner-auth-wait.test.js +406 -0
- package/dist/bin/sync-runner-auth-wait.test.js.map +1 -0
- package/dist/bin/sync-runner-backoff.regression.test.d.ts +29 -0
- package/dist/bin/sync-runner-backoff.regression.test.d.ts.map +1 -0
- package/dist/bin/sync-runner-backoff.regression.test.js +224 -0
- package/dist/bin/sync-runner-backoff.regression.test.js.map +1 -0
- package/dist/bin/sync-runner-company.test.d.ts +2 -0
- package/dist/bin/sync-runner-company.test.d.ts.map +1 -0
- package/dist/bin/sync-runner-company.test.js +2439 -0
- package/dist/bin/sync-runner-company.test.js.map +1 -0
- package/dist/bin/sync-runner-delete-snapshot-mixed.bench.test.d.ts +2 -0
- package/dist/bin/sync-runner-delete-snapshot-mixed.bench.test.d.ts.map +1 -0
- package/dist/bin/sync-runner-delete-snapshot-mixed.bench.test.js +648 -0
- package/dist/bin/sync-runner-delete-snapshot-mixed.bench.test.js.map +1 -0
- package/dist/bin/sync-runner-delete-snapshot.bench.test.d.ts +2 -0
- package/dist/bin/sync-runner-delete-snapshot.bench.test.d.ts.map +1 -0
- package/dist/bin/sync-runner-delete-snapshot.bench.test.js +329 -0
- package/dist/bin/sync-runner-delete-snapshot.bench.test.js.map +1 -0
- package/dist/bin/sync-runner-events.test.d.ts +2 -0
- package/dist/bin/sync-runner-events.test.d.ts.map +1 -0
- package/dist/bin/sync-runner-events.test.js +364 -0
- package/dist/bin/sync-runner-events.test.js.map +1 -0
- package/dist/bin/sync-runner-heap-telemetry.test.d.ts +2 -0
- package/dist/bin/sync-runner-heap-telemetry.test.d.ts.map +1 -0
- package/dist/bin/sync-runner-heap-telemetry.test.js +1966 -0
- package/dist/bin/sync-runner-heap-telemetry.test.js.map +1 -0
- package/dist/bin/sync-runner-manifest.test.d.ts +12 -0
- package/dist/bin/sync-runner-manifest.test.d.ts.map +1 -0
- package/dist/bin/sync-runner-manifest.test.js +921 -0
- package/dist/bin/sync-runner-manifest.test.js.map +1 -0
- package/dist/bin/sync-runner-planning.test.d.ts +2 -0
- package/dist/bin/sync-runner-planning.test.d.ts.map +1 -0
- package/dist/bin/sync-runner-planning.test.js +448 -0
- package/dist/bin/sync-runner-planning.test.js.map +1 -0
- package/dist/bin/sync-runner-post-sync-flags.test.d.ts +2 -0
- package/dist/bin/sync-runner-post-sync-flags.test.d.ts.map +1 -0
- package/dist/bin/sync-runner-post-sync-flags.test.js +64 -0
- package/dist/bin/sync-runner-post-sync-flags.test.js.map +1 -0
- package/dist/bin/sync-runner-publish-expansion.test.d.ts +2 -0
- package/dist/bin/sync-runner-publish-expansion.test.d.ts.map +1 -0
- package/dist/bin/sync-runner-publish-expansion.test.js +54 -0
- package/dist/bin/sync-runner-publish-expansion.test.js.map +1 -0
- package/dist/bin/sync-runner-receiver-unresolved-company.test.d.ts +2 -0
- package/dist/bin/sync-runner-receiver-unresolved-company.test.d.ts.map +1 -0
- package/dist/bin/sync-runner-receiver-unresolved-company.test.js +379 -0
- package/dist/bin/sync-runner-receiver-unresolved-company.test.js.map +1 -0
- package/dist/bin/sync-runner-rollup.test.d.ts +2 -0
- package/dist/bin/sync-runner-rollup.test.d.ts.map +1 -0
- package/dist/bin/sync-runner-rollup.test.js +24 -0
- package/dist/bin/sync-runner-rollup.test.js.map +1 -0
- package/dist/bin/sync-runner-watch-loop.test.d.ts +2 -0
- package/dist/bin/sync-runner-watch-loop.test.d.ts.map +1 -0
- package/dist/bin/sync-runner-watch-loop.test.js +735 -0
- package/dist/bin/sync-runner-watch-loop.test.js.map +1 -0
- package/dist/bin/sync-runner-watch-routes.test.d.ts +2 -0
- package/dist/bin/sync-runner-watch-routes.test.d.ts.map +1 -0
- package/dist/bin/sync-runner-watch-routes.test.js +181 -0
- package/dist/bin/sync-runner-watch-routes.test.js.map +1 -0
- package/dist/bin/sync-runner.test.d.ts +10 -0
- package/dist/bin/sync-runner.test.d.ts.map +1 -0
- package/dist/bin/sync-runner.test.js +19084 -0
- package/dist/bin/sync-runner.test.js.map +1 -0
- package/dist/cli/case-alias.test.d.ts +2 -0
- package/dist/cli/case-alias.test.d.ts.map +1 -0
- package/dist/cli/case-alias.test.js +96 -0
- package/dist/cli/case-alias.test.js.map +1 -0
- package/dist/cli/conflict-recovery.test.d.ts +2 -0
- package/dist/cli/conflict-recovery.test.d.ts.map +1 -0
- package/dist/cli/conflict-recovery.test.js +207 -0
- package/dist/cli/conflict-recovery.test.js.map +1 -0
- package/dist/cli/conflict-winner.test.d.ts +7 -0
- package/dist/cli/conflict-winner.test.d.ts.map +1 -0
- package/dist/cli/conflict-winner.test.js +98 -0
- package/dist/cli/conflict-winner.test.js.map +1 -0
- package/dist/cli/doctor.test.d.ts +13 -0
- package/dist/cli/doctor.test.d.ts.map +1 -0
- package/dist/cli/doctor.test.js +607 -0
- package/dist/cli/doctor.test.js.map +1 -0
- package/dist/cli/invite.test.d.ts +5 -0
- package/dist/cli/invite.test.d.ts.map +1 -0
- package/dist/cli/invite.test.js +178 -0
- package/dist/cli/invite.test.js.map +1 -0
- package/dist/cli/onepass-pull-planner-regressions.test.d.ts +2 -0
- package/dist/cli/onepass-pull-planner-regressions.test.d.ts.map +1 -0
- package/dist/cli/onepass-pull-planner-regressions.test.js +300 -0
- package/dist/cli/onepass-pull-planner-regressions.test.js.map +1 -0
- package/dist/cli/onepass-pull-planner.test.d.ts +2 -0
- package/dist/cli/onepass-pull-planner.test.d.ts.map +1 -0
- package/dist/cli/onepass-pull-planner.test.js +266 -0
- package/dist/cli/onepass-pull-planner.test.js.map +1 -0
- package/dist/cli/push-scan-exclusions.test.d.ts +2 -0
- package/dist/cli/push-scan-exclusions.test.d.ts.map +1 -0
- package/dist/cli/push-scan-exclusions.test.js +99 -0
- package/dist/cli/push-scan-exclusions.test.js.map +1 -0
- package/dist/cli/reindex-knowledge.test.d.ts +12 -0
- package/dist/cli/reindex-knowledge.test.d.ts.map +1 -0
- package/dist/cli/reindex-knowledge.test.js +318 -0
- package/dist/cli/reindex-knowledge.test.js.map +1 -0
- package/dist/cli/reindex.test.d.ts +11 -0
- package/dist/cli/reindex.test.d.ts.map +1 -0
- package/dist/cli/reindex.test.js +860 -0
- package/dist/cli/reindex.test.js.map +1 -0
- package/dist/cli/rescue-breaker.test.d.ts +2 -0
- package/dist/cli/rescue-breaker.test.d.ts.map +1 -0
- package/dist/cli/rescue-breaker.test.js +812 -0
- package/dist/cli/rescue-breaker.test.js.map +1 -0
- package/dist/cli/rescue-classify-ordering.test.d.ts +2 -0
- package/dist/cli/rescue-classify-ordering.test.d.ts.map +1 -0
- package/dist/cli/rescue-classify-ordering.test.js +500 -0
- package/dist/cli/rescue-classify-ordering.test.js.map +1 -0
- package/dist/cli/rescue-clone-diagnostics.test.d.ts +2 -0
- package/dist/cli/rescue-clone-diagnostics.test.d.ts.map +1 -0
- package/dist/cli/rescue-clone-diagnostics.test.js +101 -0
- package/dist/cli/rescue-clone-diagnostics.test.js.map +1 -0
- package/dist/cli/rescue-clone-network-retry.test.d.ts +2 -0
- package/dist/cli/rescue-clone-network-retry.test.d.ts.map +1 -0
- package/dist/cli/rescue-clone-network-retry.test.js +415 -0
- package/dist/cli/rescue-clone-network-retry.test.js.map +1 -0
- package/dist/cli/rescue-core-stamp.test.d.ts +2 -0
- package/dist/cli/rescue-core-stamp.test.d.ts.map +1 -0
- package/dist/cli/rescue-core-stamp.test.js +364 -0
- package/dist/cli/rescue-core-stamp.test.js.map +1 -0
- package/dist/cli/rescue-drift-reconcile.test.d.ts +2 -0
- package/dist/cli/rescue-drift-reconcile.test.d.ts.map +1 -0
- package/dist/cli/rescue-drift-reconcile.test.js +162 -0
- package/dist/cli/rescue-drift-reconcile.test.js.map +1 -0
- package/dist/cli/rescue-drop-dir-symlink.test.d.ts +2 -0
- package/dist/cli/rescue-drop-dir-symlink.test.d.ts.map +1 -0
- package/dist/cli/rescue-drop-dir-symlink.test.js +255 -0
- package/dist/cli/rescue-drop-dir-symlink.test.js.map +1 -0
- package/dist/cli/rescue-exec-bit-preserve.test.d.ts +2 -0
- package/dist/cli/rescue-exec-bit-preserve.test.d.ts.map +1 -0
- package/dist/cli/rescue-exec-bit-preserve.test.js +177 -0
- package/dist/cli/rescue-exec-bit-preserve.test.js.map +1 -0
- package/dist/cli/rescue-hq-root-guard.test.d.ts +2 -0
- package/dist/cli/rescue-hq-root-guard.test.d.ts.map +1 -0
- package/dist/cli/rescue-hq-root-guard.test.js +210 -0
- package/dist/cli/rescue-hq-root-guard.test.js.map +1 -0
- package/dist/cli/rescue-journal-reconcile.test.d.ts +2 -0
- package/dist/cli/rescue-journal-reconcile.test.d.ts.map +1 -0
- package/dist/cli/rescue-journal-reconcile.test.js +186 -0
- package/dist/cli/rescue-journal-reconcile.test.js.map +1 -0
- package/dist/cli/rescue-keep-local-ignore.test.d.ts +2 -0
- package/dist/cli/rescue-keep-local-ignore.test.d.ts.map +1 -0
- package/dist/cli/rescue-keep-local-ignore.test.js +315 -0
- package/dist/cli/rescue-keep-local-ignore.test.js.map +1 -0
- package/dist/cli/rescue-move.test.d.ts +2 -0
- package/dist/cli/rescue-move.test.d.ts.map +1 -0
- package/dist/cli/rescue-move.test.js +166 -0
- package/dist/cli/rescue-move.test.js.map +1 -0
- package/dist/cli/rescue-mtime-preserve.test.d.ts +2 -0
- package/dist/cli/rescue-mtime-preserve.test.d.ts.map +1 -0
- package/dist/cli/rescue-mtime-preserve.test.js +186 -0
- package/dist/cli/rescue-mtime-preserve.test.js.map +1 -0
- package/dist/cli/rescue-preserve-copy-symlink.test.d.ts +2 -0
- package/dist/cli/rescue-preserve-copy-symlink.test.d.ts.map +1 -0
- package/dist/cli/rescue-preserve-copy-symlink.test.js +483 -0
- package/dist/cli/rescue-preserve-copy-symlink.test.js.map +1 -0
- package/dist/cli/rescue-realpath.test.d.ts +2 -0
- package/dist/cli/rescue-realpath.test.d.ts.map +1 -0
- package/dist/cli/rescue-realpath.test.js +109 -0
- package/dist/cli/rescue-realpath.test.js.map +1 -0
- package/dist/cli/rescue-restore-flag.test.d.ts +2 -0
- package/dist/cli/rescue-restore-flag.test.d.ts.map +1 -0
- package/dist/cli/rescue-restore-flag.test.js +82 -0
- package/dist/cli/rescue-restore-flag.test.js.map +1 -0
- package/dist/cli/rescue-rsync-preflight.test.d.ts +2 -0
- package/dist/cli/rescue-rsync-preflight.test.d.ts.map +1 -0
- package/dist/cli/rescue-rsync-preflight.test.js +579 -0
- package/dist/cli/rescue-rsync-preflight.test.js.map +1 -0
- package/dist/cli/rescue-rsync-status.test.d.ts +2 -0
- package/dist/cli/rescue-rsync-status.test.d.ts.map +1 -0
- package/dist/cli/rescue-rsync-status.test.js +406 -0
- package/dist/cli/rescue-rsync-status.test.js.map +1 -0
- package/dist/cli/rescue-settings-reconcile.test.d.ts +2 -0
- package/dist/cli/rescue-settings-reconcile.test.d.ts.map +1 -0
- package/dist/cli/rescue-settings-reconcile.test.js +610 -0
- package/dist/cli/rescue-settings-reconcile.test.js.map +1 -0
- package/dist/cli/rescue-snapshot-copy.test.d.ts +2 -0
- package/dist/cli/rescue-snapshot-copy.test.d.ts.map +1 -0
- package/dist/cli/rescue-snapshot-copy.test.js +790 -0
- package/dist/cli/rescue-snapshot-copy.test.js.map +1 -0
- package/dist/cli/rescue-snapshot-recovery.test.d.ts +2 -0
- package/dist/cli/rescue-snapshot-recovery.test.d.ts.map +1 -0
- package/dist/cli/rescue-snapshot-recovery.test.js +265 -0
- package/dist/cli/rescue-snapshot-recovery.test.js.map +1 -0
- package/dist/cli/rescue-snapshot.test.d.ts +2 -0
- package/dist/cli/rescue-snapshot.test.d.ts.map +1 -0
- package/dist/cli/rescue-snapshot.test.js +46 -0
- package/dist/cli/rescue-snapshot.test.js.map +1 -0
- package/dist/cli/rescue-source-switch-floor.test.d.ts +2 -0
- package/dist/cli/rescue-source-switch-floor.test.d.ts.map +1 -0
- package/dist/cli/rescue-source-switch-floor.test.js +247 -0
- package/dist/cli/rescue-source-switch-floor.test.js.map +1 -0
- package/dist/cli/rescue-unchanged-delete.test.d.ts +2 -0
- package/dist/cli/rescue-unchanged-delete.test.d.ts.map +1 -0
- package/dist/cli/rescue-unchanged-delete.test.js +305 -0
- package/dist/cli/rescue-unchanged-delete.test.js.map +1 -0
- package/dist/cli/rescue.reindex.test.d.ts +2 -0
- package/dist/cli/rescue.reindex.test.d.ts.map +1 -0
- package/dist/cli/rescue.reindex.test.js +72 -0
- package/dist/cli/rescue.reindex.test.js.map +1 -0
- package/dist/cli/rescue.test.d.ts +2 -0
- package/dist/cli/rescue.test.d.ts.map +1 -0
- package/dist/cli/rescue.test.js +127 -0
- package/dist/cli/rescue.test.js.map +1 -0
- package/dist/cli/share-plan-limit-presign.test.d.ts +2 -0
- package/dist/cli/share-plan-limit-presign.test.d.ts.map +1 -0
- package/dist/cli/share-plan-limit-presign.test.js +271 -0
- package/dist/cli/share-plan-limit-presign.test.js.map +1 -0
- package/dist/cli/share-presign-transport.test.d.ts +22 -0
- package/dist/cli/share-presign-transport.test.d.ts.map +1 -0
- package/dist/cli/share-presign-transport.test.js +388 -0
- package/dist/cli/share-presign-transport.test.js.map +1 -0
- package/dist/cli/share.test.d.ts +5 -0
- package/dist/cli/share.test.d.ts.map +1 -0
- package/dist/cli/share.test.js +12336 -0
- package/dist/cli/share.test.js.map +1 -0
- package/dist/cli/streaming-pull-planner.bench.test.d.ts +15 -0
- package/dist/cli/streaming-pull-planner.bench.test.d.ts.map +1 -0
- package/dist/cli/streaming-pull-planner.bench.test.js +273 -0
- package/dist/cli/streaming-pull-planner.bench.test.js.map +1 -0
- package/dist/cli/sync-scope.test.d.ts +22 -0
- package/dist/cli/sync-scope.test.d.ts.map +1 -0
- package/dist/cli/sync-scope.test.js +903 -0
- package/dist/cli/sync-scope.test.js.map +1 -0
- package/dist/cli/sync.test.d.ts +5 -0
- package/dist/cli/sync.test.d.ts.map +1 -0
- package/dist/cli/sync.test.js +9028 -0
- package/dist/cli/sync.test.js.map +1 -0
- package/dist/cli/tombstones.test.d.ts +2 -0
- package/dist/cli/tombstones.test.d.ts.map +1 -0
- package/dist/cli/tombstones.test.js +120 -0
- package/dist/cli/tombstones.test.js.map +1 -0
- package/dist/cli/watch-event-push-conflict.test.d.ts +25 -0
- package/dist/cli/watch-event-push-conflict.test.d.ts.map +1 -0
- package/dist/cli/watch-event-push-conflict.test.js +230 -0
- package/dist/cli/watch-event-push-conflict.test.js.map +1 -0
- package/dist/client-info.test.d.ts +11 -0
- package/dist/client-info.test.d.ts.map +1 -0
- package/dist/client-info.test.js +168 -0
- package/dist/client-info.test.js.map +1 -0
- package/dist/cognito-auth-lock-no-hard-links.test.d.ts +11 -0
- package/dist/cognito-auth-lock-no-hard-links.test.d.ts.map +1 -0
- package/dist/cognito-auth-lock-no-hard-links.test.js +76 -0
- package/dist/cognito-auth-lock-no-hard-links.test.js.map +1 -0
- package/dist/cognito-auth.test.d.ts +9 -0
- package/dist/cognito-auth.test.d.ts.map +1 -0
- package/dist/cognito-auth.test.js +745 -0
- package/dist/cognito-auth.test.js.map +1 -0
- package/dist/company-resolver.test.d.ts +7 -0
- package/dist/company-resolver.test.d.ts.map +1 -0
- package/dist/company-resolver.test.js +535 -0
- package/dist/company-resolver.test.js.map +1 -0
- package/dist/company-slug.test.d.ts +7 -0
- package/dist/company-slug.test.d.ts.map +1 -0
- package/dist/company-slug.test.js +43 -0
- package/dist/company-slug.test.js.map +1 -0
- package/dist/company-vault-transport.test.d.ts +12 -0
- package/dist/company-vault-transport.test.d.ts.map +1 -0
- package/dist/company-vault-transport.test.js +97 -0
- package/dist/company-vault-transport.test.js.map +1 -0
- package/dist/context.test.d.ts +7 -0
- package/dist/context.test.d.ts.map +1 -0
- package/dist/context.test.js +646 -0
- package/dist/context.test.js.map +1 -0
- package/dist/entity-resolver.test.d.ts +10 -0
- package/dist/entity-resolver.test.d.ts.map +1 -0
- package/dist/entity-resolver.test.js +244 -0
- package/dist/entity-resolver.test.js.map +1 -0
- package/dist/getindigo-dead-refs-contract.test.d.ts +2 -0
- package/dist/getindigo-dead-refs-contract.test.d.ts.map +1 -0
- package/dist/getindigo-dead-refs-contract.test.js +58 -0
- package/dist/getindigo-dead-refs-contract.test.js.map +1 -0
- package/dist/hermetic-test-env.test.d.ts +2 -0
- package/dist/hermetic-test-env.test.d.ts.map +1 -0
- package/dist/hermetic-test-env.test.js +61 -0
- package/dist/hermetic-test-env.test.js.map +1 -0
- package/dist/hq-root-recovery.test.d.ts +2 -0
- package/dist/hq-root-recovery.test.d.ts.map +1 -0
- package/dist/hq-root-recovery.test.js +65 -0
- package/dist/hq-root-recovery.test.js.map +1 -0
- package/dist/ignore.test.d.ts +10 -0
- package/dist/ignore.test.d.ts.map +1 -0
- package/dist/ignore.test.js +958 -0
- package/dist/ignore.test.js.map +1 -0
- package/dist/index.test.d.ts +2 -0
- package/dist/index.test.d.ts.map +1 -0
- package/dist/index.test.js +26 -0
- package/dist/index.test.js.map +1 -0
- package/dist/journal-area-ledger-read-boundary.test.d.ts +2 -0
- package/dist/journal-area-ledger-read-boundary.test.d.ts.map +1 -0
- package/dist/journal-area-ledger-read-boundary.test.js +425 -0
- package/dist/journal-area-ledger-read-boundary.test.js.map +1 -0
- package/dist/journal-baseline.test.d.ts +2 -0
- package/dist/journal-baseline.test.d.ts.map +1 -0
- package/dist/journal-baseline.test.js +218 -0
- package/dist/journal-baseline.test.js.map +1 -0
- package/dist/journal-decode-window.test.d.ts +2 -0
- package/dist/journal-decode-window.test.d.ts.map +1 -0
- package/dist/journal-decode-window.test.js +99 -0
- package/dist/journal-decode-window.test.js.map +1 -0
- package/dist/journal-delta-writes.test.d.ts +2 -0
- package/dist/journal-delta-writes.test.d.ts.map +1 -0
- package/dist/journal-delta-writes.test.js +159 -0
- package/dist/journal-delta-writes.test.js.map +1 -0
- package/dist/journal-ledger-index.test.d.ts +15 -0
- package/dist/journal-ledger-index.test.d.ts.map +1 -0
- package/dist/journal-ledger-index.test.js +269 -0
- package/dist/journal-ledger-index.test.js.map +1 -0
- package/dist/journal-public-boundary.test.d.ts +2 -0
- package/dist/journal-public-boundary.test.d.ts.map +1 -0
- package/dist/journal-public-boundary.test.js +216 -0
- package/dist/journal-public-boundary.test.js.map +1 -0
- package/dist/journal-row-store.test.d.ts +2 -0
- package/dist/journal-row-store.test.d.ts.map +1 -0
- package/dist/journal-row-store.test.js +729 -0
- package/dist/journal-row-store.test.js.map +1 -0
- package/dist/journal-snapshot-memory-helpers.d.ts +35 -0
- package/dist/journal-snapshot-memory-helpers.d.ts.map +1 -0
- package/dist/journal-snapshot-memory-helpers.js +298 -0
- package/dist/journal-snapshot-memory-helpers.js.map +1 -0
- package/dist/journal-snapshot-memory.test.d.ts +2 -0
- package/dist/journal-snapshot-memory.test.d.ts.map +1 -0
- package/dist/journal-snapshot-memory.test.js +55 -0
- package/dist/journal-snapshot-memory.test.js.map +1 -0
- package/dist/journal-snapshot-v4-memory.test.d.ts +2 -0
- package/dist/journal-snapshot-v4-memory.test.d.ts.map +1 -0
- package/dist/journal-snapshot-v4-memory.test.js +24 -0
- package/dist/journal-snapshot-v4-memory.test.js.map +1 -0
- package/dist/journal-snapshot-v4-writer-memory.test.d.ts +2 -0
- package/dist/journal-snapshot-v4-writer-memory.test.d.ts.map +1 -0
- package/dist/journal-snapshot-v4-writer-memory.test.js +76 -0
- package/dist/journal-snapshot-v4-writer-memory.test.js.map +1 -0
- package/dist/journal-snapshot-v4-writer.test.d.ts +2 -0
- package/dist/journal-snapshot-v4-writer.test.d.ts.map +1 -0
- package/dist/journal-snapshot-v4-writer.test.js +282 -0
- package/dist/journal-snapshot-v4-writer.test.js.map +1 -0
- package/dist/journal-snapshot-v4.test.d.ts +2 -0
- package/dist/journal-snapshot-v4.test.d.ts.map +1 -0
- package/dist/journal-snapshot-v4.test.js +281 -0
- package/dist/journal-snapshot-v4.test.js.map +1 -0
- package/dist/journal-store.test.d.ts +2 -0
- package/dist/journal-store.test.d.ts.map +1 -0
- package/dist/journal-store.test.js +1227 -0
- package/dist/journal-store.test.js.map +1 -0
- package/dist/journal-streaming.heap.test.d.ts +2 -0
- package/dist/journal-streaming.heap.test.d.ts.map +1 -0
- package/dist/journal-streaming.heap.test.js +190 -0
- package/dist/journal-streaming.heap.test.js.map +1 -0
- package/dist/journal.test.d.ts +9 -0
- package/dist/journal.test.d.ts.map +1 -0
- package/dist/journal.test.js +1074 -0
- package/dist/journal.test.js.map +1 -0
- package/dist/kms10-etag-safe-pull.test.d.ts +2 -0
- package/dist/kms10-etag-safe-pull.test.d.ts.map +1 -0
- package/dist/kms10-etag-safe-pull.test.js +53 -0
- package/dist/kms10-etag-safe-pull.test.js.map +1 -0
- package/dist/lib/cloud-authoritative.test.d.ts +2 -0
- package/dist/lib/cloud-authoritative.test.d.ts.map +1 -0
- package/dist/lib/cloud-authoritative.test.js +42 -0
- package/dist/lib/cloud-authoritative.test.js.map +1 -0
- package/dist/lib/conflict-reconcile.test.d.ts +7 -0
- package/dist/lib/conflict-reconcile.test.d.ts.map +1 -0
- package/dist/lib/conflict-reconcile.test.js +246 -0
- package/dist/lib/conflict-reconcile.test.js.map +1 -0
- package/dist/lib/conflict.test.d.ts +9 -0
- package/dist/lib/conflict.test.d.ts.map +1 -0
- package/dist/lib/conflict.test.js +340 -0
- package/dist/lib/conflict.test.js.map +1 -0
- package/dist/lib/describe-error.test.d.ts +2 -0
- package/dist/lib/describe-error.test.d.ts.map +1 -0
- package/dist/lib/describe-error.test.js +148 -0
- package/dist/lib/describe-error.test.js.map +1 -0
- package/dist/lib/machine-id.test.d.ts +8 -0
- package/dist/lib/machine-id.test.d.ts.map +1 -0
- package/dist/lib/machine-id.test.js +228 -0
- package/dist/lib/machine-id.test.js.map +1 -0
- package/dist/lib/net-errors.test.d.ts +2 -0
- package/dist/lib/net-errors.test.d.ts.map +1 -0
- package/dist/lib/net-errors.test.js +111 -0
- package/dist/lib/net-errors.test.js.map +1 -0
- package/dist/lib/ontology-entity-meta.test.d.ts +2 -0
- package/dist/lib/ontology-entity-meta.test.d.ts.map +1 -0
- package/dist/lib/ontology-entity-meta.test.js +79 -0
- package/dist/lib/ontology-entity-meta.test.js.map +1 -0
- package/dist/lib/ontology-entity-push.test.d.ts +2 -0
- package/dist/lib/ontology-entity-push.test.d.ts.map +1 -0
- package/dist/lib/ontology-entity-push.test.js +156 -0
- package/dist/lib/ontology-entity-push.test.js.map +1 -0
- package/dist/lib/personal-connector-settings-sync.test.d.ts +2 -0
- package/dist/lib/personal-connector-settings-sync.test.d.ts.map +1 -0
- package/dist/lib/personal-connector-settings-sync.test.js +34 -0
- package/dist/lib/personal-connector-settings-sync.test.js.map +1 -0
- package/dist/lib/readlink-safe.test.d.ts +2 -0
- package/dist/lib/readlink-safe.test.d.ts.map +1 -0
- package/dist/lib/readlink-safe.test.js +34 -0
- package/dist/lib/readlink-safe.test.js.map +1 -0
- package/dist/lib/s3-content-checksum.test.d.ts +2 -0
- package/dist/lib/s3-content-checksum.test.d.ts.map +1 -0
- package/dist/lib/s3-content-checksum.test.js +26 -0
- package/dist/lib/s3-content-checksum.test.js.map +1 -0
- package/dist/lib/skill-register-landed-bytes.test.d.ts +2 -0
- package/dist/lib/skill-register-landed-bytes.test.d.ts.map +1 -0
- package/dist/lib/skill-register-landed-bytes.test.js +83 -0
- package/dist/lib/skill-register-landed-bytes.test.js.map +1 -0
- package/dist/local-path-codec.test.d.ts +14 -0
- package/dist/local-path-codec.test.d.ts.map +1 -0
- package/dist/local-path-codec.test.js +122 -0
- package/dist/local-path-codec.test.js.map +1 -0
- package/dist/machine-auth.test.d.ts +14 -0
- package/dist/machine-auth.test.d.ts.map +1 -0
- package/dist/machine-auth.test.js +1492 -0
- package/dist/machine-auth.test.js.map +1 -0
- package/dist/machine-token-cache-isolation.test.d.ts +24 -0
- package/dist/machine-token-cache-isolation.test.d.ts.map +1 -0
- package/dist/machine-token-cache-isolation.test.js +284 -0
- package/dist/machine-token-cache-isolation.test.js.map +1 -0
- package/dist/manifest/US-002.acceptance.test.d.ts +11 -0
- package/dist/manifest/US-002.acceptance.test.d.ts.map +1 -0
- package/dist/manifest/US-002.acceptance.test.js +160 -0
- package/dist/manifest/US-002.acceptance.test.js.map +1 -0
- package/dist/manifest/US-004.acceptance.test.d.ts +12 -0
- package/dist/manifest/US-004.acceptance.test.d.ts.map +1 -0
- package/dist/manifest/US-004.acceptance.test.js +173 -0
- package/dist/manifest/US-004.acceptance.test.js.map +1 -0
- package/dist/manifest/bench-gate.d.ts +30 -0
- package/dist/manifest/bench-gate.d.ts.map +1 -0
- package/dist/manifest/bench-gate.js +47 -0
- package/dist/manifest/bench-gate.js.map +1 -0
- package/dist/manifest/bench-gate.test.d.ts +2 -0
- package/dist/manifest/bench-gate.test.d.ts.map +1 -0
- package/dist/manifest/bench-gate.test.js +67 -0
- package/dist/manifest/bench-gate.test.js.map +1 -0
- package/dist/manifest/build-manifest-resident-parity.test.d.ts +2 -0
- package/dist/manifest/build-manifest-resident-parity.test.d.ts.map +1 -0
- package/dist/manifest/build-manifest-resident-parity.test.js +69 -0
- package/dist/manifest/build-manifest-resident-parity.test.js.map +1 -0
- package/dist/manifest/build-manifest.bench.test.d.ts +22 -0
- package/dist/manifest/build-manifest.bench.test.d.ts.map +1 -0
- package/dist/manifest/build-manifest.bench.test.js +931 -0
- package/dist/manifest/build-manifest.bench.test.js.map +1 -0
- package/dist/manifest/build-manifest.test.d.ts +10 -0
- package/dist/manifest/build-manifest.test.d.ts.map +1 -0
- package/dist/manifest/build-manifest.test.js +1220 -0
- package/dist/manifest/build-manifest.test.js.map +1 -0
- package/dist/manifest/contract.test.d.ts +17 -0
- package/dist/manifest/contract.test.d.ts.map +1 -0
- package/dist/manifest/contract.test.js +346 -0
- package/dist/manifest/contract.test.js.map +1 -0
- package/dist/manifest/import-graph.test.d.ts +25 -0
- package/dist/manifest/import-graph.test.d.ts.map +1 -0
- package/dist/manifest/import-graph.test.js +120 -0
- package/dist/manifest/import-graph.test.js.map +1 -0
- package/dist/manifest/ledger-shard-isolation.test.d.ts +18 -0
- package/dist/manifest/ledger-shard-isolation.test.d.ts.map +1 -0
- package/dist/manifest/ledger-shard-isolation.test.js +153 -0
- package/dist/manifest/ledger-shard-isolation.test.js.map +1 -0
- package/dist/manifest/snapshot-store.test.d.ts +11 -0
- package/dist/manifest/snapshot-store.test.d.ts.map +1 -0
- package/dist/manifest/snapshot-store.test.js +206 -0
- package/dist/manifest/snapshot-store.test.js.map +1 -0
- package/dist/manifest/upload-manifest.test.d.ts +10 -0
- package/dist/manifest/upload-manifest.test.d.ts.map +1 -0
- package/dist/manifest/upload-manifest.test.js +1335 -0
- package/dist/manifest/upload-manifest.test.js.map +1 -0
- package/dist/manifest-reconcile.test.d.ts +2 -0
- package/dist/manifest-reconcile.test.d.ts.map +1 -0
- package/dist/manifest-reconcile.test.js +1032 -0
- package/dist/manifest-reconcile.test.js.map +1 -0
- package/dist/object-io.test.d.ts +11 -0
- package/dist/object-io.test.d.ts.map +1 -0
- package/dist/object-io.test.js +2376 -0
- package/dist/object-io.test.js.map +1 -0
- package/dist/operation-lock.test.d.ts +5 -0
- package/dist/operation-lock.test.d.ts.map +1 -0
- package/dist/operation-lock.test.js +796 -0
- package/dist/operation-lock.test.js.map +1 -0
- package/dist/outcome-telemetry.test.d.ts +9 -0
- package/dist/outcome-telemetry.test.d.ts.map +1 -0
- package/dist/outcome-telemetry.test.js +663 -0
- package/dist/outcome-telemetry.test.js.map +1 -0
- package/dist/outposts/client.test.d.ts +9 -0
- package/dist/outposts/client.test.d.ts.map +1 -0
- package/dist/outposts/client.test.js +415 -0
- package/dist/outposts/client.test.js.map +1 -0
- package/dist/outposts/command.test.d.ts +18 -0
- package/dist/outposts/command.test.d.ts.map +1 -0
- package/dist/outposts/command.test.js +1230 -0
- package/dist/outposts/command.test.js.map +1 -0
- package/dist/outposts/replica-sync.test.d.ts +2 -0
- package/dist/outposts/replica-sync.test.d.ts.map +1 -0
- package/dist/outposts/replica-sync.test.js +225 -0
- package/dist/outposts/replica-sync.test.js.map +1 -0
- package/dist/outposts/self-deploy.test.d.ts +2 -0
- package/dist/outposts/self-deploy.test.d.ts.map +1 -0
- package/dist/outposts/self-deploy.test.js +218 -0
- package/dist/outposts/self-deploy.test.js.map +1 -0
- package/dist/outposts/session-heartbeat-bounds.test.d.ts +25 -0
- package/dist/outposts/session-heartbeat-bounds.test.d.ts.map +1 -0
- package/dist/outposts/session-heartbeat-bounds.test.js +159 -0
- package/dist/outposts/session-heartbeat-bounds.test.js.map +1 -0
- package/dist/outposts/session-heartbeat-guard.test.d.ts +16 -0
- package/dist/outposts/session-heartbeat-guard.test.d.ts.map +1 -0
- package/dist/outposts/session-heartbeat-guard.test.js +88 -0
- package/dist/outposts/session-heartbeat-guard.test.js.map +1 -0
- package/dist/outposts/session-heartbeat-publisher.test.d.ts +10 -0
- package/dist/outposts/session-heartbeat-publisher.test.d.ts.map +1 -0
- package/dist/outposts/session-heartbeat-publisher.test.js +153 -0
- package/dist/outposts/session-heartbeat-publisher.test.js.map +1 -0
- package/dist/outposts/session-heartbeat-retain-guard.test.d.ts +18 -0
- package/dist/outposts/session-heartbeat-retain-guard.test.d.ts.map +1 -0
- package/dist/outposts/session-heartbeat-retain-guard.test.js +106 -0
- package/dist/outposts/session-heartbeat-retain-guard.test.js.map +1 -0
- package/dist/outposts/session-heartbeat-scan.test.d.ts +20 -0
- package/dist/outposts/session-heartbeat-scan.test.d.ts.map +1 -0
- package/dist/outposts/session-heartbeat-scan.test.js +242 -0
- package/dist/outposts/session-heartbeat-scan.test.js.map +1 -0
- package/dist/outposts/session-heartbeat.test.d.ts +11 -0
- package/dist/outposts/session-heartbeat.test.d.ts.map +1 -0
- package/dist/outposts/session-heartbeat.test.js +387 -0
- package/dist/outposts/session-heartbeat.test.js.map +1 -0
- package/dist/outposts/session-host-auth.test.d.ts +16 -0
- package/dist/outposts/session-host-auth.test.d.ts.map +1 -0
- package/dist/outposts/session-host-auth.test.js +284 -0
- package/dist/outposts/session-host-auth.test.js.map +1 -0
- package/dist/outposts/session-host-command.test.d.ts +10 -0
- package/dist/outposts/session-host-command.test.d.ts.map +1 -0
- package/dist/outposts/session-host-command.test.js +182 -0
- package/dist/outposts/session-host-command.test.js.map +1 -0
- package/dist/outposts/session-host-connection.test.d.ts +18 -0
- package/dist/outposts/session-host-connection.test.d.ts.map +1 -0
- package/dist/outposts/session-host-connection.test.js +392 -0
- package/dist/outposts/session-host-connection.test.js.map +1 -0
- package/dist/outposts/session-host-fakes.d.ts +61 -0
- package/dist/outposts/session-host-fakes.d.ts.map +1 -0
- package/dist/outposts/session-host-fakes.js +115 -0
- package/dist/outposts/session-host-fakes.js.map +1 -0
- package/dist/outposts/session-host-ndjson.test.d.ts +11 -0
- package/dist/outposts/session-host-ndjson.test.d.ts.map +1 -0
- package/dist/outposts/session-host-ndjson.test.js +73 -0
- package/dist/outposts/session-host-ndjson.test.js.map +1 -0
- package/dist/outposts/session-host-protocol.test.d.ts +15 -0
- package/dist/outposts/session-host-protocol.test.d.ts.map +1 -0
- package/dist/outposts/session-host-protocol.test.js +0 -0
- package/dist/outposts/session-host-protocol.test.js.map +1 -0
- package/dist/outposts/session-host-server.test.d.ts +10 -0
- package/dist/outposts/session-host-server.test.d.ts.map +1 -0
- package/dist/outposts/session-host-server.test.js +118 -0
- package/dist/outposts/session-host-server.test.js.map +1 -0
- package/dist/outposts/session-host-sessions.test.d.ts +18 -0
- package/dist/outposts/session-host-sessions.test.d.ts.map +1 -0
- package/dist/outposts/session-host-sessions.test.js +439 -0
- package/dist/outposts/session-host-sessions.test.js.map +1 -0
- package/dist/outposts/terminal.test.d.ts +2 -0
- package/dist/outposts/terminal.test.d.ts.map +1 -0
- package/dist/outposts/terminal.test.js +146 -0
- package/dist/outposts/terminal.test.js.map +1 -0
- package/dist/outposts/transport.test.d.ts +10 -0
- package/dist/outposts/transport.test.d.ts.map +1 -0
- package/dist/outposts/transport.test.js +205 -0
- package/dist/outposts/transport.test.js.map +1 -0
- package/dist/packed-journal-phase2.test.d.ts +2 -0
- package/dist/packed-journal-phase2.test.d.ts.map +1 -0
- package/dist/packed-journal-phase2.test.js +273 -0
- package/dist/packed-journal-phase2.test.js.map +1 -0
- package/dist/path-ancestors.test.d.ts +2 -0
- package/dist/path-ancestors.test.d.ts.map +1 -0
- package/dist/path-ancestors.test.js +21 -0
- package/dist/path-ancestors.test.js.map +1 -0
- package/dist/personal-vault-exclusions.test.d.ts +22 -0
- package/dist/personal-vault-exclusions.test.d.ts.map +1 -0
- package/dist/personal-vault-exclusions.test.js +294 -0
- package/dist/personal-vault-exclusions.test.js.map +1 -0
- package/dist/personal-vault.test.d.ts +18 -0
- package/dist/personal-vault.test.d.ts.map +1 -0
- package/dist/personal-vault.test.js +1106 -0
- package/dist/personal-vault.test.js.map +1 -0
- package/dist/plan-limit-pause.test.d.ts +2 -0
- package/dist/plan-limit-pause.test.d.ts.map +1 -0
- package/dist/plan-limit-pause.test.js +150 -0
- package/dist/plan-limit-pause.test.js.map +1 -0
- package/dist/plan-limit.fixtures.d.ts +34 -0
- package/dist/plan-limit.fixtures.d.ts.map +1 -0
- package/dist/plan-limit.fixtures.js +96 -0
- package/dist/plan-limit.fixtures.js.map +1 -0
- package/dist/plan-limit.test.d.ts +2 -0
- package/dist/plan-limit.test.d.ts.map +1 -0
- package/dist/plan-limit.test.js +132 -0
- package/dist/plan-limit.test.js.map +1 -0
- package/dist/prefix-coalesce.test.d.ts +2 -0
- package/dist/prefix-coalesce.test.d.ts.map +1 -0
- package/dist/prefix-coalesce.test.js +260 -0
- package/dist/prefix-coalesce.test.js.map +1 -0
- package/dist/private-folder-transport.test.d.ts +2 -0
- package/dist/private-folder-transport.test.d.ts.map +1 -0
- package/dist/private-folder-transport.test.js +33 -0
- package/dist/private-folder-transport.test.js.map +1 -0
- package/dist/public-surface.test.d.ts +15 -0
- package/dist/public-surface.test.d.ts.map +1 -0
- package/dist/public-surface.test.js +110 -0
- package/dist/public-surface.test.js.map +1 -0
- package/dist/qmd-reindex.test.d.ts +14 -0
- package/dist/qmd-reindex.test.d.ts.map +1 -0
- package/dist/qmd-reindex.test.js +904 -0
- package/dist/qmd-reindex.test.js.map +1 -0
- package/dist/read-only-state-dir.test.d.ts +27 -0
- package/dist/read-only-state-dir.test.d.ts.map +1 -0
- package/dist/read-only-state-dir.test.js +210 -0
- package/dist/read-only-state-dir.test.js.map +1 -0
- package/dist/remote-pull.test.d.ts +2 -0
- package/dist/remote-pull.test.d.ts.map +1 -0
- package/dist/remote-pull.test.js +1147 -0
- package/dist/remote-pull.test.js.map +1 -0
- package/dist/s3-download-stream-hash.test.d.ts +2 -0
- package/dist/s3-download-stream-hash.test.d.ts.map +1 -0
- package/dist/s3-download-stream-hash.test.js +70 -0
- package/dist/s3-download-stream-hash.test.js.map +1 -0
- package/dist/s3.list-cost.test.d.ts +2 -0
- package/dist/s3.list-cost.test.d.ts.map +1 -0
- package/dist/s3.list-cost.test.js +51 -0
- package/dist/s3.list-cost.test.js.map +1 -0
- package/dist/s3.rename-retry.test.d.ts +2 -0
- package/dist/s3.rename-retry.test.d.ts.map +1 -0
- package/dist/s3.rename-retry.test.js +217 -0
- package/dist/s3.rename-retry.test.js.map +1 -0
- package/dist/s3.symlink-materialize.test.d.ts +18 -0
- package/dist/s3.symlink-materialize.test.d.ts.map +1 -0
- package/dist/s3.symlink-materialize.test.js +591 -0
- package/dist/s3.symlink-materialize.test.js.map +1 -0
- package/dist/s3.test.d.ts +9 -0
- package/dist/s3.test.d.ts.map +1 -0
- package/dist/s3.test.js +2091 -0
- package/dist/s3.test.js.map +1 -0
- package/dist/s3.windows-portability.test.d.ts +12 -0
- package/dist/s3.windows-portability.test.d.ts.map +1 -0
- package/dist/s3.windows-portability.test.js +228 -0
- package/dist/s3.windows-portability.test.js.map +1 -0
- package/dist/schemas/signal-types.test.d.ts +2 -0
- package/dist/schemas/signal-types.test.d.ts.map +1 -0
- package/dist/schemas/signal-types.test.js +65 -0
- package/dist/schemas/signal-types.test.js.map +1 -0
- package/dist/schemas/source-channels.test.d.ts +2 -0
- package/dist/schemas/source-channels.test.d.ts.map +1 -0
- package/dist/schemas/source-channels.test.js +65 -0
- package/dist/schemas/source-channels.test.js.map +1 -0
- package/dist/scope-shrink.test.d.ts +13 -0
- package/dist/scope-shrink.test.d.ts.map +1 -0
- package/dist/scope-shrink.test.js +558 -0
- package/dist/scope-shrink.test.js.map +1 -0
- package/dist/session-log-capture.test.d.ts +2 -0
- package/dist/session-log-capture.test.d.ts.map +1 -0
- package/dist/session-log-capture.test.js +533 -0
- package/dist/session-log-capture.test.js.map +1 -0
- package/dist/session-log-retention.test.d.ts +2 -0
- package/dist/session-log-retention.test.d.ts.map +1 -0
- package/dist/session-log-retention.test.js +383 -0
- package/dist/session-log-retention.test.js.map +1 -0
- package/dist/signals/get.test.d.ts +5 -0
- package/dist/signals/get.test.d.ts.map +1 -0
- package/dist/signals/get.test.js +254 -0
- package/dist/signals/get.test.js.map +1 -0
- package/dist/signals/list.test.d.ts +9 -0
- package/dist/signals/list.test.d.ts.map +1 -0
- package/dist/signals/list.test.js +330 -0
- package/dist/signals/list.test.js.map +1 -0
- package/dist/skill-telemetry.test.d.ts +2 -0
- package/dist/skill-telemetry.test.d.ts.map +1 -0
- package/dist/skill-telemetry.test.js +1484 -0
- package/dist/skill-telemetry.test.js.map +1 -0
- package/dist/sources/get.test.d.ts +5 -0
- package/dist/sources/get.test.d.ts.map +1 -0
- package/dist/sources/get.test.js +236 -0
- package/dist/sources/get.test.js.map +1 -0
- package/dist/sources/list.test.d.ts +8 -0
- package/dist/sources/list.test.d.ts.map +1 -0
- package/dist/sources/list.test.js +318 -0
- package/dist/sources/list.test.js.map +1 -0
- package/dist/sts-credential-refresh.test.d.ts +2 -0
- package/dist/sts-credential-refresh.test.d.ts.map +1 -0
- package/dist/sts-credential-refresh.test.js +181 -0
- package/dist/sts-credential-refresh.test.js.map +1 -0
- package/dist/swallowed-error-sites.test.d.ts +2 -0
- package/dist/swallowed-error-sites.test.d.ts.map +1 -0
- package/dist/swallowed-error-sites.test.js +209 -0
- package/dist/swallowed-error-sites.test.js.map +1 -0
- package/dist/swallowed-error-w32.test.d.ts +2 -0
- package/dist/swallowed-error-w32.test.d.ts.map +1 -0
- package/dist/swallowed-error-w32.test.js +186 -0
- package/dist/swallowed-error-w32.test.js.map +1 -0
- package/dist/swallowed-error-w33.test.d.ts +2 -0
- package/dist/swallowed-error-w33.test.d.ts.map +1 -0
- package/dist/swallowed-error-w33.test.js +136 -0
- package/dist/swallowed-error-w33.test.js.map +1 -0
- package/dist/swallowed-error-w34.test.d.ts +2 -0
- package/dist/swallowed-error-w34.test.d.ts.map +1 -0
- package/dist/swallowed-error-w34.test.js +110 -0
- package/dist/swallowed-error-w34.test.js.map +1 -0
- package/dist/swallowed-error-w35.test.d.ts +2 -0
- package/dist/swallowed-error-w35.test.d.ts.map +1 -0
- package/dist/swallowed-error-w35.test.js +237 -0
- package/dist/swallowed-error-w35.test.js.map +1 -0
- package/dist/sync/area-ledger-auto-migration.test.d.ts +2 -0
- package/dist/sync/area-ledger-auto-migration.test.d.ts.map +1 -0
- package/dist/sync/area-ledger-auto-migration.test.js +291 -0
- package/dist/sync/area-ledger-auto-migration.test.js.map +1 -0
- package/dist/sync/area-ledger-migration.test.d.ts +2 -0
- package/dist/sync/area-ledger-migration.test.d.ts.map +1 -0
- package/dist/sync/area-ledger-migration.test.js +554 -0
- package/dist/sync/area-ledger-migration.test.js.map +1 -0
- package/dist/sync/area-ledger-recovery.bench.test.d.ts +2 -0
- package/dist/sync/area-ledger-recovery.bench.test.d.ts.map +1 -0
- package/dist/sync/area-ledger-recovery.bench.test.js +60 -0
- package/dist/sync/area-ledger-recovery.bench.test.js.map +1 -0
- package/dist/sync/area-ledger-writer-lock.bench.test.d.ts +2 -0
- package/dist/sync/area-ledger-writer-lock.bench.test.d.ts.map +1 -0
- package/dist/sync/area-ledger-writer-lock.bench.test.js +57 -0
- package/dist/sync/area-ledger-writer-lock.bench.test.js.map +1 -0
- package/dist/sync/area-ledger.test.d.ts +2 -0
- package/dist/sync/area-ledger.test.d.ts.map +1 -0
- package/dist/sync/area-ledger.test.js +1401 -0
- package/dist/sync/area-ledger.test.js.map +1 -0
- package/dist/sync/area-resolver.test.d.ts +2 -0
- package/dist/sync/area-resolver.test.d.ts.map +1 -0
- package/dist/sync/area-resolver.test.js +234 -0
- package/dist/sync/area-resolver.test.js.map +1 -0
- package/dist/sync/base-version-resolver.test.d.ts +2 -0
- package/dist/sync/base-version-resolver.test.d.ts.map +1 -0
- package/dist/sync/base-version-resolver.test.js +24 -0
- package/dist/sync/base-version-resolver.test.js.map +1 -0
- package/dist/sync/candidate-uploader.test.d.ts +2 -0
- package/dist/sync/candidate-uploader.test.d.ts.map +1 -0
- package/dist/sync/candidate-uploader.test.js +132 -0
- package/dist/sync/candidate-uploader.test.js.map +1 -0
- package/dist/sync/child-process-sync-worker-env.test.d.ts +2 -0
- package/dist/sync/child-process-sync-worker-env.test.d.ts.map +1 -0
- package/dist/sync/child-process-sync-worker-env.test.js +38 -0
- package/dist/sync/child-process-sync-worker-env.test.js.map +1 -0
- package/dist/sync/child-process-sync-worker-errors.test.d.ts +2 -0
- package/dist/sync/child-process-sync-worker-errors.test.d.ts.map +1 -0
- package/dist/sync/child-process-sync-worker-errors.test.js +121 -0
- package/dist/sync/child-process-sync-worker-errors.test.js.map +1 -0
- package/dist/sync/child-process-sync-worker.test.d.ts +2 -0
- package/dist/sync/child-process-sync-worker.test.d.ts.map +1 -0
- package/dist/sync/child-process-sync-worker.test.js +279 -0
- package/dist/sync/child-process-sync-worker.test.js.map +1 -0
- package/dist/sync/content-hash.test.d.ts +2 -0
- package/dist/sync/content-hash.test.d.ts.map +1 -0
- package/dist/sync/content-hash.test.js +16 -0
- package/dist/sync/content-hash.test.js.map +1 -0
- package/dist/sync/delta-client.test.d.ts +2 -0
- package/dist/sync/delta-client.test.d.ts.map +1 -0
- package/dist/sync/delta-client.test.js +97 -0
- package/dist/sync/delta-client.test.js.map +1 -0
- package/dist/sync/durable-apply.test.d.ts +2 -0
- package/dist/sync/durable-apply.test.d.ts.map +1 -0
- package/dist/sync/durable-apply.test.js +187 -0
- package/dist/sync/durable-apply.test.js.map +1 -0
- package/dist/sync/event-sync.test.d.ts +14 -0
- package/dist/sync/event-sync.test.d.ts.map +1 -0
- package/dist/sync/event-sync.test.js +1717 -0
- package/dist/sync/event-sync.test.js.map +1 -0
- package/dist/sync/feature-flags.test.d.ts +24 -0
- package/dist/sync/feature-flags.test.d.ts.map +1 -0
- package/dist/sync/feature-flags.test.js +594 -0
- package/dist/sync/feature-flags.test.js.map +1 -0
- package/dist/sync/fsync-compat.test.d.ts +2 -0
- package/dist/sync/fsync-compat.test.d.ts.map +1 -0
- package/dist/sync/fsync-compat.test.js +52 -0
- package/dist/sync/fsync-compat.test.js.map +1 -0
- package/dist/sync/full-pass-cap-governor.bench.test.d.ts +2 -0
- package/dist/sync/full-pass-cap-governor.bench.test.d.ts.map +1 -0
- package/dist/sync/full-pass-cap-governor.bench.test.js +179 -0
- package/dist/sync/full-pass-cap-governor.bench.test.js.map +1 -0
- package/dist/sync/full-pass-caps.test.d.ts +2 -0
- package/dist/sync/full-pass-caps.test.d.ts.map +1 -0
- package/dist/sync/full-pass-caps.test.js +550 -0
- package/dist/sync/full-pass-caps.test.js.map +1 -0
- package/dist/sync/idle-full-reconcile.test.d.ts +2 -0
- package/dist/sync/idle-full-reconcile.test.d.ts.map +1 -0
- package/dist/sync/idle-full-reconcile.test.js +62 -0
- package/dist/sync/idle-full-reconcile.test.js.map +1 -0
- package/dist/sync/inbound-event-admission.test.d.ts +2 -0
- package/dist/sync/inbound-event-admission.test.d.ts.map +1 -0
- package/dist/sync/inbound-event-admission.test.js +128 -0
- package/dist/sync/inbound-event-admission.test.js.map +1 -0
- package/dist/sync/journal-ledger-stream.test.d.ts +12 -0
- package/dist/sync/journal-ledger-stream.test.d.ts.map +1 -0
- package/dist/sync/journal-ledger-stream.test.js +134 -0
- package/dist/sync/journal-ledger-stream.test.js.map +1 -0
- package/dist/sync/lease-client.test.d.ts +2 -0
- package/dist/sync/lease-client.test.d.ts.map +1 -0
- package/dist/sync/lease-client.test.js +119 -0
- package/dist/sync/lease-client.test.js.map +1 -0
- package/dist/sync/logger.test.d.ts +19 -0
- package/dist/sync/logger.test.d.ts.map +1 -0
- package/dist/sync/logger.test.js +204 -0
- package/dist/sync/logger.test.js.map +1 -0
- package/dist/sync/metrics.test.d.ts +19 -0
- package/dist/sync/metrics.test.d.ts.map +1 -0
- package/dist/sync/metrics.test.js +357 -0
- package/dist/sync/metrics.test.js.map +1 -0
- package/dist/sync/multipart-uploader.test.d.ts +2 -0
- package/dist/sync/multipart-uploader.test.d.ts.map +1 -0
- package/dist/sync/multipart-uploader.test.js +141 -0
- package/dist/sync/multipart-uploader.test.js.map +1 -0
- package/dist/sync/mutation-client.test.d.ts +2 -0
- package/dist/sync/mutation-client.test.d.ts.map +1 -0
- package/dist/sync/mutation-client.test.js +100 -0
- package/dist/sync/mutation-client.test.js.map +1 -0
- package/dist/sync/mutation-session.test.d.ts +2 -0
- package/dist/sync/mutation-session.test.d.ts.map +1 -0
- package/dist/sync/mutation-session.test.js +190 -0
- package/dist/sync/mutation-session.test.js.map +1 -0
- package/dist/sync/parallel-sync-coordinator.test.d.ts +2 -0
- package/dist/sync/parallel-sync-coordinator.test.d.ts.map +1 -0
- package/dist/sync/parallel-sync-coordinator.test.js +564 -0
- package/dist/sync/parallel-sync-coordinator.test.js.map +1 -0
- package/dist/sync/path-leases.test.d.ts +2 -0
- package/dist/sync/path-leases.test.d.ts.map +1 -0
- package/dist/sync/path-leases.test.js +51 -0
- package/dist/sync/path-leases.test.js.map +1 -0
- package/dist/sync/per-area-maintenance.test.d.ts +2 -0
- package/dist/sync/per-area-maintenance.test.d.ts.map +1 -0
- package/dist/sync/per-area-maintenance.test.js +100 -0
- package/dist/sync/per-area-maintenance.test.js.map +1 -0
- package/dist/sync/push-event.test.d.ts +15 -0
- package/dist/sync/push-event.test.d.ts.map +1 -0
- package/dist/sync/push-event.test.js +282 -0
- package/dist/sync/push-event.test.js.map +1 -0
- package/dist/sync/push-receiver.test.d.ts +25 -0
- package/dist/sync/push-receiver.test.d.ts.map +1 -0
- package/dist/sync/push-receiver.test.js +2851 -0
- package/dist/sync/push-receiver.test.js.map +1 -0
- package/dist/sync/push-transport.test.d.ts +2 -0
- package/dist/sync/push-transport.test.d.ts.map +1 -0
- package/dist/sync/push-transport.test.js +70 -0
- package/dist/sync/push-transport.test.js.map +1 -0
- package/dist/sync/push-walk-matchers.bench.test.d.ts +2 -0
- package/dist/sync/push-walk-matchers.bench.test.d.ts.map +1 -0
- package/dist/sync/push-walk-matchers.bench.test.js +230 -0
- package/dist/sync/push-walk-matchers.bench.test.js.map +1 -0
- package/dist/sync/realtime-network-integration.test.d.ts +2 -0
- package/dist/sync/realtime-network-integration.test.d.ts.map +1 -0
- package/dist/sync/realtime-network-integration.test.js +83 -0
- package/dist/sync/realtime-network-integration.test.js.map +1 -0
- package/dist/sync/realtime-rollout.test.d.ts +2 -0
- package/dist/sync/realtime-rollout.test.d.ts.map +1 -0
- package/dist/sync/realtime-rollout.test.js +94 -0
- package/dist/sync/realtime-rollout.test.js.map +1 -0
- package/dist/sync/realtime-telemetry.test.d.ts +2 -0
- package/dist/sync/realtime-telemetry.test.d.ts.map +1 -0
- package/dist/sync/realtime-telemetry.test.js +300 -0
- package/dist/sync/realtime-telemetry.test.js.map +1 -0
- package/dist/sync/receiver-origin-config.test.d.ts +2 -0
- package/dist/sync/receiver-origin-config.test.d.ts.map +1 -0
- package/dist/sync/receiver-origin-config.test.js +39 -0
- package/dist/sync/receiver-origin-config.test.js.map +1 -0
- package/dist/sync/reconcile-cursor.test.d.ts +2 -0
- package/dist/sync/reconcile-cursor.test.d.ts.map +1 -0
- package/dist/sync/reconcile-cursor.test.js +139 -0
- package/dist/sync/reconcile-cursor.test.js.map +1 -0
- package/dist/sync/remote-file-spool.test.d.ts +2 -0
- package/dist/sync/remote-file-spool.test.d.ts.map +1 -0
- package/dist/sync/remote-file-spool.test.js +79 -0
- package/dist/sync/remote-file-spool.test.js.map +1 -0
- package/dist/sync/scope-inventory-client.test.d.ts +2 -0
- package/dist/sync/scope-inventory-client.test.d.ts.map +1 -0
- package/dist/sync/scope-inventory-client.test.js +110 -0
- package/dist/sync/scope-inventory-client.test.js.map +1 -0
- package/dist/sync/secret-path-policy.test.d.ts +2 -0
- package/dist/sync/secret-path-policy.test.d.ts.map +1 -0
- package/dist/sync/secret-path-policy.test.js +183 -0
- package/dist/sync/secret-path-policy.test.js.map +1 -0
- package/dist/sync/snapshot-client.test.d.ts +2 -0
- package/dist/sync/snapshot-client.test.d.ts.map +1 -0
- package/dist/sync/snapshot-client.test.js +169 -0
- package/dist/sync/snapshot-client.test.js.map +1 -0
- package/dist/sync/state-store.test.d.ts +2 -0
- package/dist/sync/state-store.test.d.ts.map +1 -0
- package/dist/sync/state-store.test.js +1556 -0
- package/dist/sync/state-store.test.js.map +1 -0
- package/dist/sync/sync-contract.test.d.ts +2 -0
- package/dist/sync/sync-contract.test.d.ts.map +1 -0
- package/dist/sync/sync-contract.test.js +141 -0
- package/dist/sync/sync-contract.test.js.map +1 -0
- package/dist/sync/targeted-pull-prefixes.test.d.ts +2 -0
- package/dist/sync/targeted-pull-prefixes.test.d.ts.map +1 -0
- package/dist/sync/targeted-pull-prefixes.test.js +33 -0
- package/dist/sync/targeted-pull-prefixes.test.js.map +1 -0
- package/dist/sync/targeted-upsert-exact-list.test.d.ts +2 -0
- package/dist/sync/targeted-upsert-exact-list.test.d.ts.map +1 -0
- package/dist/sync/targeted-upsert-exact-list.test.js +247 -0
- package/dist/sync/targeted-upsert-exact-list.test.js.map +1 -0
- package/dist/sync/unchanged-push-events.test.d.ts +2 -0
- package/dist/sync/unchanged-push-events.test.d.ts.map +1 -0
- package/dist/sync/unchanged-push-events.test.js +76 -0
- package/dist/sync/unchanged-push-events.test.js.map +1 -0
- package/dist/sync/uploader-finalization.test.d.ts +2 -0
- package/dist/sync/uploader-finalization.test.d.ts.map +1 -0
- package/dist/sync/uploader-finalization.test.js +107 -0
- package/dist/sync/uploader-finalization.test.js.map +1 -0
- package/dist/sync-core.test.d.ts +2 -0
- package/dist/sync-core.test.d.ts.map +1 -0
- package/dist/sync-core.test.js +189 -0
- package/dist/sync-core.test.js.map +1 -0
- package/dist/sync-progress.test.d.ts +2 -0
- package/dist/sync-progress.test.d.ts.map +1 -0
- package/dist/sync-progress.test.js +277 -0
- package/dist/sync-progress.test.js.map +1 -0
- package/dist/telemetry-events.test.d.ts +2 -0
- package/dist/telemetry-events.test.d.ts.map +1 -0
- package/dist/telemetry-events.test.js +113 -0
- package/dist/telemetry-events.test.js.map +1 -0
- package/dist/telemetry.test.d.ts +11 -0
- package/dist/telemetry.test.d.ts.map +1 -0
- package/dist/telemetry.test.js +1603 -0
- package/dist/telemetry.test.js.map +1 -0
- package/dist/vault-client.test.d.ts +7 -0
- package/dist/vault-client.test.d.ts.map +1 -0
- package/dist/vault-client.test.js +1334 -0
- package/dist/vault-client.test.js.map +1 -0
- package/dist/watch-coverage.test.d.ts +2 -0
- package/dist/watch-coverage.test.d.ts.map +1 -0
- package/dist/watch-coverage.test.js +56 -0
- package/dist/watch-coverage.test.js.map +1 -0
- package/dist/watch-owner-lease.test.d.ts +2 -0
- package/dist/watch-owner-lease.test.d.ts.map +1 -0
- package/dist/watch-owner-lease.test.js +364 -0
- package/dist/watch-owner-lease.test.js.map +1 -0
- package/dist/watch-parent.test.d.ts +2 -0
- package/dist/watch-parent.test.d.ts.map +1 -0
- package/dist/watch-parent.test.js +131 -0
- package/dist/watch-parent.test.js.map +1 -0
- package/dist/watch-roots.test.d.ts +18 -0
- package/dist/watch-roots.test.d.ts.map +1 -0
- package/dist/watch-roots.test.js +395 -0
- package/dist/watch-roots.test.js.map +1 -0
- package/dist/watcher-continuity-hot-path.test.d.ts +2 -0
- package/dist/watcher-continuity-hot-path.test.d.ts.map +1 -0
- package/dist/watcher-continuity-hot-path.test.js +40 -0
- package/dist/watcher-continuity-hot-path.test.js.map +1 -0
- package/dist/watcher-event-gate.test.d.ts +16 -0
- package/dist/watcher-event-gate.test.d.ts.map +1 -0
- package/dist/watcher-event-gate.test.js +191 -0
- package/dist/watcher-event-gate.test.js.map +1 -0
- package/dist/watcher-replan-sweep.test.d.ts +2 -0
- package/dist/watcher-replan-sweep.test.d.ts.map +1 -0
- package/dist/watcher-replan-sweep.test.js +260 -0
- package/dist/watcher-replan-sweep.test.js.map +1 -0
- package/dist/watcher-stdout.test.d.ts +2 -0
- package/dist/watcher-stdout.test.d.ts.map +1 -0
- package/dist/watcher-stdout.test.js +86 -0
- package/dist/watcher-stdout.test.js.map +1 -0
- package/dist/watcher.test.d.ts +2 -0
- package/dist/watcher.test.d.ts.map +1 -0
- package/dist/watcher.test.js +4329 -0
- package/dist/watcher.test.js.map +1 -0
- package/dist/watcher.warmup-cancel.test.d.ts +2 -0
- package/dist/watcher.warmup-cancel.test.d.ts.map +1 -0
- package/dist/watcher.warmup-cancel.test.js +59 -0
- package/dist/watcher.warmup-cancel.test.js.map +1 -0
- package/dist/watcher.warmup-responsive.test.d.ts +2 -0
- package/dist/watcher.warmup-responsive.test.d.ts.map +1 -0
- package/dist/watcher.warmup-responsive.test.js +62 -0
- package/dist/watcher.warmup-responsive.test.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { canSkipScheduledFullReconcile, FullPassContinuity, isFullPassJournalHealthy, } from "./idle-full-reconcile.js";
|
|
3
|
+
describe("scheduled full reconcile idle proof", () => {
|
|
4
|
+
const baseline = {
|
|
5
|
+
enabled: true,
|
|
6
|
+
lastFullMonoMs: 1_000,
|
|
7
|
+
lastFullWallMs: 10_000,
|
|
8
|
+
nowMonoMs: 901_000,
|
|
9
|
+
nowWallMs: 910_000,
|
|
10
|
+
previousTickMonoMs: 900_000,
|
|
11
|
+
watcherCoverageHealthy: true,
|
|
12
|
+
journalHealthy: true,
|
|
13
|
+
continuityHealthy: true,
|
|
14
|
+
};
|
|
15
|
+
it("skips only a scheduled scan when coverage and journal stayed valid", () => {
|
|
16
|
+
expect(canSkipScheduledFullReconcile(baseline)).toBe(true);
|
|
17
|
+
});
|
|
18
|
+
it("falls back after downtime or a long event-loop gap", () => {
|
|
19
|
+
expect(canSkipScheduledFullReconcile({
|
|
20
|
+
...baseline,
|
|
21
|
+
previousTickMonoMs: 800_000,
|
|
22
|
+
nowMonoMs: 901_000,
|
|
23
|
+
nowWallMs: 911_000,
|
|
24
|
+
})).toBe(false);
|
|
25
|
+
});
|
|
26
|
+
it("falls back on a clock jump in either direction", () => {
|
|
27
|
+
expect(canSkipScheduledFullReconcile({ ...baseline, nowWallMs: 1_010_000 })).toBe(false);
|
|
28
|
+
expect(canSkipScheduledFullReconcile({ ...baseline, nowWallMs: 10_000 })).toBe(false);
|
|
29
|
+
});
|
|
30
|
+
it("falls back when the journal or watcher coverage proof is missing", () => {
|
|
31
|
+
expect(canSkipScheduledFullReconcile({ ...baseline, journalHealthy: false })).toBe(false);
|
|
32
|
+
expect(canSkipScheduledFullReconcile({ ...baseline, watcherCoverageHealthy: false })).toBe(false);
|
|
33
|
+
});
|
|
34
|
+
it("keeps an earlier long loop gap latched until a clean full pass", () => {
|
|
35
|
+
const continuity = new FullPassContinuity();
|
|
36
|
+
continuity.markFullPassCompleted(1_000);
|
|
37
|
+
expect(continuity.observeLoopTick(61_001)).toBe(false);
|
|
38
|
+
expect(continuity.observeLoopTick(91_001)).toBe(false);
|
|
39
|
+
expect(continuity.observeLoopTick(121_001)).toBe(false);
|
|
40
|
+
continuity.markFullPassCompleted(121_001);
|
|
41
|
+
expect(continuity.observeLoopTick(151_001)).toBe(true);
|
|
42
|
+
});
|
|
43
|
+
it("rejects an idle skip after a latched loop gap even when the latest tick is recent", () => {
|
|
44
|
+
expect(canSkipScheduledFullReconcile({
|
|
45
|
+
...baseline,
|
|
46
|
+
previousTickMonoMs: 890_000,
|
|
47
|
+
nowMonoMs: 900_000,
|
|
48
|
+
nowWallMs: 909_000,
|
|
49
|
+
continuityHealthy: false,
|
|
50
|
+
})).toBe(false);
|
|
51
|
+
});
|
|
52
|
+
it("requires a complete, non-aborted pass before trusting the journal", () => {
|
|
53
|
+
expect(isFullPassJournalHealthy(0, false)).toBe(true);
|
|
54
|
+
expect(isFullPassJournalHealthy(0, true)).toBe(false);
|
|
55
|
+
expect(isFullPassJournalHealthy(0, undefined)).toBe(false);
|
|
56
|
+
expect(isFullPassJournalHealthy(2, false)).toBe(false);
|
|
57
|
+
});
|
|
58
|
+
it("keeps the old full-pass behavior with the flag off", () => {
|
|
59
|
+
expect(canSkipScheduledFullReconcile({ ...baseline, enabled: false })).toBe(false);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=idle-full-reconcile.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idle-full-reconcile.test.js","sourceRoot":"","sources":["../../src/sync/idle-full-reconcile.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbound-event-admission.test.d.ts","sourceRoot":"","sources":["../../src/sync/inbound-event-admission.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as os from "node:os";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
5
|
+
import { hashFile } from "../journal.js";
|
|
6
|
+
import { isInboundEventPlaceable } from "./inbound-event-admission.js";
|
|
7
|
+
import { SESSION_LOGS_PUSH_ONLY_PREFIX } from "./pull-scope.js";
|
|
8
|
+
vi.mock("../journal.js", async (importOriginal) => {
|
|
9
|
+
const actual = await importOriginal();
|
|
10
|
+
return { ...actual, hashFile: vi.fn(actual.hashFile) };
|
|
11
|
+
});
|
|
12
|
+
const roots = [];
|
|
13
|
+
function makeRoot() {
|
|
14
|
+
const root = fs.mkdtempSync(path.join(os.tmpdir(), "hq-inbound-event-admission-"));
|
|
15
|
+
roots.push(root);
|
|
16
|
+
return root;
|
|
17
|
+
}
|
|
18
|
+
function write(root, relativePath) {
|
|
19
|
+
const absolutePath = path.join(root, relativePath);
|
|
20
|
+
fs.mkdirSync(path.dirname(absolutePath), { recursive: true });
|
|
21
|
+
fs.writeFileSync(absolutePath, "fixture\n");
|
|
22
|
+
}
|
|
23
|
+
function event(relativePath, overrides = {}) {
|
|
24
|
+
return {
|
|
25
|
+
relativePath,
|
|
26
|
+
kind: "upsert",
|
|
27
|
+
contentHash: "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
|
28
|
+
mtime: "2026-08-29T00:00:00.000Z",
|
|
29
|
+
originDeviceId: "device-a",
|
|
30
|
+
originTenantId: "tenant-a",
|
|
31
|
+
sequenceNumber: 1,
|
|
32
|
+
eventTimestamp: "2026-08-29T00:00:00.000Z",
|
|
33
|
+
...overrides,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
afterEach(() => {
|
|
37
|
+
for (const root of roots.splice(0))
|
|
38
|
+
fs.rmSync(root, { recursive: true, force: true });
|
|
39
|
+
});
|
|
40
|
+
describe("isInboundEventPlaceable", () => {
|
|
41
|
+
it("drops a mirror upsert only when its content hash matches the personal source", () => {
|
|
42
|
+
const hqRoot = makeRoot();
|
|
43
|
+
write(hqRoot, "personal/policies/foo.md");
|
|
44
|
+
expect(isInboundEventPlaceable(hqRoot, event("core/policies/foo.md", {
|
|
45
|
+
contentHash: `sha256:${hashFile(path.join(hqRoot, "personal/policies/foo.md"))}`,
|
|
46
|
+
}))).toBe(false);
|
|
47
|
+
});
|
|
48
|
+
it("processes a first-arrival collision when the content hash differs", () => {
|
|
49
|
+
const hqRoot = makeRoot();
|
|
50
|
+
write(hqRoot, "personal/policies/bar.md");
|
|
51
|
+
expect(isInboundEventPlaceable(hqRoot, event("core/policies/bar.md", {
|
|
52
|
+
contentHash: `sha256:${"a".repeat(64)}`,
|
|
53
|
+
}))).toBe(true);
|
|
54
|
+
});
|
|
55
|
+
it("processes an upsert when hashing the personal source fails", () => {
|
|
56
|
+
const hqRoot = makeRoot();
|
|
57
|
+
write(hqRoot, "personal/policies/unreadable.md");
|
|
58
|
+
vi.mocked(hashFile).mockImplementationOnce(() => {
|
|
59
|
+
throw new Error("unreadable");
|
|
60
|
+
});
|
|
61
|
+
expect(isInboundEventPlaceable(hqRoot, event("core/policies/unreadable.md"))).toBe(true);
|
|
62
|
+
});
|
|
63
|
+
it("drops a mirror delete but processes a delete for a real core file", () => {
|
|
64
|
+
const hqRoot = makeRoot();
|
|
65
|
+
write(hqRoot, "personal/policies/removed.md");
|
|
66
|
+
expect(isInboundEventPlaceable(hqRoot, event("core/policies/removed.md", {
|
|
67
|
+
kind: "delete",
|
|
68
|
+
contentHash: undefined,
|
|
69
|
+
mtime: undefined,
|
|
70
|
+
}))).toBe(false);
|
|
71
|
+
write(hqRoot, "core/policies/removed.md");
|
|
72
|
+
expect(isInboundEventPlaceable(hqRoot, event("core/policies/removed.md", {
|
|
73
|
+
kind: "delete",
|
|
74
|
+
contentHash: undefined,
|
|
75
|
+
mtime: undefined,
|
|
76
|
+
}))).toBe(true);
|
|
77
|
+
});
|
|
78
|
+
// chmod 0o000 does not produce EACCES on Windows: lstat of the child is
|
|
79
|
+
// ENOENT, which lstatIfPresent treats as absence (inbound-event-admission.ts:64).
|
|
80
|
+
// POSIX coverage of the unexpected-error branch stays in this test.
|
|
81
|
+
it.skipIf(process.platform === "win32")("processes an event when the core-path lstat has an unexpected error", () => {
|
|
82
|
+
const hqRoot = makeRoot();
|
|
83
|
+
const relativePath = "core/policies/locked.md";
|
|
84
|
+
write(hqRoot, "personal/policies/locked.md");
|
|
85
|
+
const coreDirectory = path.join(hqRoot, "core/policies");
|
|
86
|
+
fs.mkdirSync(coreDirectory, { recursive: true });
|
|
87
|
+
fs.chmodSync(coreDirectory, 0o000);
|
|
88
|
+
try {
|
|
89
|
+
expect(() => fs.lstatSync(path.join(hqRoot, relativePath))).toThrowError(expect.objectContaining({ code: "EACCES" }));
|
|
90
|
+
expect(isInboundEventPlaceable(hqRoot, event(relativePath))).toBe(true);
|
|
91
|
+
}
|
|
92
|
+
finally {
|
|
93
|
+
fs.chmodSync(coreDirectory, 0o700);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
it("processes a plain release-shipped core file", () => {
|
|
97
|
+
const hqRoot = makeRoot();
|
|
98
|
+
write(hqRoot, "core/policies/baz.md");
|
|
99
|
+
expect(isInboundEventPlaceable(hqRoot, event("core/policies/baz.md"))).toBe(true);
|
|
100
|
+
});
|
|
101
|
+
it("keeps a genuinely new core file placeable", () => {
|
|
102
|
+
expect(isInboundEventPlaceable(makeRoot(), event("core/policies/new.md"))).toBe(true);
|
|
103
|
+
});
|
|
104
|
+
it("keeps a valid-area absent file placeable", () => {
|
|
105
|
+
expect(isInboundEventPlaceable(makeRoot(), event("knowledge/notes/new.md"))).toBe(true);
|
|
106
|
+
});
|
|
107
|
+
it("filters push-only session logs without matching neighboring paths", () => {
|
|
108
|
+
const hqRoot = makeRoot();
|
|
109
|
+
expect(isInboundEventPlaceable(hqRoot, event(`${SESSION_LOGS_PUSH_ONLY_PREFIX}codex/session.jsonl`))).toBe(false);
|
|
110
|
+
expect(isInboundEventPlaceable(hqRoot, event("workspace/.session-logs-export/session.jsonl"))).toBe(true);
|
|
111
|
+
});
|
|
112
|
+
it.each([
|
|
113
|
+
["core/workers/legacy-worker.yaml", "personal/workers/legacy-worker.yaml"],
|
|
114
|
+
["core/knowledge/legacy-kb/file.md", "personal/knowledge/legacy-kb/file.md"],
|
|
115
|
+
["core/settings/legacy.yaml", "personal/settings/legacy.yaml"],
|
|
116
|
+
["core/policies/_digest.md", "personal/policies/_digest.md"],
|
|
117
|
+
])("uses the retired route map for %s", (relativePath, personalPath) => {
|
|
118
|
+
const hqRoot = makeRoot();
|
|
119
|
+
write(hqRoot, personalPath);
|
|
120
|
+
expect(isInboundEventPlaceable(hqRoot, event(relativePath, {
|
|
121
|
+
contentHash: `sha256:${hashFile(path.join(hqRoot, personalPath))}`,
|
|
122
|
+
}))).toBe(false);
|
|
123
|
+
});
|
|
124
|
+
it("processes public knowledge with no personal source", () => {
|
|
125
|
+
expect(isInboundEventPlaceable(makeRoot(), event("core/knowledge/public/hq-core/x.md"))).toBe(true);
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
//# sourceMappingURL=inbound-event-admission.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbound-event-admission.test.js","sourceRoot":"","sources":["../../src/sync/inbound-event-admission.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The streaming ledger reader must agree with `JSON.parse` on every document
|
|
3
|
+
* the journal writer can produce — that is the whole safety argument for using
|
|
4
|
+
* a hand-written scanner at all.
|
|
5
|
+
*
|
|
6
|
+
* So the central test is not a hand-picked example, it is an EQUIVALENCE: for
|
|
7
|
+
* each fixture, the rows this reader emits are compared against the rows
|
|
8
|
+
* `JSON.parse` yields from the same bytes. A fixture that the two disagree on
|
|
9
|
+
* is a bug in this file by construction, whichever one is "right".
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=journal-ledger-stream.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-ledger-stream.test.d.ts","sourceRoot":"","sources":["../../src/sync/journal-ledger-stream.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The streaming ledger reader must agree with `JSON.parse` on every document
|
|
3
|
+
* the journal writer can produce — that is the whole safety argument for using
|
|
4
|
+
* a hand-written scanner at all.
|
|
5
|
+
*
|
|
6
|
+
* So the central test is not a hand-picked example, it is an EQUIVALENCE: for
|
|
7
|
+
* each fixture, the rows this reader emits are compared against the rows
|
|
8
|
+
* `JSON.parse` yields from the same bytes. A fixture that the two disagree on
|
|
9
|
+
* is a bug in this file by construction, whichever one is "right".
|
|
10
|
+
*/
|
|
11
|
+
import * as fs from "node:fs";
|
|
12
|
+
import * as os from "node:os";
|
|
13
|
+
import * as path from "node:path";
|
|
14
|
+
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
15
|
+
import { streamJournalLedgerRows } from "./journal-ledger-stream.js";
|
|
16
|
+
let dir;
|
|
17
|
+
beforeEach(() => {
|
|
18
|
+
dir = fs.mkdtempSync(path.join(os.tmpdir(), "hq-ledger-stream-"));
|
|
19
|
+
});
|
|
20
|
+
afterEach(() => {
|
|
21
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
22
|
+
});
|
|
23
|
+
function write(name, text) {
|
|
24
|
+
const filePath = path.join(dir, name);
|
|
25
|
+
fs.writeFileSync(filePath, text, "utf8");
|
|
26
|
+
return filePath;
|
|
27
|
+
}
|
|
28
|
+
function streamed(filePath) {
|
|
29
|
+
const out = {};
|
|
30
|
+
streamJournalLedgerRows(filePath, (key, valueJson) => {
|
|
31
|
+
out[key] = JSON.parse(valueJson);
|
|
32
|
+
});
|
|
33
|
+
return out;
|
|
34
|
+
}
|
|
35
|
+
function parsed(filePath) {
|
|
36
|
+
const doc = JSON.parse(fs.readFileSync(filePath, "utf8"));
|
|
37
|
+
return doc.files ?? {};
|
|
38
|
+
}
|
|
39
|
+
describe("streamJournalLedgerRows — equivalence with JSON.parse", () => {
|
|
40
|
+
const cases = {
|
|
41
|
+
"an ordinary journal": {
|
|
42
|
+
version: "2",
|
|
43
|
+
files: {
|
|
44
|
+
"notes/a.md": { hash: "sha256:aa", size: 1, syncedAt: "2026-01-01T00:00:00.000Z", direction: "up" },
|
|
45
|
+
"notes/b.md": { hash: "sha256:bb", size: 2, syncedAt: "2026-01-02T00:00:00.000Z", direction: "down" },
|
|
46
|
+
},
|
|
47
|
+
pulls: [{ id: "p1", at: "2026-01-02T00:00:00.000Z" }],
|
|
48
|
+
},
|
|
49
|
+
"an empty files map": { version: "2", files: {}, pulls: [] },
|
|
50
|
+
"no files member at all": { schema: "hq-sync-journal-locator@1", scopeId: "x" },
|
|
51
|
+
"files declared last": {
|
|
52
|
+
pulls: [{ id: "p1" }],
|
|
53
|
+
version: "2",
|
|
54
|
+
files: { "z.md": { hash: "sha256:zz", size: 3, syncedAt: "2026-01-01T00:00:00.000Z", direction: "up" } },
|
|
55
|
+
},
|
|
56
|
+
"nested and heterogeneous row values": {
|
|
57
|
+
version: "2",
|
|
58
|
+
files: {
|
|
59
|
+
"deep.md": {
|
|
60
|
+
hash: "sha256:dd",
|
|
61
|
+
size: 4,
|
|
62
|
+
syncedAt: "2026-01-01T00:00:00.000Z",
|
|
63
|
+
direction: "up",
|
|
64
|
+
localDeleteIntent: { version: 1, remoteEtag: "e", localHash: "h", localKind: "file" },
|
|
65
|
+
outOfScopeProtected: true,
|
|
66
|
+
ctimeMs: null,
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
pulls: [],
|
|
70
|
+
},
|
|
71
|
+
"keys and values that exercise the string scanner": {
|
|
72
|
+
version: "2",
|
|
73
|
+
files: {
|
|
74
|
+
// A quote, a backslash, a brace, a colon and a comma inside a KEY —
|
|
75
|
+
// every character the scanner treats as structural when it is outside
|
|
76
|
+
// a string, and must not when it is inside one.
|
|
77
|
+
'odd"key\\with{braces}:and,commas.md': { hash: "sha256:ee", size: 5, syncedAt: "t", direction: "up" },
|
|
78
|
+
"unicode/café/日本語/🗂.md": { hash: "sha256:ff", size: 6, syncedAt: "t", direction: "down" },
|
|
79
|
+
"escapes.md": { hash: 'sha256:with"quote\\and\\\\backslash', size: 7, syncedAt: "t\nnewline", direction: "up" },
|
|
80
|
+
},
|
|
81
|
+
pulls: [],
|
|
82
|
+
},
|
|
83
|
+
"a row whose value is not an object": {
|
|
84
|
+
version: "2",
|
|
85
|
+
files: { "scalar.md": 42, "nulled.md": null, "stringy.md": "plain", "listed.md": [1, 2, 3] },
|
|
86
|
+
pulls: [],
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
for (const [name, document] of Object.entries(cases)) {
|
|
90
|
+
it(`matches JSON.parse for ${name}`, () => {
|
|
91
|
+
const filePath = write("journal.json", JSON.stringify(document));
|
|
92
|
+
expect(streamed(filePath)).toEqual(parsed(filePath));
|
|
93
|
+
});
|
|
94
|
+
it(`matches JSON.parse for ${name}, pretty-printed`, () => {
|
|
95
|
+
// The writer emits compact JSON, but a journal repaired by hand is still
|
|
96
|
+
// a journal — and whitespace is exactly where a naive scanner breaks.
|
|
97
|
+
const filePath = write("journal-pretty.json", JSON.stringify(document, null, 2));
|
|
98
|
+
expect(streamed(filePath)).toEqual(parsed(filePath));
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
describe("streamJournalLedgerRows — chunk boundaries are not row boundaries", () => {
|
|
103
|
+
it("reads a document far larger than one read buffer identically", () => {
|
|
104
|
+
// Comfortably past the 256 KB chunk size, so keys, values, and multi-byte
|
|
105
|
+
// sequences all land mid-buffer somewhere in the run.
|
|
106
|
+
const files = {};
|
|
107
|
+
for (let index = 0; index < 20_000; index += 1) {
|
|
108
|
+
files[`notes/café-${index}/日本語-${index}.md`] = {
|
|
109
|
+
hash: `sha256:${index.toString(16).padStart(64, "0")}`,
|
|
110
|
+
size: index,
|
|
111
|
+
syncedAt: "2026-01-01T00:00:00.000Z",
|
|
112
|
+
direction: index % 2 === 0 ? "up" : "down",
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
const filePath = write("big.json", JSON.stringify({ version: "2", files, pulls: [] }));
|
|
116
|
+
const rows = streamed(filePath);
|
|
117
|
+
expect(Object.keys(rows)).toHaveLength(20_000);
|
|
118
|
+
expect(rows).toEqual(parsed(filePath));
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
describe("streamJournalLedgerRows — malformed input surfaces, never fabricates", () => {
|
|
122
|
+
it("throws rather than reporting a truncated document as a short ledger", () => {
|
|
123
|
+
const filePath = write("truncated.json", '{"version":"2","files":{"a.md":{"hash":"sha256:aa","siz');
|
|
124
|
+
expect(() => streamed(filePath)).toThrow(SyntaxError);
|
|
125
|
+
});
|
|
126
|
+
it("throws for a row whose value is not valid JSON", () => {
|
|
127
|
+
const filePath = write("bad-row.json", '{"files":{"a.md":{"hash":,}},"pulls":[]}');
|
|
128
|
+
expect(() => streamed(filePath)).toThrow(SyntaxError);
|
|
129
|
+
});
|
|
130
|
+
it("propagates an unreadable file", () => {
|
|
131
|
+
expect(() => streamed(path.join(dir, "missing.json"))).toThrow();
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
//# sourceMappingURL=journal-ledger-stream.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-ledger-stream.test.js","sourceRoot":"","sources":["../../src/sync/journal-ledger-stream.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lease-client.test.d.ts","sourceRoot":"","sources":["../../src/sync/lease-client.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { RealtimeLeaseClient, RealtimePassAuthorizer } from "./lease-client.js";
|
|
3
|
+
import { RealtimeRolloutClient } from "./realtime-rollout.js";
|
|
4
|
+
const capability = {
|
|
5
|
+
hqCloud: "6.14.49",
|
|
6
|
+
hqDesktop: "none",
|
|
7
|
+
protocol: 2,
|
|
8
|
+
journal: 3,
|
|
9
|
+
durableApply: 1,
|
|
10
|
+
};
|
|
11
|
+
function jsonResponse(body, status = 200) {
|
|
12
|
+
return { ok: status >= 200 && status < 300, status, text: async () => JSON.stringify(body) };
|
|
13
|
+
}
|
|
14
|
+
describe("RealtimeLeaseClient", () => {
|
|
15
|
+
it("uses the pass bearer and rejects a lease longer than sixty seconds", async () => {
|
|
16
|
+
let received;
|
|
17
|
+
const fetchImpl = async (_url, init) => {
|
|
18
|
+
received = init;
|
|
19
|
+
return jsonResponse({
|
|
20
|
+
lease: "lease_1",
|
|
21
|
+
issuedAt: "2026-08-12T00:00:00.000Z",
|
|
22
|
+
expiresAt: "2026-08-12T00:01:01.000Z",
|
|
23
|
+
authorizationEpoch: "epoch_1",
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
const client = new RealtimeLeaseClient({ apiUrl: "https://api.example", fetchImpl, now: () => Date.parse("2026-08-12T00:00:00.000Z") });
|
|
27
|
+
await expect(client.issue({ bearer: "token-a", deviceId: "machine_a", capabilityVector: capability, scopeHandle: "handle_1", scopeRevision: "rev_1" })).rejects.toThrow("invalid lease lifetime");
|
|
28
|
+
expect(received).toMatchObject({
|
|
29
|
+
method: "POST",
|
|
30
|
+
headers: expect.objectContaining({ Authorization: "Bearer token-a", "X-HQ-Sync-Contract": "2" }),
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
it("rejects a lease issued too far into the future", async () => {
|
|
34
|
+
const fetchImpl = async () => jsonResponse({
|
|
35
|
+
lease: "lease_1",
|
|
36
|
+
issuedAt: "2026-08-12T00:00:06.000Z",
|
|
37
|
+
expiresAt: "2026-08-12T00:01:00.000Z",
|
|
38
|
+
authorizationEpoch: "epoch_1",
|
|
39
|
+
});
|
|
40
|
+
const client = new RealtimeLeaseClient({ apiUrl: "https://api.example", fetchImpl, now: () => Date.parse("2026-08-12T00:00:00.000Z") });
|
|
41
|
+
await expect(client.issue({ bearer: "token-a", deviceId: "machine_a", capabilityVector: capability, scopeHandle: "handle_1", scopeRevision: "rev_1" })).rejects.toThrow("invalid lease lifetime");
|
|
42
|
+
});
|
|
43
|
+
it("resolves one bearer and freshly leases every selected scope before I/O", async () => {
|
|
44
|
+
const now = Date.parse("2026-08-12T00:00:00.000Z");
|
|
45
|
+
const requests = [];
|
|
46
|
+
const fetchImpl = async (url, init) => {
|
|
47
|
+
requests.push({ headers: init?.headers });
|
|
48
|
+
if (url.endsWith("/scopes")) {
|
|
49
|
+
return jsonResponse({ contractVersion: 2, scopes: [
|
|
50
|
+
{ scopeUid: "prs_1", scopeHandle: "handle_1", scopeRevision: "rev_1", state: "v2-ready", cursor: "cursor_1" },
|
|
51
|
+
{ scopeUid: "cmp_1", scopeHandle: "handle_2", scopeRevision: "rev_2", state: "v2-ready", cursor: "cursor_2" },
|
|
52
|
+
] });
|
|
53
|
+
}
|
|
54
|
+
return jsonResponse({
|
|
55
|
+
lease: "lease_issued",
|
|
56
|
+
issuedAt: "2026-08-12T00:00:00.000Z",
|
|
57
|
+
expiresAt: "2026-08-12T00:01:00.000Z",
|
|
58
|
+
authorizationEpoch: "epoch_1",
|
|
59
|
+
}, 201);
|
|
60
|
+
};
|
|
61
|
+
const token = vi.fn(async () => "token-a");
|
|
62
|
+
const inventory = new RealtimeRolloutClient({ apiUrl: "https://api.example", fetchImpl, now: () => now });
|
|
63
|
+
const leases = new RealtimeLeaseClient({ apiUrl: "https://api.example", fetchImpl, now: () => now });
|
|
64
|
+
const authorizer = new RealtimePassAuthorizer(token, inventory, leases);
|
|
65
|
+
const operation = vi.fn(async () => "done");
|
|
66
|
+
await expect(authorizer.runBeforeIo({
|
|
67
|
+
deviceId: "machine_a",
|
|
68
|
+
capabilityVector: capability,
|
|
69
|
+
configurationFingerprint: "config-a",
|
|
70
|
+
scopeFingerprint: "prs_1,cmp_1",
|
|
71
|
+
scopeUids: ["prs_1", "cmp_1"],
|
|
72
|
+
}, operation)).resolves.toBe("done");
|
|
73
|
+
expect(token).toHaveBeenCalledTimes(1);
|
|
74
|
+
expect(requests).toHaveLength(3);
|
|
75
|
+
for (const call of requests)
|
|
76
|
+
expect(call.headers?.Authorization).toBe("Bearer token-a");
|
|
77
|
+
expect(operation).toHaveBeenCalledTimes(1);
|
|
78
|
+
});
|
|
79
|
+
it("does not invoke I/O when inventory loses a requested scope", async () => {
|
|
80
|
+
const fetchImpl = vi.fn(async () => jsonResponse({ contractVersion: 2, scopes: [
|
|
81
|
+
{ scopeUid: "prs_1", scopeHandle: "handle_1", scopeRevision: "rev_1", state: "paused", reasonCode: "maintenance" },
|
|
82
|
+
] }));
|
|
83
|
+
const inventory = new RealtimeRolloutClient({ apiUrl: "https://api.example", fetchImpl });
|
|
84
|
+
const leases = new RealtimeLeaseClient({ apiUrl: "https://api.example", fetchImpl });
|
|
85
|
+
const authorizer = new RealtimePassAuthorizer("token-a", inventory, leases);
|
|
86
|
+
const operation = vi.fn(async () => undefined);
|
|
87
|
+
await expect(authorizer.runBeforeIo({
|
|
88
|
+
deviceId: "machine_a", capabilityVector: capability, configurationFingerprint: "config-a", scopeFingerprint: "prs_1", scopeUids: ["prs_1"],
|
|
89
|
+
}, operation)).rejects.toThrow("does not authorize every requested scope");
|
|
90
|
+
expect(operation).not.toHaveBeenCalled();
|
|
91
|
+
});
|
|
92
|
+
it("does not invoke I/O when parallel lease issues disagree on epoch", async () => {
|
|
93
|
+
let leaseCalls = 0;
|
|
94
|
+
const fetchImpl = async (url) => {
|
|
95
|
+
if (url.endsWith("/scopes"))
|
|
96
|
+
return jsonResponse({ contractVersion: 2, scopes: [
|
|
97
|
+
{ scopeUid: "prs_1", scopeHandle: "handle_1", scopeRevision: "rev_1", state: "v2-ready", cursor: "cursor_1" },
|
|
98
|
+
{ scopeUid: "cmp_1", scopeHandle: "handle_2", scopeRevision: "rev_2", state: "v2-ready", cursor: "cursor_2" },
|
|
99
|
+
] });
|
|
100
|
+
leaseCalls += 1;
|
|
101
|
+
return jsonResponse({
|
|
102
|
+
lease: `lease_${leaseCalls}`,
|
|
103
|
+
issuedAt: "2026-08-12T00:00:00.000Z",
|
|
104
|
+
expiresAt: "2026-08-12T00:00:30.000Z",
|
|
105
|
+
authorizationEpoch: `epoch_${leaseCalls}`,
|
|
106
|
+
}, 201);
|
|
107
|
+
};
|
|
108
|
+
const now = () => Date.parse("2026-08-12T00:00:00.000Z");
|
|
109
|
+
const inventory = new RealtimeRolloutClient({ apiUrl: "https://api.example", fetchImpl, now });
|
|
110
|
+
const leases = new RealtimeLeaseClient({ apiUrl: "https://api.example", fetchImpl, now });
|
|
111
|
+
const authorizer = new RealtimePassAuthorizer("token-a", inventory, leases);
|
|
112
|
+
const operation = vi.fn(async () => undefined);
|
|
113
|
+
await expect(authorizer.runBeforeIo({
|
|
114
|
+
deviceId: "machine_a", capabilityVector: capability, configurationFingerprint: "config-a", scopeFingerprint: "all", scopeUids: ["prs_1", "cmp_1"],
|
|
115
|
+
}, operation)).rejects.toThrow("leases disagree on authorization epoch");
|
|
116
|
+
expect(operation).not.toHaveBeenCalled();
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
//# sourceMappingURL=lease-client.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lease-client.test.js","sourceRoot":"","sources":["../../src/sync/lease-client.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* US-011 — unit tests for the pino logger factory + the 3-log diagnostic
|
|
3
|
+
* chain's CLIENT-side correlated fields.
|
|
4
|
+
*
|
|
5
|
+
* The PRD requires three correlated logs sharing the same `sequenceNumber`:
|
|
6
|
+
* 1. `watcher.emit` — client push (US-008 PushEventEmitter) [client]
|
|
7
|
+
* 2. `push.receive` — server (hq-pro) [server]
|
|
8
|
+
* 3. `fanout.receive` — client fanout-receive (US-009 receiver) [client]
|
|
9
|
+
*
|
|
10
|
+
* This package owns the two CLIENT-side links. These tests prove:
|
|
11
|
+
* - `createLogger` stamps the `component` tag on every line and respects
|
|
12
|
+
* level + injected destination.
|
|
13
|
+
* - the watcher emits `event=watcher.emit` carrying `sequenceNumber`.
|
|
14
|
+
* - the receiver emits `event=fanout.receive` carrying the SAME
|
|
15
|
+
* `sequenceNumber` → an operator can join the two client links (and the
|
|
16
|
+
* server `push.receive` line, which carries the same key) end-to-end.
|
|
17
|
+
*/
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=logger.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.test.d.ts","sourceRoot":"","sources":["../../src/sync/logger.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG"}
|