@indigoai-us/hq-cloud 6.18.44-alpha.8 → 6.18.44
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/bin/sync-runner-planning.d.ts +12 -0
- package/dist/bin/sync-runner-planning.d.ts.map +1 -1
- package/dist/bin/sync-runner-planning.js +18 -0
- package/dist/bin/sync-runner-planning.js.map +1 -1
- package/dist/bin/sync-runner-watch-loop.d.ts +18 -0
- package/dist/bin/sync-runner-watch-loop.d.ts.map +1 -1
- package/dist/bin/sync-runner-watch-loop.js +75 -6
- package/dist/bin/sync-runner-watch-loop.js.map +1 -1
- package/dist/bin/sync-runner.d.ts +22 -1
- package/dist/bin/sync-runner.d.ts.map +1 -1
- package/dist/bin/sync-runner.js +33 -4
- package/dist/bin/sync-runner.js.map +1 -1
- package/dist/cli/conflict.d.ts.map +1 -1
- package/dist/cli/conflict.js +2 -1
- package/dist/cli/conflict.js.map +1 -1
- package/dist/cli/rescue-core.d.ts +6 -0
- package/dist/cli/rescue-core.d.ts.map +1 -1
- package/dist/cli/rescue-core.js +10 -1
- package/dist/cli/rescue-core.js.map +1 -1
- package/dist/cli/rescue-windows-test-harness.d.ts +19 -0
- package/dist/cli/rescue-windows-test-harness.d.ts.map +1 -0
- package/dist/cli/rescue-windows-test-harness.js +443 -0
- package/dist/cli/rescue-windows-test-harness.js.map +1 -0
- package/dist/company-resolver.d.ts +22 -0
- package/dist/company-resolver.d.ts.map +1 -1
- package/dist/company-resolver.js +1 -1
- package/dist/company-resolver.js.map +1 -1
- package/dist/ignore.d.ts +4 -1
- package/dist/ignore.d.ts.map +1 -1
- package/dist/ignore.js +10 -12
- package/dist/ignore.js.map +1 -1
- package/dist/journal-snapshot-decoder.js +15 -2
- package/dist/journal-snapshot-decoder.js.map +1 -1
- package/dist/sync/durable-apply.d.ts +2 -0
- package/dist/sync/durable-apply.d.ts.map +1 -1
- package/dist/sync/durable-apply.js +9 -12
- package/dist/sync/durable-apply.js.map +1 -1
- package/dist/sync/fsync-compat.d.ts +13 -0
- package/dist/sync/fsync-compat.d.ts.map +1 -0
- package/dist/sync/fsync-compat.js +33 -0
- package/dist/sync/fsync-compat.js.map +1 -0
- package/dist/sync/multipart-uploader.d.ts.map +1 -1
- package/dist/sync/multipart-uploader.js +2 -1
- package/dist/sync/multipart-uploader.js.map +1 -1
- package/dist/sync/scope-inventory-client.d.ts.map +1 -1
- package/dist/sync/scope-inventory-client.js +7 -2
- package/dist/sync/scope-inventory-client.js.map +1 -1
- package/dist/telemetry.d.ts +31 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +177 -17
- package/dist/telemetry.js.map +1 -1
- package/dist/usage-company-fallback.d.ts +104 -0
- package/dist/usage-company-fallback.d.ts.map +1 -0
- package/dist/usage-company-fallback.js +599 -0
- package/dist/usage-company-fallback.js.map +1 -0
- package/dist/watch-owner-lease.d.ts +3 -0
- package/dist/watch-owner-lease.d.ts.map +1 -1
- package/dist/watch-owner-lease.js +14 -3
- package/dist/watch-owner-lease.js.map +1 -1
- package/package.json +2 -2
- package/dist/active-company.test.d.ts +0 -2
- package/dist/active-company.test.d.ts.map +0 -1
- package/dist/active-company.test.js +0 -149
- package/dist/active-company.test.js.map +0 -1
- package/dist/agent-codex-instructions.test.d.ts +0 -2
- package/dist/agent-codex-instructions.test.d.ts.map +0 -1
- package/dist/agent-codex-instructions.test.js +0 -271
- package/dist/agent-codex-instructions.test.js.map +0 -1
- package/dist/backup-prune.test.d.ts +0 -2
- package/dist/backup-prune.test.d.ts.map +0 -1
- package/dist/backup-prune.test.js +0 -154
- package/dist/backup-prune.test.js.map +0 -1
- package/dist/bandwidth.test.d.ts +0 -2
- package/dist/bandwidth.test.d.ts.map +0 -1
- package/dist/bandwidth.test.js +0 -342
- package/dist/bandwidth.test.js.map +0 -1
- package/dist/best-effort-error.test.d.ts +0 -2
- package/dist/best-effort-error.test.d.ts.map +0 -1
- package/dist/best-effort-error.test.js +0 -54
- package/dist/best-effort-error.test.js.map +0 -1
- package/dist/bin/area-ledger-migration.test.d.ts +0 -2
- package/dist/bin/area-ledger-migration.test.d.ts.map +0 -1
- package/dist/bin/area-ledger-migration.test.js +0 -410
- package/dist/bin/area-ledger-migration.test.js.map +0 -1
- package/dist/bin/backup-prune-runner.test.d.ts +0 -2
- package/dist/bin/backup-prune-runner.test.d.ts.map +0 -1
- package/dist/bin/backup-prune-runner.test.js +0 -22
- package/dist/bin/backup-prune-runner.test.js.map +0 -1
- package/dist/bin/journal-repair.test.d.ts +0 -2
- package/dist/bin/journal-repair.test.d.ts.map +0 -1
- package/dist/bin/journal-repair.test.js +0 -53
- package/dist/bin/journal-repair.test.js.map +0 -1
- package/dist/bin/layout-compatibility.test.d.ts +0 -2
- package/dist/bin/layout-compatibility.test.d.ts.map +0 -1
- package/dist/bin/layout-compatibility.test.js +0 -87
- package/dist/bin/layout-compatibility.test.js.map +0 -1
- package/dist/bin/outpost-heartbeat.test.d.ts +0 -7
- package/dist/bin/outpost-heartbeat.test.d.ts.map +0 -1
- package/dist/bin/outpost-heartbeat.test.js +0 -84
- package/dist/bin/outpost-heartbeat.test.js.map +0 -1
- package/dist/bin/outpost-session-host.test.d.ts +0 -7
- package/dist/bin/outpost-session-host.test.d.ts.map +0 -1
- package/dist/bin/outpost-session-host.test.js +0 -52
- package/dist/bin/outpost-session-host.test.js.map +0 -1
- package/dist/bin/sync-mutation.test.d.ts +0 -2
- package/dist/bin/sync-mutation.test.d.ts.map +0 -1
- package/dist/bin/sync-mutation.test.js +0 -64
- package/dist/bin/sync-mutation.test.js.map +0 -1
- package/dist/bin/sync-runner-args.test.d.ts +0 -2
- package/dist/bin/sync-runner-args.test.d.ts.map +0 -1
- package/dist/bin/sync-runner-args.test.js +0 -82
- package/dist/bin/sync-runner-args.test.js.map +0 -1
- package/dist/bin/sync-runner-auth-wait.test.d.ts +0 -2
- package/dist/bin/sync-runner-auth-wait.test.d.ts.map +0 -1
- package/dist/bin/sync-runner-auth-wait.test.js +0 -406
- package/dist/bin/sync-runner-auth-wait.test.js.map +0 -1
- package/dist/bin/sync-runner-backoff.regression.test.d.ts +0 -29
- package/dist/bin/sync-runner-backoff.regression.test.d.ts.map +0 -1
- package/dist/bin/sync-runner-backoff.regression.test.js +0 -224
- package/dist/bin/sync-runner-backoff.regression.test.js.map +0 -1
- package/dist/bin/sync-runner-company.test.d.ts +0 -2
- package/dist/bin/sync-runner-company.test.d.ts.map +0 -1
- package/dist/bin/sync-runner-company.test.js +0 -2439
- package/dist/bin/sync-runner-company.test.js.map +0 -1
- package/dist/bin/sync-runner-delete-snapshot-mixed.bench.test.d.ts +0 -2
- package/dist/bin/sync-runner-delete-snapshot-mixed.bench.test.d.ts.map +0 -1
- package/dist/bin/sync-runner-delete-snapshot-mixed.bench.test.js +0 -648
- package/dist/bin/sync-runner-delete-snapshot-mixed.bench.test.js.map +0 -1
- package/dist/bin/sync-runner-delete-snapshot.bench.test.d.ts +0 -2
- package/dist/bin/sync-runner-delete-snapshot.bench.test.d.ts.map +0 -1
- package/dist/bin/sync-runner-delete-snapshot.bench.test.js +0 -329
- package/dist/bin/sync-runner-delete-snapshot.bench.test.js.map +0 -1
- package/dist/bin/sync-runner-events.test.d.ts +0 -2
- package/dist/bin/sync-runner-events.test.d.ts.map +0 -1
- package/dist/bin/sync-runner-events.test.js +0 -364
- package/dist/bin/sync-runner-events.test.js.map +0 -1
- package/dist/bin/sync-runner-heap-telemetry.test.d.ts +0 -2
- package/dist/bin/sync-runner-heap-telemetry.test.d.ts.map +0 -1
- package/dist/bin/sync-runner-heap-telemetry.test.js +0 -1966
- package/dist/bin/sync-runner-heap-telemetry.test.js.map +0 -1
- package/dist/bin/sync-runner-manifest.test.d.ts +0 -12
- package/dist/bin/sync-runner-manifest.test.d.ts.map +0 -1
- package/dist/bin/sync-runner-manifest.test.js +0 -921
- package/dist/bin/sync-runner-manifest.test.js.map +0 -1
- package/dist/bin/sync-runner-planning.test.d.ts +0 -2
- package/dist/bin/sync-runner-planning.test.d.ts.map +0 -1
- package/dist/bin/sync-runner-planning.test.js +0 -448
- package/dist/bin/sync-runner-planning.test.js.map +0 -1
- package/dist/bin/sync-runner-post-sync-flags.test.d.ts +0 -2
- package/dist/bin/sync-runner-post-sync-flags.test.d.ts.map +0 -1
- package/dist/bin/sync-runner-post-sync-flags.test.js +0 -64
- package/dist/bin/sync-runner-post-sync-flags.test.js.map +0 -1
- package/dist/bin/sync-runner-publish-expansion.test.d.ts +0 -2
- package/dist/bin/sync-runner-publish-expansion.test.d.ts.map +0 -1
- package/dist/bin/sync-runner-publish-expansion.test.js +0 -54
- package/dist/bin/sync-runner-publish-expansion.test.js.map +0 -1
- package/dist/bin/sync-runner-receiver-unresolved-company.test.d.ts +0 -2
- package/dist/bin/sync-runner-receiver-unresolved-company.test.d.ts.map +0 -1
- package/dist/bin/sync-runner-receiver-unresolved-company.test.js +0 -379
- package/dist/bin/sync-runner-receiver-unresolved-company.test.js.map +0 -1
- package/dist/bin/sync-runner-rollup.test.d.ts +0 -2
- package/dist/bin/sync-runner-rollup.test.d.ts.map +0 -1
- package/dist/bin/sync-runner-rollup.test.js +0 -24
- package/dist/bin/sync-runner-rollup.test.js.map +0 -1
- package/dist/bin/sync-runner-watch-loop.test.d.ts +0 -2
- package/dist/bin/sync-runner-watch-loop.test.d.ts.map +0 -1
- package/dist/bin/sync-runner-watch-loop.test.js +0 -734
- package/dist/bin/sync-runner-watch-loop.test.js.map +0 -1
- package/dist/bin/sync-runner-watch-routes.test.d.ts +0 -2
- package/dist/bin/sync-runner-watch-routes.test.d.ts.map +0 -1
- package/dist/bin/sync-runner-watch-routes.test.js +0 -181
- package/dist/bin/sync-runner-watch-routes.test.js.map +0 -1
- package/dist/bin/sync-runner.test.d.ts +0 -10
- package/dist/bin/sync-runner.test.d.ts.map +0 -1
- package/dist/bin/sync-runner.test.js +0 -18984
- package/dist/bin/sync-runner.test.js.map +0 -1
- package/dist/cli/case-alias.test.d.ts +0 -2
- package/dist/cli/case-alias.test.d.ts.map +0 -1
- package/dist/cli/case-alias.test.js +0 -96
- package/dist/cli/case-alias.test.js.map +0 -1
- package/dist/cli/conflict-recovery.test.d.ts +0 -2
- package/dist/cli/conflict-recovery.test.d.ts.map +0 -1
- package/dist/cli/conflict-recovery.test.js +0 -201
- package/dist/cli/conflict-recovery.test.js.map +0 -1
- package/dist/cli/conflict-winner.test.d.ts +0 -7
- package/dist/cli/conflict-winner.test.d.ts.map +0 -1
- package/dist/cli/conflict-winner.test.js +0 -98
- package/dist/cli/conflict-winner.test.js.map +0 -1
- package/dist/cli/doctor.test.d.ts +0 -13
- package/dist/cli/doctor.test.d.ts.map +0 -1
- package/dist/cli/doctor.test.js +0 -607
- package/dist/cli/doctor.test.js.map +0 -1
- package/dist/cli/invite.test.d.ts +0 -5
- package/dist/cli/invite.test.d.ts.map +0 -1
- package/dist/cli/invite.test.js +0 -178
- package/dist/cli/invite.test.js.map +0 -1
- package/dist/cli/onepass-pull-planner-regressions.test.d.ts +0 -2
- package/dist/cli/onepass-pull-planner-regressions.test.d.ts.map +0 -1
- package/dist/cli/onepass-pull-planner-regressions.test.js +0 -300
- package/dist/cli/onepass-pull-planner-regressions.test.js.map +0 -1
- package/dist/cli/onepass-pull-planner.test.d.ts +0 -2
- package/dist/cli/onepass-pull-planner.test.d.ts.map +0 -1
- package/dist/cli/onepass-pull-planner.test.js +0 -266
- package/dist/cli/onepass-pull-planner.test.js.map +0 -1
- package/dist/cli/push-scan-exclusions.test.d.ts +0 -2
- package/dist/cli/push-scan-exclusions.test.d.ts.map +0 -1
- package/dist/cli/push-scan-exclusions.test.js +0 -99
- package/dist/cli/push-scan-exclusions.test.js.map +0 -1
- package/dist/cli/reindex-knowledge.test.d.ts +0 -12
- package/dist/cli/reindex-knowledge.test.d.ts.map +0 -1
- package/dist/cli/reindex-knowledge.test.js +0 -260
- package/dist/cli/reindex-knowledge.test.js.map +0 -1
- package/dist/cli/reindex.test.d.ts +0 -11
- package/dist/cli/reindex.test.d.ts.map +0 -1
- package/dist/cli/reindex.test.js +0 -811
- package/dist/cli/reindex.test.js.map +0 -1
- package/dist/cli/rescue-breaker.test.d.ts +0 -2
- package/dist/cli/rescue-breaker.test.d.ts.map +0 -1
- package/dist/cli/rescue-breaker.test.js +0 -812
- package/dist/cli/rescue-breaker.test.js.map +0 -1
- package/dist/cli/rescue-classify-ordering.test.d.ts +0 -2
- package/dist/cli/rescue-classify-ordering.test.d.ts.map +0 -1
- package/dist/cli/rescue-classify-ordering.test.js +0 -500
- package/dist/cli/rescue-classify-ordering.test.js.map +0 -1
- package/dist/cli/rescue-clone-diagnostics.test.d.ts +0 -2
- package/dist/cli/rescue-clone-diagnostics.test.d.ts.map +0 -1
- package/dist/cli/rescue-clone-diagnostics.test.js +0 -101
- package/dist/cli/rescue-clone-diagnostics.test.js.map +0 -1
- package/dist/cli/rescue-clone-network-retry.test.d.ts +0 -2
- package/dist/cli/rescue-clone-network-retry.test.d.ts.map +0 -1
- package/dist/cli/rescue-clone-network-retry.test.js +0 -415
- package/dist/cli/rescue-clone-network-retry.test.js.map +0 -1
- package/dist/cli/rescue-core-stamp.test.d.ts +0 -2
- package/dist/cli/rescue-core-stamp.test.d.ts.map +0 -1
- package/dist/cli/rescue-core-stamp.test.js +0 -364
- package/dist/cli/rescue-core-stamp.test.js.map +0 -1
- package/dist/cli/rescue-drift-reconcile.test.d.ts +0 -2
- package/dist/cli/rescue-drift-reconcile.test.d.ts.map +0 -1
- package/dist/cli/rescue-drift-reconcile.test.js +0 -162
- package/dist/cli/rescue-drift-reconcile.test.js.map +0 -1
- package/dist/cli/rescue-drop-dir-symlink.test.d.ts +0 -2
- package/dist/cli/rescue-drop-dir-symlink.test.d.ts.map +0 -1
- package/dist/cli/rescue-drop-dir-symlink.test.js +0 -255
- package/dist/cli/rescue-drop-dir-symlink.test.js.map +0 -1
- package/dist/cli/rescue-exec-bit-preserve.test.d.ts +0 -2
- package/dist/cli/rescue-exec-bit-preserve.test.d.ts.map +0 -1
- package/dist/cli/rescue-exec-bit-preserve.test.js +0 -177
- package/dist/cli/rescue-exec-bit-preserve.test.js.map +0 -1
- package/dist/cli/rescue-hq-root-guard.test.d.ts +0 -2
- package/dist/cli/rescue-hq-root-guard.test.d.ts.map +0 -1
- package/dist/cli/rescue-hq-root-guard.test.js +0 -210
- package/dist/cli/rescue-hq-root-guard.test.js.map +0 -1
- package/dist/cli/rescue-journal-reconcile.test.d.ts +0 -2
- package/dist/cli/rescue-journal-reconcile.test.d.ts.map +0 -1
- package/dist/cli/rescue-journal-reconcile.test.js +0 -186
- package/dist/cli/rescue-journal-reconcile.test.js.map +0 -1
- package/dist/cli/rescue-keep-local-ignore.test.d.ts +0 -2
- package/dist/cli/rescue-keep-local-ignore.test.d.ts.map +0 -1
- package/dist/cli/rescue-keep-local-ignore.test.js +0 -315
- package/dist/cli/rescue-keep-local-ignore.test.js.map +0 -1
- package/dist/cli/rescue-move.test.d.ts +0 -2
- package/dist/cli/rescue-move.test.d.ts.map +0 -1
- package/dist/cli/rescue-move.test.js +0 -166
- package/dist/cli/rescue-move.test.js.map +0 -1
- package/dist/cli/rescue-mtime-preserve.test.d.ts +0 -2
- package/dist/cli/rescue-mtime-preserve.test.d.ts.map +0 -1
- package/dist/cli/rescue-mtime-preserve.test.js +0 -186
- package/dist/cli/rescue-mtime-preserve.test.js.map +0 -1
- package/dist/cli/rescue-preserve-copy-symlink.test.d.ts +0 -2
- package/dist/cli/rescue-preserve-copy-symlink.test.d.ts.map +0 -1
- package/dist/cli/rescue-preserve-copy-symlink.test.js +0 -483
- package/dist/cli/rescue-preserve-copy-symlink.test.js.map +0 -1
- package/dist/cli/rescue-realpath.test.d.ts +0 -2
- package/dist/cli/rescue-realpath.test.d.ts.map +0 -1
- package/dist/cli/rescue-realpath.test.js +0 -109
- package/dist/cli/rescue-realpath.test.js.map +0 -1
- package/dist/cli/rescue-restore-flag.test.d.ts +0 -2
- package/dist/cli/rescue-restore-flag.test.d.ts.map +0 -1
- package/dist/cli/rescue-restore-flag.test.js +0 -82
- package/dist/cli/rescue-restore-flag.test.js.map +0 -1
- package/dist/cli/rescue-rsync-preflight.test.d.ts +0 -2
- package/dist/cli/rescue-rsync-preflight.test.d.ts.map +0 -1
- package/dist/cli/rescue-rsync-preflight.test.js +0 -579
- package/dist/cli/rescue-rsync-preflight.test.js.map +0 -1
- package/dist/cli/rescue-rsync-status.test.d.ts +0 -2
- package/dist/cli/rescue-rsync-status.test.d.ts.map +0 -1
- package/dist/cli/rescue-rsync-status.test.js +0 -406
- package/dist/cli/rescue-rsync-status.test.js.map +0 -1
- package/dist/cli/rescue-settings-reconcile.test.d.ts +0 -2
- package/dist/cli/rescue-settings-reconcile.test.d.ts.map +0 -1
- package/dist/cli/rescue-settings-reconcile.test.js +0 -610
- package/dist/cli/rescue-settings-reconcile.test.js.map +0 -1
- package/dist/cli/rescue-snapshot-copy.test.d.ts +0 -2
- package/dist/cli/rescue-snapshot-copy.test.d.ts.map +0 -1
- package/dist/cli/rescue-snapshot-copy.test.js +0 -790
- package/dist/cli/rescue-snapshot-copy.test.js.map +0 -1
- package/dist/cli/rescue-snapshot-recovery.test.d.ts +0 -2
- package/dist/cli/rescue-snapshot-recovery.test.d.ts.map +0 -1
- package/dist/cli/rescue-snapshot-recovery.test.js +0 -265
- package/dist/cli/rescue-snapshot-recovery.test.js.map +0 -1
- package/dist/cli/rescue-snapshot.test.d.ts +0 -2
- package/dist/cli/rescue-snapshot.test.d.ts.map +0 -1
- package/dist/cli/rescue-snapshot.test.js +0 -46
- package/dist/cli/rescue-snapshot.test.js.map +0 -1
- package/dist/cli/rescue-source-switch-floor.test.d.ts +0 -2
- package/dist/cli/rescue-source-switch-floor.test.d.ts.map +0 -1
- package/dist/cli/rescue-source-switch-floor.test.js +0 -247
- package/dist/cli/rescue-source-switch-floor.test.js.map +0 -1
- package/dist/cli/rescue-unchanged-delete.test.d.ts +0 -2
- package/dist/cli/rescue-unchanged-delete.test.d.ts.map +0 -1
- package/dist/cli/rescue-unchanged-delete.test.js +0 -305
- package/dist/cli/rescue-unchanged-delete.test.js.map +0 -1
- package/dist/cli/rescue.reindex.test.d.ts +0 -2
- package/dist/cli/rescue.reindex.test.d.ts.map +0 -1
- package/dist/cli/rescue.reindex.test.js +0 -72
- package/dist/cli/rescue.reindex.test.js.map +0 -1
- package/dist/cli/rescue.test.d.ts +0 -2
- package/dist/cli/rescue.test.d.ts.map +0 -1
- package/dist/cli/rescue.test.js +0 -127
- package/dist/cli/rescue.test.js.map +0 -1
- package/dist/cli/share-plan-limit-presign.test.d.ts +0 -2
- package/dist/cli/share-plan-limit-presign.test.d.ts.map +0 -1
- package/dist/cli/share-plan-limit-presign.test.js +0 -271
- package/dist/cli/share-plan-limit-presign.test.js.map +0 -1
- package/dist/cli/share-presign-transport.test.d.ts +0 -22
- package/dist/cli/share-presign-transport.test.d.ts.map +0 -1
- package/dist/cli/share-presign-transport.test.js +0 -388
- package/dist/cli/share-presign-transport.test.js.map +0 -1
- package/dist/cli/share.test.d.ts +0 -5
- package/dist/cli/share.test.d.ts.map +0 -1
- package/dist/cli/share.test.js +0 -12335
- package/dist/cli/share.test.js.map +0 -1
- package/dist/cli/streaming-pull-planner.bench.test.d.ts +0 -15
- package/dist/cli/streaming-pull-planner.bench.test.d.ts.map +0 -1
- package/dist/cli/streaming-pull-planner.bench.test.js +0 -273
- package/dist/cli/streaming-pull-planner.bench.test.js.map +0 -1
- package/dist/cli/sync-scope.test.d.ts +0 -22
- package/dist/cli/sync-scope.test.d.ts.map +0 -1
- package/dist/cli/sync-scope.test.js +0 -903
- package/dist/cli/sync-scope.test.js.map +0 -1
- package/dist/cli/sync.test.d.ts +0 -5
- package/dist/cli/sync.test.d.ts.map +0 -1
- package/dist/cli/sync.test.js +0 -9028
- package/dist/cli/sync.test.js.map +0 -1
- package/dist/cli/tombstones.test.d.ts +0 -2
- package/dist/cli/tombstones.test.d.ts.map +0 -1
- package/dist/cli/tombstones.test.js +0 -120
- package/dist/cli/tombstones.test.js.map +0 -1
- package/dist/cli/watch-event-push-conflict.test.d.ts +0 -25
- package/dist/cli/watch-event-push-conflict.test.d.ts.map +0 -1
- package/dist/cli/watch-event-push-conflict.test.js +0 -230
- package/dist/cli/watch-event-push-conflict.test.js.map +0 -1
- package/dist/client-info.test.d.ts +0 -11
- package/dist/client-info.test.d.ts.map +0 -1
- package/dist/client-info.test.js +0 -168
- package/dist/client-info.test.js.map +0 -1
- package/dist/cognito-auth-lock-no-hard-links.test.d.ts +0 -11
- package/dist/cognito-auth-lock-no-hard-links.test.d.ts.map +0 -1
- package/dist/cognito-auth-lock-no-hard-links.test.js +0 -76
- package/dist/cognito-auth-lock-no-hard-links.test.js.map +0 -1
- package/dist/cognito-auth.test.d.ts +0 -9
- package/dist/cognito-auth.test.d.ts.map +0 -1
- package/dist/cognito-auth.test.js +0 -745
- package/dist/cognito-auth.test.js.map +0 -1
- package/dist/company-resolver.test.d.ts +0 -7
- package/dist/company-resolver.test.d.ts.map +0 -1
- package/dist/company-resolver.test.js +0 -533
- package/dist/company-resolver.test.js.map +0 -1
- package/dist/company-slug.test.d.ts +0 -7
- package/dist/company-slug.test.d.ts.map +0 -1
- package/dist/company-slug.test.js +0 -43
- package/dist/company-slug.test.js.map +0 -1
- package/dist/company-vault-transport.test.d.ts +0 -12
- package/dist/company-vault-transport.test.d.ts.map +0 -1
- package/dist/company-vault-transport.test.js +0 -97
- package/dist/company-vault-transport.test.js.map +0 -1
- package/dist/context.test.d.ts +0 -7
- package/dist/context.test.d.ts.map +0 -1
- package/dist/context.test.js +0 -646
- package/dist/context.test.js.map +0 -1
- package/dist/entity-resolver.test.d.ts +0 -10
- package/dist/entity-resolver.test.d.ts.map +0 -1
- package/dist/entity-resolver.test.js +0 -244
- package/dist/entity-resolver.test.js.map +0 -1
- package/dist/getindigo-dead-refs-contract.test.d.ts +0 -2
- package/dist/getindigo-dead-refs-contract.test.d.ts.map +0 -1
- package/dist/getindigo-dead-refs-contract.test.js +0 -58
- package/dist/getindigo-dead-refs-contract.test.js.map +0 -1
- package/dist/hermetic-test-env.test.d.ts +0 -2
- package/dist/hermetic-test-env.test.d.ts.map +0 -1
- package/dist/hermetic-test-env.test.js +0 -61
- package/dist/hermetic-test-env.test.js.map +0 -1
- package/dist/hq-root-recovery.test.d.ts +0 -2
- package/dist/hq-root-recovery.test.d.ts.map +0 -1
- package/dist/hq-root-recovery.test.js +0 -65
- package/dist/hq-root-recovery.test.js.map +0 -1
- package/dist/ignore.test.d.ts +0 -10
- package/dist/ignore.test.d.ts.map +0 -1
- package/dist/ignore.test.js +0 -926
- package/dist/ignore.test.js.map +0 -1
- package/dist/index.test.d.ts +0 -2
- package/dist/index.test.d.ts.map +0 -1
- package/dist/index.test.js +0 -26
- package/dist/index.test.js.map +0 -1
- package/dist/journal-area-ledger-read-boundary.test.d.ts +0 -2
- package/dist/journal-area-ledger-read-boundary.test.d.ts.map +0 -1
- package/dist/journal-area-ledger-read-boundary.test.js +0 -420
- package/dist/journal-area-ledger-read-boundary.test.js.map +0 -1
- package/dist/journal-baseline.test.d.ts +0 -2
- package/dist/journal-baseline.test.d.ts.map +0 -1
- package/dist/journal-baseline.test.js +0 -218
- package/dist/journal-baseline.test.js.map +0 -1
- package/dist/journal-decode-window.test.d.ts +0 -2
- package/dist/journal-decode-window.test.d.ts.map +0 -1
- package/dist/journal-decode-window.test.js +0 -99
- package/dist/journal-decode-window.test.js.map +0 -1
- package/dist/journal-delta-writes.test.d.ts +0 -2
- package/dist/journal-delta-writes.test.d.ts.map +0 -1
- package/dist/journal-delta-writes.test.js +0 -159
- package/dist/journal-delta-writes.test.js.map +0 -1
- package/dist/journal-ledger-index.test.d.ts +0 -15
- package/dist/journal-ledger-index.test.d.ts.map +0 -1
- package/dist/journal-ledger-index.test.js +0 -269
- package/dist/journal-ledger-index.test.js.map +0 -1
- package/dist/journal-public-boundary.test.d.ts +0 -2
- package/dist/journal-public-boundary.test.d.ts.map +0 -1
- package/dist/journal-public-boundary.test.js +0 -216
- package/dist/journal-public-boundary.test.js.map +0 -1
- package/dist/journal-row-store.test.d.ts +0 -2
- package/dist/journal-row-store.test.d.ts.map +0 -1
- package/dist/journal-row-store.test.js +0 -729
- package/dist/journal-row-store.test.js.map +0 -1
- package/dist/journal-snapshot-memory-helpers.d.ts +0 -33
- package/dist/journal-snapshot-memory-helpers.d.ts.map +0 -1
- package/dist/journal-snapshot-memory-helpers.js +0 -212
- package/dist/journal-snapshot-memory-helpers.js.map +0 -1
- package/dist/journal-snapshot-memory.test.d.ts +0 -2
- package/dist/journal-snapshot-memory.test.d.ts.map +0 -1
- package/dist/journal-snapshot-memory.test.js +0 -47
- package/dist/journal-snapshot-memory.test.js.map +0 -1
- package/dist/journal-snapshot-v4-memory.test.d.ts +0 -2
- package/dist/journal-snapshot-v4-memory.test.d.ts.map +0 -1
- package/dist/journal-snapshot-v4-memory.test.js +0 -24
- package/dist/journal-snapshot-v4-memory.test.js.map +0 -1
- package/dist/journal-snapshot-v4-writer-memory.test.d.ts +0 -2
- package/dist/journal-snapshot-v4-writer-memory.test.d.ts.map +0 -1
- package/dist/journal-snapshot-v4-writer-memory.test.js +0 -76
- package/dist/journal-snapshot-v4-writer-memory.test.js.map +0 -1
- package/dist/journal-snapshot-v4-writer.test.d.ts +0 -2
- package/dist/journal-snapshot-v4-writer.test.d.ts.map +0 -1
- package/dist/journal-snapshot-v4-writer.test.js +0 -282
- package/dist/journal-snapshot-v4-writer.test.js.map +0 -1
- package/dist/journal-snapshot-v4.test.d.ts +0 -2
- package/dist/journal-snapshot-v4.test.d.ts.map +0 -1
- package/dist/journal-snapshot-v4.test.js +0 -281
- package/dist/journal-snapshot-v4.test.js.map +0 -1
- package/dist/journal-store.test.d.ts +0 -2
- package/dist/journal-store.test.d.ts.map +0 -1
- package/dist/journal-store.test.js +0 -1227
- package/dist/journal-store.test.js.map +0 -1
- package/dist/journal-streaming.heap.test.d.ts +0 -2
- package/dist/journal-streaming.heap.test.d.ts.map +0 -1
- package/dist/journal-streaming.heap.test.js +0 -190
- package/dist/journal-streaming.heap.test.js.map +0 -1
- package/dist/journal.test.d.ts +0 -9
- package/dist/journal.test.d.ts.map +0 -1
- package/dist/journal.test.js +0 -1074
- package/dist/journal.test.js.map +0 -1
- package/dist/kms10-etag-safe-pull.test.d.ts +0 -2
- package/dist/kms10-etag-safe-pull.test.d.ts.map +0 -1
- package/dist/kms10-etag-safe-pull.test.js +0 -53
- package/dist/kms10-etag-safe-pull.test.js.map +0 -1
- package/dist/lib/cloud-authoritative.test.d.ts +0 -2
- package/dist/lib/cloud-authoritative.test.d.ts.map +0 -1
- package/dist/lib/cloud-authoritative.test.js +0 -42
- package/dist/lib/cloud-authoritative.test.js.map +0 -1
- package/dist/lib/conflict-reconcile.test.d.ts +0 -7
- package/dist/lib/conflict-reconcile.test.d.ts.map +0 -1
- package/dist/lib/conflict-reconcile.test.js +0 -246
- package/dist/lib/conflict-reconcile.test.js.map +0 -1
- package/dist/lib/conflict.test.d.ts +0 -9
- package/dist/lib/conflict.test.d.ts.map +0 -1
- package/dist/lib/conflict.test.js +0 -340
- package/dist/lib/conflict.test.js.map +0 -1
- package/dist/lib/describe-error.test.d.ts +0 -2
- package/dist/lib/describe-error.test.d.ts.map +0 -1
- package/dist/lib/describe-error.test.js +0 -148
- package/dist/lib/describe-error.test.js.map +0 -1
- package/dist/lib/machine-id.test.d.ts +0 -8
- package/dist/lib/machine-id.test.d.ts.map +0 -1
- package/dist/lib/machine-id.test.js +0 -228
- package/dist/lib/machine-id.test.js.map +0 -1
- package/dist/lib/net-errors.test.d.ts +0 -2
- package/dist/lib/net-errors.test.d.ts.map +0 -1
- package/dist/lib/net-errors.test.js +0 -111
- package/dist/lib/net-errors.test.js.map +0 -1
- package/dist/lib/ontology-entity-meta.test.d.ts +0 -2
- package/dist/lib/ontology-entity-meta.test.d.ts.map +0 -1
- package/dist/lib/ontology-entity-meta.test.js +0 -79
- package/dist/lib/ontology-entity-meta.test.js.map +0 -1
- package/dist/lib/ontology-entity-push.test.d.ts +0 -2
- package/dist/lib/ontology-entity-push.test.d.ts.map +0 -1
- package/dist/lib/ontology-entity-push.test.js +0 -156
- package/dist/lib/ontology-entity-push.test.js.map +0 -1
- package/dist/lib/personal-connector-settings-sync.test.d.ts +0 -2
- package/dist/lib/personal-connector-settings-sync.test.d.ts.map +0 -1
- package/dist/lib/personal-connector-settings-sync.test.js +0 -34
- package/dist/lib/personal-connector-settings-sync.test.js.map +0 -1
- package/dist/lib/readlink-safe.test.d.ts +0 -2
- package/dist/lib/readlink-safe.test.d.ts.map +0 -1
- package/dist/lib/readlink-safe.test.js +0 -34
- package/dist/lib/readlink-safe.test.js.map +0 -1
- package/dist/lib/s3-content-checksum.test.d.ts +0 -2
- package/dist/lib/s3-content-checksum.test.d.ts.map +0 -1
- package/dist/lib/s3-content-checksum.test.js +0 -26
- package/dist/lib/s3-content-checksum.test.js.map +0 -1
- package/dist/lib/skill-register-landed-bytes.test.d.ts +0 -2
- package/dist/lib/skill-register-landed-bytes.test.d.ts.map +0 -1
- package/dist/lib/skill-register-landed-bytes.test.js +0 -83
- package/dist/lib/skill-register-landed-bytes.test.js.map +0 -1
- package/dist/local-path-codec.test.d.ts +0 -14
- package/dist/local-path-codec.test.d.ts.map +0 -1
- package/dist/local-path-codec.test.js +0 -122
- package/dist/local-path-codec.test.js.map +0 -1
- package/dist/machine-auth.test.d.ts +0 -14
- package/dist/machine-auth.test.d.ts.map +0 -1
- package/dist/machine-auth.test.js +0 -1482
- package/dist/machine-auth.test.js.map +0 -1
- package/dist/machine-token-cache-isolation.test.d.ts +0 -24
- package/dist/machine-token-cache-isolation.test.d.ts.map +0 -1
- package/dist/machine-token-cache-isolation.test.js +0 -284
- package/dist/machine-token-cache-isolation.test.js.map +0 -1
- package/dist/manifest/US-002.acceptance.test.d.ts +0 -11
- package/dist/manifest/US-002.acceptance.test.d.ts.map +0 -1
- package/dist/manifest/US-002.acceptance.test.js +0 -160
- package/dist/manifest/US-002.acceptance.test.js.map +0 -1
- package/dist/manifest/US-004.acceptance.test.d.ts +0 -12
- package/dist/manifest/US-004.acceptance.test.d.ts.map +0 -1
- package/dist/manifest/US-004.acceptance.test.js +0 -173
- package/dist/manifest/US-004.acceptance.test.js.map +0 -1
- package/dist/manifest/build-manifest-resident-parity.test.d.ts +0 -2
- package/dist/manifest/build-manifest-resident-parity.test.d.ts.map +0 -1
- package/dist/manifest/build-manifest-resident-parity.test.js +0 -69
- package/dist/manifest/build-manifest-resident-parity.test.js.map +0 -1
- package/dist/manifest/build-manifest.bench.test.d.ts +0 -22
- package/dist/manifest/build-manifest.bench.test.d.ts.map +0 -1
- package/dist/manifest/build-manifest.bench.test.js +0 -930
- package/dist/manifest/build-manifest.bench.test.js.map +0 -1
- package/dist/manifest/build-manifest.test.d.ts +0 -10
- package/dist/manifest/build-manifest.test.d.ts.map +0 -1
- package/dist/manifest/build-manifest.test.js +0 -1217
- package/dist/manifest/build-manifest.test.js.map +0 -1
- package/dist/manifest/contract.test.d.ts +0 -17
- package/dist/manifest/contract.test.d.ts.map +0 -1
- package/dist/manifest/contract.test.js +0 -346
- package/dist/manifest/contract.test.js.map +0 -1
- package/dist/manifest/import-graph.test.d.ts +0 -25
- package/dist/manifest/import-graph.test.d.ts.map +0 -1
- package/dist/manifest/import-graph.test.js +0 -120
- package/dist/manifest/import-graph.test.js.map +0 -1
- package/dist/manifest/ledger-shard-isolation.test.d.ts +0 -18
- package/dist/manifest/ledger-shard-isolation.test.d.ts.map +0 -1
- package/dist/manifest/ledger-shard-isolation.test.js +0 -153
- package/dist/manifest/ledger-shard-isolation.test.js.map +0 -1
- package/dist/manifest/snapshot-store.test.d.ts +0 -11
- package/dist/manifest/snapshot-store.test.d.ts.map +0 -1
- package/dist/manifest/snapshot-store.test.js +0 -206
- package/dist/manifest/snapshot-store.test.js.map +0 -1
- package/dist/manifest/upload-manifest.test.d.ts +0 -10
- package/dist/manifest/upload-manifest.test.d.ts.map +0 -1
- package/dist/manifest/upload-manifest.test.js +0 -1335
- package/dist/manifest/upload-manifest.test.js.map +0 -1
- package/dist/manifest-reconcile.test.d.ts +0 -2
- package/dist/manifest-reconcile.test.d.ts.map +0 -1
- package/dist/manifest-reconcile.test.js +0 -1029
- package/dist/manifest-reconcile.test.js.map +0 -1
- package/dist/object-io.test.d.ts +0 -11
- package/dist/object-io.test.d.ts.map +0 -1
- package/dist/object-io.test.js +0 -2376
- package/dist/object-io.test.js.map +0 -1
- package/dist/operation-lock.test.d.ts +0 -5
- package/dist/operation-lock.test.d.ts.map +0 -1
- package/dist/operation-lock.test.js +0 -796
- package/dist/operation-lock.test.js.map +0 -1
- package/dist/outcome-telemetry.test.d.ts +0 -9
- package/dist/outcome-telemetry.test.d.ts.map +0 -1
- package/dist/outcome-telemetry.test.js +0 -663
- package/dist/outcome-telemetry.test.js.map +0 -1
- package/dist/outposts/client.test.d.ts +0 -9
- package/dist/outposts/client.test.d.ts.map +0 -1
- package/dist/outposts/client.test.js +0 -415
- package/dist/outposts/client.test.js.map +0 -1
- package/dist/outposts/command.test.d.ts +0 -18
- package/dist/outposts/command.test.d.ts.map +0 -1
- package/dist/outposts/command.test.js +0 -1230
- package/dist/outposts/command.test.js.map +0 -1
- package/dist/outposts/replica-sync.test.d.ts +0 -2
- package/dist/outposts/replica-sync.test.d.ts.map +0 -1
- package/dist/outposts/replica-sync.test.js +0 -224
- package/dist/outposts/replica-sync.test.js.map +0 -1
- package/dist/outposts/self-deploy.test.d.ts +0 -2
- package/dist/outposts/self-deploy.test.d.ts.map +0 -1
- package/dist/outposts/self-deploy.test.js +0 -218
- package/dist/outposts/self-deploy.test.js.map +0 -1
- package/dist/outposts/session-heartbeat-bounds.test.d.ts +0 -25
- package/dist/outposts/session-heartbeat-bounds.test.d.ts.map +0 -1
- package/dist/outposts/session-heartbeat-bounds.test.js +0 -156
- package/dist/outposts/session-heartbeat-bounds.test.js.map +0 -1
- package/dist/outposts/session-heartbeat-guard.test.d.ts +0 -16
- package/dist/outposts/session-heartbeat-guard.test.d.ts.map +0 -1
- package/dist/outposts/session-heartbeat-guard.test.js +0 -88
- package/dist/outposts/session-heartbeat-guard.test.js.map +0 -1
- package/dist/outposts/session-heartbeat-publisher.test.d.ts +0 -10
- package/dist/outposts/session-heartbeat-publisher.test.d.ts.map +0 -1
- package/dist/outposts/session-heartbeat-publisher.test.js +0 -153
- package/dist/outposts/session-heartbeat-publisher.test.js.map +0 -1
- package/dist/outposts/session-heartbeat-retain-guard.test.d.ts +0 -18
- package/dist/outposts/session-heartbeat-retain-guard.test.d.ts.map +0 -1
- package/dist/outposts/session-heartbeat-retain-guard.test.js +0 -106
- package/dist/outposts/session-heartbeat-retain-guard.test.js.map +0 -1
- package/dist/outposts/session-heartbeat-scan.test.d.ts +0 -20
- package/dist/outposts/session-heartbeat-scan.test.d.ts.map +0 -1
- package/dist/outposts/session-heartbeat-scan.test.js +0 -241
- package/dist/outposts/session-heartbeat-scan.test.js.map +0 -1
- package/dist/outposts/session-heartbeat.test.d.ts +0 -11
- package/dist/outposts/session-heartbeat.test.d.ts.map +0 -1
- package/dist/outposts/session-heartbeat.test.js +0 -370
- package/dist/outposts/session-heartbeat.test.js.map +0 -1
- package/dist/outposts/session-host-auth.test.d.ts +0 -16
- package/dist/outposts/session-host-auth.test.d.ts.map +0 -1
- package/dist/outposts/session-host-auth.test.js +0 -284
- package/dist/outposts/session-host-auth.test.js.map +0 -1
- package/dist/outposts/session-host-command.test.d.ts +0 -10
- package/dist/outposts/session-host-command.test.d.ts.map +0 -1
- package/dist/outposts/session-host-command.test.js +0 -180
- package/dist/outposts/session-host-command.test.js.map +0 -1
- package/dist/outposts/session-host-connection.test.d.ts +0 -18
- package/dist/outposts/session-host-connection.test.d.ts.map +0 -1
- package/dist/outposts/session-host-connection.test.js +0 -392
- package/dist/outposts/session-host-connection.test.js.map +0 -1
- package/dist/outposts/session-host-fakes.d.ts +0 -61
- package/dist/outposts/session-host-fakes.d.ts.map +0 -1
- package/dist/outposts/session-host-fakes.js +0 -115
- package/dist/outposts/session-host-fakes.js.map +0 -1
- package/dist/outposts/session-host-ndjson.test.d.ts +0 -11
- package/dist/outposts/session-host-ndjson.test.d.ts.map +0 -1
- package/dist/outposts/session-host-ndjson.test.js +0 -73
- package/dist/outposts/session-host-ndjson.test.js.map +0 -1
- package/dist/outposts/session-host-protocol.test.d.ts +0 -15
- package/dist/outposts/session-host-protocol.test.d.ts.map +0 -1
- package/dist/outposts/session-host-protocol.test.js +0 -0
- package/dist/outposts/session-host-protocol.test.js.map +0 -1
- package/dist/outposts/session-host-server.test.d.ts +0 -10
- package/dist/outposts/session-host-server.test.d.ts.map +0 -1
- package/dist/outposts/session-host-server.test.js +0 -118
- package/dist/outposts/session-host-server.test.js.map +0 -1
- package/dist/outposts/session-host-sessions.test.d.ts +0 -18
- package/dist/outposts/session-host-sessions.test.d.ts.map +0 -1
- package/dist/outposts/session-host-sessions.test.js +0 -439
- package/dist/outposts/session-host-sessions.test.js.map +0 -1
- package/dist/outposts/terminal.test.d.ts +0 -2
- package/dist/outposts/terminal.test.d.ts.map +0 -1
- package/dist/outposts/terminal.test.js +0 -146
- package/dist/outposts/terminal.test.js.map +0 -1
- package/dist/outposts/transport.test.d.ts +0 -10
- package/dist/outposts/transport.test.d.ts.map +0 -1
- package/dist/outposts/transport.test.js +0 -205
- package/dist/outposts/transport.test.js.map +0 -1
- package/dist/packed-journal-phase2.test.d.ts +0 -2
- package/dist/packed-journal-phase2.test.d.ts.map +0 -1
- package/dist/packed-journal-phase2.test.js +0 -273
- package/dist/packed-journal-phase2.test.js.map +0 -1
- package/dist/path-ancestors.test.d.ts +0 -2
- package/dist/path-ancestors.test.d.ts.map +0 -1
- package/dist/path-ancestors.test.js +0 -21
- package/dist/path-ancestors.test.js.map +0 -1
- package/dist/personal-vault-exclusions.test.d.ts +0 -22
- package/dist/personal-vault-exclusions.test.d.ts.map +0 -1
- package/dist/personal-vault-exclusions.test.js +0 -294
- package/dist/personal-vault-exclusions.test.js.map +0 -1
- package/dist/personal-vault.test.d.ts +0 -18
- package/dist/personal-vault.test.d.ts.map +0 -1
- package/dist/personal-vault.test.js +0 -1099
- package/dist/personal-vault.test.js.map +0 -1
- package/dist/plan-limit-pause.test.d.ts +0 -2
- package/dist/plan-limit-pause.test.d.ts.map +0 -1
- package/dist/plan-limit-pause.test.js +0 -150
- package/dist/plan-limit-pause.test.js.map +0 -1
- package/dist/plan-limit.fixtures.d.ts +0 -34
- package/dist/plan-limit.fixtures.d.ts.map +0 -1
- package/dist/plan-limit.fixtures.js +0 -96
- package/dist/plan-limit.fixtures.js.map +0 -1
- package/dist/plan-limit.test.d.ts +0 -2
- package/dist/plan-limit.test.d.ts.map +0 -1
- package/dist/plan-limit.test.js +0 -132
- package/dist/plan-limit.test.js.map +0 -1
- package/dist/prefix-coalesce.test.d.ts +0 -2
- package/dist/prefix-coalesce.test.d.ts.map +0 -1
- package/dist/prefix-coalesce.test.js +0 -260
- package/dist/prefix-coalesce.test.js.map +0 -1
- package/dist/private-folder-transport.test.d.ts +0 -2
- package/dist/private-folder-transport.test.d.ts.map +0 -1
- package/dist/private-folder-transport.test.js +0 -33
- package/dist/private-folder-transport.test.js.map +0 -1
- package/dist/public-surface.test.d.ts +0 -15
- package/dist/public-surface.test.d.ts.map +0 -1
- package/dist/public-surface.test.js +0 -110
- package/dist/public-surface.test.js.map +0 -1
- package/dist/qmd-reindex.test.d.ts +0 -14
- package/dist/qmd-reindex.test.d.ts.map +0 -1
- package/dist/qmd-reindex.test.js +0 -899
- package/dist/qmd-reindex.test.js.map +0 -1
- package/dist/read-only-state-dir.test.d.ts +0 -27
- package/dist/read-only-state-dir.test.d.ts.map +0 -1
- package/dist/read-only-state-dir.test.js +0 -167
- package/dist/read-only-state-dir.test.js.map +0 -1
- package/dist/remote-pull.test.d.ts +0 -2
- package/dist/remote-pull.test.d.ts.map +0 -1
- package/dist/remote-pull.test.js +0 -1147
- package/dist/remote-pull.test.js.map +0 -1
- package/dist/s3-download-stream-hash.test.d.ts +0 -2
- package/dist/s3-download-stream-hash.test.d.ts.map +0 -1
- package/dist/s3-download-stream-hash.test.js +0 -70
- package/dist/s3-download-stream-hash.test.js.map +0 -1
- package/dist/s3.list-cost.test.d.ts +0 -2
- package/dist/s3.list-cost.test.d.ts.map +0 -1
- package/dist/s3.list-cost.test.js +0 -51
- package/dist/s3.list-cost.test.js.map +0 -1
- package/dist/s3.rename-retry.test.d.ts +0 -2
- package/dist/s3.rename-retry.test.d.ts.map +0 -1
- package/dist/s3.rename-retry.test.js +0 -217
- package/dist/s3.rename-retry.test.js.map +0 -1
- package/dist/s3.symlink-materialize.test.d.ts +0 -18
- package/dist/s3.symlink-materialize.test.d.ts.map +0 -1
- package/dist/s3.symlink-materialize.test.js +0 -579
- package/dist/s3.symlink-materialize.test.js.map +0 -1
- package/dist/s3.test.d.ts +0 -9
- package/dist/s3.test.d.ts.map +0 -1
- package/dist/s3.test.js +0 -2047
- package/dist/s3.test.js.map +0 -1
- package/dist/s3.windows-portability.test.d.ts +0 -12
- package/dist/s3.windows-portability.test.d.ts.map +0 -1
- package/dist/s3.windows-portability.test.js +0 -223
- package/dist/s3.windows-portability.test.js.map +0 -1
- package/dist/schemas/signal-types.test.d.ts +0 -2
- package/dist/schemas/signal-types.test.d.ts.map +0 -1
- package/dist/schemas/signal-types.test.js +0 -65
- package/dist/schemas/signal-types.test.js.map +0 -1
- package/dist/schemas/source-channels.test.d.ts +0 -2
- package/dist/schemas/source-channels.test.d.ts.map +0 -1
- package/dist/schemas/source-channels.test.js +0 -65
- package/dist/schemas/source-channels.test.js.map +0 -1
- package/dist/scope-shrink.test.d.ts +0 -13
- package/dist/scope-shrink.test.d.ts.map +0 -1
- package/dist/scope-shrink.test.js +0 -558
- package/dist/scope-shrink.test.js.map +0 -1
- package/dist/session-log-capture.test.d.ts +0 -2
- package/dist/session-log-capture.test.d.ts.map +0 -1
- package/dist/session-log-capture.test.js +0 -533
- package/dist/session-log-capture.test.js.map +0 -1
- package/dist/session-log-retention.test.d.ts +0 -2
- package/dist/session-log-retention.test.d.ts.map +0 -1
- package/dist/session-log-retention.test.js +0 -383
- package/dist/session-log-retention.test.js.map +0 -1
- package/dist/signals/get.test.d.ts +0 -5
- package/dist/signals/get.test.d.ts.map +0 -1
- package/dist/signals/get.test.js +0 -254
- package/dist/signals/get.test.js.map +0 -1
- package/dist/signals/list.test.d.ts +0 -9
- package/dist/signals/list.test.d.ts.map +0 -1
- package/dist/signals/list.test.js +0 -330
- package/dist/signals/list.test.js.map +0 -1
- package/dist/skill-telemetry.test.d.ts +0 -2
- package/dist/skill-telemetry.test.d.ts.map +0 -1
- package/dist/skill-telemetry.test.js +0 -1484
- package/dist/skill-telemetry.test.js.map +0 -1
- package/dist/sources/get.test.d.ts +0 -5
- package/dist/sources/get.test.d.ts.map +0 -1
- package/dist/sources/get.test.js +0 -236
- package/dist/sources/get.test.js.map +0 -1
- package/dist/sources/list.test.d.ts +0 -8
- package/dist/sources/list.test.d.ts.map +0 -1
- package/dist/sources/list.test.js +0 -318
- package/dist/sources/list.test.js.map +0 -1
- package/dist/sts-credential-refresh.test.d.ts +0 -2
- package/dist/sts-credential-refresh.test.d.ts.map +0 -1
- package/dist/sts-credential-refresh.test.js +0 -181
- package/dist/sts-credential-refresh.test.js.map +0 -1
- package/dist/swallowed-error-sites.test.d.ts +0 -2
- package/dist/swallowed-error-sites.test.d.ts.map +0 -1
- package/dist/swallowed-error-sites.test.js +0 -199
- package/dist/swallowed-error-sites.test.js.map +0 -1
- package/dist/swallowed-error-w32.test.d.ts +0 -2
- package/dist/swallowed-error-w32.test.d.ts.map +0 -1
- package/dist/swallowed-error-w32.test.js +0 -171
- package/dist/swallowed-error-w32.test.js.map +0 -1
- package/dist/swallowed-error-w33.test.d.ts +0 -2
- package/dist/swallowed-error-w33.test.d.ts.map +0 -1
- package/dist/swallowed-error-w33.test.js +0 -125
- package/dist/swallowed-error-w33.test.js.map +0 -1
- package/dist/swallowed-error-w34.test.d.ts +0 -2
- package/dist/swallowed-error-w34.test.d.ts.map +0 -1
- package/dist/swallowed-error-w34.test.js +0 -110
- package/dist/swallowed-error-w34.test.js.map +0 -1
- package/dist/swallowed-error-w35.test.d.ts +0 -2
- package/dist/swallowed-error-w35.test.d.ts.map +0 -1
- package/dist/swallowed-error-w35.test.js +0 -223
- package/dist/swallowed-error-w35.test.js.map +0 -1
- package/dist/sync/area-ledger-auto-migration.test.d.ts +0 -2
- package/dist/sync/area-ledger-auto-migration.test.d.ts.map +0 -1
- package/dist/sync/area-ledger-auto-migration.test.js +0 -291
- package/dist/sync/area-ledger-auto-migration.test.js.map +0 -1
- package/dist/sync/area-ledger-migration.test.d.ts +0 -2
- package/dist/sync/area-ledger-migration.test.d.ts.map +0 -1
- package/dist/sync/area-ledger-migration.test.js +0 -554
- package/dist/sync/area-ledger-migration.test.js.map +0 -1
- package/dist/sync/area-ledger-recovery.bench.test.d.ts +0 -2
- package/dist/sync/area-ledger-recovery.bench.test.d.ts.map +0 -1
- package/dist/sync/area-ledger-recovery.bench.test.js +0 -60
- package/dist/sync/area-ledger-recovery.bench.test.js.map +0 -1
- package/dist/sync/area-ledger-writer-lock.bench.test.d.ts +0 -2
- package/dist/sync/area-ledger-writer-lock.bench.test.d.ts.map +0 -1
- package/dist/sync/area-ledger-writer-lock.bench.test.js +0 -57
- package/dist/sync/area-ledger-writer-lock.bench.test.js.map +0 -1
- package/dist/sync/area-ledger.test.d.ts +0 -2
- package/dist/sync/area-ledger.test.d.ts.map +0 -1
- package/dist/sync/area-ledger.test.js +0 -1401
- package/dist/sync/area-ledger.test.js.map +0 -1
- package/dist/sync/area-resolver.test.d.ts +0 -2
- package/dist/sync/area-resolver.test.d.ts.map +0 -1
- package/dist/sync/area-resolver.test.js +0 -234
- package/dist/sync/area-resolver.test.js.map +0 -1
- package/dist/sync/base-version-resolver.test.d.ts +0 -2
- package/dist/sync/base-version-resolver.test.d.ts.map +0 -1
- package/dist/sync/base-version-resolver.test.js +0 -24
- package/dist/sync/base-version-resolver.test.js.map +0 -1
- package/dist/sync/candidate-uploader.test.d.ts +0 -2
- package/dist/sync/candidate-uploader.test.d.ts.map +0 -1
- package/dist/sync/candidate-uploader.test.js +0 -132
- package/dist/sync/candidate-uploader.test.js.map +0 -1
- package/dist/sync/child-process-sync-worker-env.test.d.ts +0 -2
- package/dist/sync/child-process-sync-worker-env.test.d.ts.map +0 -1
- package/dist/sync/child-process-sync-worker-env.test.js +0 -38
- package/dist/sync/child-process-sync-worker-env.test.js.map +0 -1
- package/dist/sync/child-process-sync-worker-errors.test.d.ts +0 -2
- package/dist/sync/child-process-sync-worker-errors.test.d.ts.map +0 -1
- package/dist/sync/child-process-sync-worker-errors.test.js +0 -121
- package/dist/sync/child-process-sync-worker-errors.test.js.map +0 -1
- package/dist/sync/child-process-sync-worker.test.d.ts +0 -2
- package/dist/sync/child-process-sync-worker.test.d.ts.map +0 -1
- package/dist/sync/child-process-sync-worker.test.js +0 -262
- package/dist/sync/child-process-sync-worker.test.js.map +0 -1
- package/dist/sync/content-hash.test.d.ts +0 -2
- package/dist/sync/content-hash.test.d.ts.map +0 -1
- package/dist/sync/content-hash.test.js +0 -16
- package/dist/sync/content-hash.test.js.map +0 -1
- package/dist/sync/delta-client.test.d.ts +0 -2
- package/dist/sync/delta-client.test.d.ts.map +0 -1
- package/dist/sync/delta-client.test.js +0 -97
- package/dist/sync/delta-client.test.js.map +0 -1
- package/dist/sync/durable-apply.test.d.ts +0 -2
- package/dist/sync/durable-apply.test.d.ts.map +0 -1
- package/dist/sync/durable-apply.test.js +0 -180
- package/dist/sync/durable-apply.test.js.map +0 -1
- package/dist/sync/event-sync.test.d.ts +0 -14
- package/dist/sync/event-sync.test.d.ts.map +0 -1
- package/dist/sync/event-sync.test.js +0 -1714
- package/dist/sync/event-sync.test.js.map +0 -1
- package/dist/sync/feature-flags.test.d.ts +0 -24
- package/dist/sync/feature-flags.test.d.ts.map +0 -1
- package/dist/sync/feature-flags.test.js +0 -594
- package/dist/sync/feature-flags.test.js.map +0 -1
- package/dist/sync/full-pass-cap-governor.bench.test.d.ts +0 -2
- package/dist/sync/full-pass-cap-governor.bench.test.d.ts.map +0 -1
- package/dist/sync/full-pass-cap-governor.bench.test.js +0 -179
- package/dist/sync/full-pass-cap-governor.bench.test.js.map +0 -1
- package/dist/sync/full-pass-caps.test.d.ts +0 -2
- package/dist/sync/full-pass-caps.test.d.ts.map +0 -1
- package/dist/sync/full-pass-caps.test.js +0 -550
- package/dist/sync/full-pass-caps.test.js.map +0 -1
- package/dist/sync/idle-full-reconcile.test.d.ts +0 -2
- package/dist/sync/idle-full-reconcile.test.d.ts.map +0 -1
- package/dist/sync/idle-full-reconcile.test.js +0 -62
- package/dist/sync/idle-full-reconcile.test.js.map +0 -1
- package/dist/sync/inbound-event-admission.test.d.ts +0 -2
- package/dist/sync/inbound-event-admission.test.d.ts.map +0 -1
- package/dist/sync/inbound-event-admission.test.js +0 -125
- package/dist/sync/inbound-event-admission.test.js.map +0 -1
- package/dist/sync/journal-ledger-stream.test.d.ts +0 -12
- package/dist/sync/journal-ledger-stream.test.d.ts.map +0 -1
- package/dist/sync/journal-ledger-stream.test.js +0 -134
- package/dist/sync/journal-ledger-stream.test.js.map +0 -1
- package/dist/sync/lease-client.test.d.ts +0 -2
- package/dist/sync/lease-client.test.d.ts.map +0 -1
- package/dist/sync/lease-client.test.js +0 -119
- package/dist/sync/lease-client.test.js.map +0 -1
- package/dist/sync/logger.test.d.ts +0 -19
- package/dist/sync/logger.test.d.ts.map +0 -1
- package/dist/sync/logger.test.js +0 -204
- package/dist/sync/logger.test.js.map +0 -1
- package/dist/sync/metrics.test.d.ts +0 -19
- package/dist/sync/metrics.test.d.ts.map +0 -1
- package/dist/sync/metrics.test.js +0 -357
- package/dist/sync/metrics.test.js.map +0 -1
- package/dist/sync/multipart-uploader.test.d.ts +0 -2
- package/dist/sync/multipart-uploader.test.d.ts.map +0 -1
- package/dist/sync/multipart-uploader.test.js +0 -135
- package/dist/sync/multipart-uploader.test.js.map +0 -1
- package/dist/sync/mutation-client.test.d.ts +0 -2
- package/dist/sync/mutation-client.test.d.ts.map +0 -1
- package/dist/sync/mutation-client.test.js +0 -100
- package/dist/sync/mutation-client.test.js.map +0 -1
- package/dist/sync/mutation-session.test.d.ts +0 -2
- package/dist/sync/mutation-session.test.d.ts.map +0 -1
- package/dist/sync/mutation-session.test.js +0 -190
- package/dist/sync/mutation-session.test.js.map +0 -1
- package/dist/sync/parallel-sync-coordinator.test.d.ts +0 -2
- package/dist/sync/parallel-sync-coordinator.test.d.ts.map +0 -1
- package/dist/sync/parallel-sync-coordinator.test.js +0 -564
- package/dist/sync/parallel-sync-coordinator.test.js.map +0 -1
- package/dist/sync/path-leases.test.d.ts +0 -2
- package/dist/sync/path-leases.test.d.ts.map +0 -1
- package/dist/sync/path-leases.test.js +0 -51
- package/dist/sync/path-leases.test.js.map +0 -1
- package/dist/sync/per-area-maintenance.test.d.ts +0 -2
- package/dist/sync/per-area-maintenance.test.d.ts.map +0 -1
- package/dist/sync/per-area-maintenance.test.js +0 -100
- package/dist/sync/per-area-maintenance.test.js.map +0 -1
- package/dist/sync/push-event.test.d.ts +0 -15
- package/dist/sync/push-event.test.d.ts.map +0 -1
- package/dist/sync/push-event.test.js +0 -282
- package/dist/sync/push-event.test.js.map +0 -1
- package/dist/sync/push-receiver.test.d.ts +0 -25
- package/dist/sync/push-receiver.test.d.ts.map +0 -1
- package/dist/sync/push-receiver.test.js +0 -2851
- package/dist/sync/push-receiver.test.js.map +0 -1
- package/dist/sync/push-transport.test.d.ts +0 -2
- package/dist/sync/push-transport.test.d.ts.map +0 -1
- package/dist/sync/push-transport.test.js +0 -70
- package/dist/sync/push-transport.test.js.map +0 -1
- package/dist/sync/push-walk-matchers.bench.test.d.ts +0 -2
- package/dist/sync/push-walk-matchers.bench.test.d.ts.map +0 -1
- package/dist/sync/push-walk-matchers.bench.test.js +0 -230
- package/dist/sync/push-walk-matchers.bench.test.js.map +0 -1
- package/dist/sync/realtime-network-integration.test.d.ts +0 -2
- package/dist/sync/realtime-network-integration.test.d.ts.map +0 -1
- package/dist/sync/realtime-network-integration.test.js +0 -83
- package/dist/sync/realtime-network-integration.test.js.map +0 -1
- package/dist/sync/realtime-rollout.test.d.ts +0 -2
- package/dist/sync/realtime-rollout.test.d.ts.map +0 -1
- package/dist/sync/realtime-rollout.test.js +0 -94
- package/dist/sync/realtime-rollout.test.js.map +0 -1
- package/dist/sync/realtime-telemetry.test.d.ts +0 -2
- package/dist/sync/realtime-telemetry.test.d.ts.map +0 -1
- package/dist/sync/realtime-telemetry.test.js +0 -300
- package/dist/sync/realtime-telemetry.test.js.map +0 -1
- package/dist/sync/receiver-origin-config.test.d.ts +0 -2
- package/dist/sync/receiver-origin-config.test.d.ts.map +0 -1
- package/dist/sync/receiver-origin-config.test.js +0 -39
- package/dist/sync/receiver-origin-config.test.js.map +0 -1
- package/dist/sync/reconcile-cursor.test.d.ts +0 -2
- package/dist/sync/reconcile-cursor.test.d.ts.map +0 -1
- package/dist/sync/reconcile-cursor.test.js +0 -139
- package/dist/sync/reconcile-cursor.test.js.map +0 -1
- package/dist/sync/remote-file-spool.test.d.ts +0 -2
- package/dist/sync/remote-file-spool.test.d.ts.map +0 -1
- package/dist/sync/remote-file-spool.test.js +0 -77
- package/dist/sync/remote-file-spool.test.js.map +0 -1
- package/dist/sync/scope-inventory-client.test.d.ts +0 -2
- package/dist/sync/scope-inventory-client.test.d.ts.map +0 -1
- package/dist/sync/scope-inventory-client.test.js +0 -103
- package/dist/sync/scope-inventory-client.test.js.map +0 -1
- package/dist/sync/secret-path-policy.test.d.ts +0 -2
- package/dist/sync/secret-path-policy.test.d.ts.map +0 -1
- package/dist/sync/secret-path-policy.test.js +0 -183
- package/dist/sync/secret-path-policy.test.js.map +0 -1
- package/dist/sync/snapshot-client.test.d.ts +0 -2
- package/dist/sync/snapshot-client.test.d.ts.map +0 -1
- package/dist/sync/snapshot-client.test.js +0 -169
- package/dist/sync/snapshot-client.test.js.map +0 -1
- package/dist/sync/state-store.test.d.ts +0 -2
- package/dist/sync/state-store.test.d.ts.map +0 -1
- package/dist/sync/state-store.test.js +0 -1556
- package/dist/sync/state-store.test.js.map +0 -1
- package/dist/sync/sync-contract.test.d.ts +0 -2
- package/dist/sync/sync-contract.test.d.ts.map +0 -1
- package/dist/sync/sync-contract.test.js +0 -141
- package/dist/sync/sync-contract.test.js.map +0 -1
- package/dist/sync/targeted-pull-prefixes.test.d.ts +0 -2
- package/dist/sync/targeted-pull-prefixes.test.d.ts.map +0 -1
- package/dist/sync/targeted-pull-prefixes.test.js +0 -33
- package/dist/sync/targeted-pull-prefixes.test.js.map +0 -1
- package/dist/sync/targeted-upsert-exact-list.test.d.ts +0 -2
- package/dist/sync/targeted-upsert-exact-list.test.d.ts.map +0 -1
- package/dist/sync/targeted-upsert-exact-list.test.js +0 -247
- package/dist/sync/targeted-upsert-exact-list.test.js.map +0 -1
- package/dist/sync/unchanged-push-events.test.d.ts +0 -2
- package/dist/sync/unchanged-push-events.test.d.ts.map +0 -1
- package/dist/sync/unchanged-push-events.test.js +0 -76
- package/dist/sync/unchanged-push-events.test.js.map +0 -1
- package/dist/sync/uploader-finalization.test.d.ts +0 -2
- package/dist/sync/uploader-finalization.test.d.ts.map +0 -1
- package/dist/sync/uploader-finalization.test.js +0 -107
- package/dist/sync/uploader-finalization.test.js.map +0 -1
- package/dist/sync-core.test.d.ts +0 -2
- package/dist/sync-core.test.d.ts.map +0 -1
- package/dist/sync-core.test.js +0 -189
- package/dist/sync-core.test.js.map +0 -1
- package/dist/sync-progress.test.d.ts +0 -2
- package/dist/sync-progress.test.d.ts.map +0 -1
- package/dist/sync-progress.test.js +0 -277
- package/dist/sync-progress.test.js.map +0 -1
- package/dist/telemetry-events.test.d.ts +0 -2
- package/dist/telemetry-events.test.d.ts.map +0 -1
- package/dist/telemetry-events.test.js +0 -113
- package/dist/telemetry-events.test.js.map +0 -1
- package/dist/telemetry.test.d.ts +0 -11
- package/dist/telemetry.test.d.ts.map +0 -1
- package/dist/telemetry.test.js +0 -1603
- package/dist/telemetry.test.js.map +0 -1
- package/dist/vault-client.test.d.ts +0 -7
- package/dist/vault-client.test.d.ts.map +0 -1
- package/dist/vault-client.test.js +0 -1334
- package/dist/vault-client.test.js.map +0 -1
- package/dist/watch-coverage.test.d.ts +0 -2
- package/dist/watch-coverage.test.d.ts.map +0 -1
- package/dist/watch-coverage.test.js +0 -56
- package/dist/watch-coverage.test.js.map +0 -1
- package/dist/watch-owner-lease.test.d.ts +0 -2
- package/dist/watch-owner-lease.test.d.ts.map +0 -1
- package/dist/watch-owner-lease.test.js +0 -353
- package/dist/watch-owner-lease.test.js.map +0 -1
- package/dist/watch-parent.test.d.ts +0 -2
- package/dist/watch-parent.test.d.ts.map +0 -1
- package/dist/watch-parent.test.js +0 -131
- package/dist/watch-parent.test.js.map +0 -1
- package/dist/watch-roots.test.d.ts +0 -18
- package/dist/watch-roots.test.d.ts.map +0 -1
- package/dist/watch-roots.test.js +0 -395
- package/dist/watch-roots.test.js.map +0 -1
- package/dist/watcher-continuity-hot-path.test.d.ts +0 -2
- package/dist/watcher-continuity-hot-path.test.d.ts.map +0 -1
- package/dist/watcher-continuity-hot-path.test.js +0 -40
- package/dist/watcher-continuity-hot-path.test.js.map +0 -1
- package/dist/watcher-event-gate.test.d.ts +0 -16
- package/dist/watcher-event-gate.test.d.ts.map +0 -1
- package/dist/watcher-event-gate.test.js +0 -191
- package/dist/watcher-event-gate.test.js.map +0 -1
- package/dist/watcher-replan-sweep.test.d.ts +0 -2
- package/dist/watcher-replan-sweep.test.d.ts.map +0 -1
- package/dist/watcher-replan-sweep.test.js +0 -245
- package/dist/watcher-replan-sweep.test.js.map +0 -1
- package/dist/watcher-stdout.test.d.ts +0 -2
- package/dist/watcher-stdout.test.d.ts.map +0 -1
- package/dist/watcher-stdout.test.js +0 -86
- package/dist/watcher-stdout.test.js.map +0 -1
- package/dist/watcher.test.d.ts +0 -2
- package/dist/watcher.test.d.ts.map +0 -1
- package/dist/watcher.test.js +0 -4301
- package/dist/watcher.test.js.map +0 -1
- package/dist/watcher.warmup-cancel.test.d.ts +0 -2
- package/dist/watcher.warmup-cancel.test.d.ts.map +0 -1
- package/dist/watcher.warmup-cancel.test.js +0 -59
- package/dist/watcher.warmup-cancel.test.js.map +0 -1
- package/dist/watcher.warmup-responsive.test.d.ts +0 -2
- package/dist/watcher.warmup-responsive.test.d.ts.map +0 -1
- package/dist/watcher.warmup-responsive.test.js +0 -62
- package/dist/watcher.warmup-responsive.test.js.map +0 -1
package/dist/ignore.test.js
DELETED
|
@@ -1,926 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unit tests for createIgnoreFilter.
|
|
3
|
-
*
|
|
4
|
-
* Covers both modes: legacy permissive (no .hqinclude) and allowlist mode
|
|
5
|
-
* (.hqinclude present). The allowlist tests guard against accidentally
|
|
6
|
-
* leaking sensitive subtrees like data/ or workers/ to S3 — a regression
|
|
7
|
-
* here would silently push private content on the next sync.
|
|
8
|
-
*/
|
|
9
|
-
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
|
|
10
|
-
import * as fs from "fs";
|
|
11
|
-
import * as os from "os";
|
|
12
|
-
import * as path from "path";
|
|
13
|
-
import { createIgnoreFilter, createIgnoreFilterReference, isExpectedIgnore, } from "./ignore.js";
|
|
14
|
-
import { wrapFilterWithIgnoreVisibility } from "./cli/share.js";
|
|
15
|
-
describe("isExpectedIgnore", () => {
|
|
16
|
-
it("treats root .tmp-* build caches as expected, but not company data with that name", () => {
|
|
17
|
-
expect(isExpectedIgnore(".tmp-c180-base")).toBe(true);
|
|
18
|
-
expect(isExpectedIgnore(".tmp-c180-base/")).toBe(true);
|
|
19
|
-
expect(isExpectedIgnore(".tmp-c180-base/chunk/a.json")).toBe(true);
|
|
20
|
-
expect(isExpectedIgnore("companies/indigo/knowledge/.tmp-c180-base")).toBe(false);
|
|
21
|
-
expect(isExpectedIgnore("companies/indigo/knowledge/.tmp-c180-base/notes.md")).toBe(false);
|
|
22
|
-
});
|
|
23
|
-
it("classifies top-level HQ-managed roots as expected", () => {
|
|
24
|
-
expect(isExpectedIgnore("repos")).toBe(true);
|
|
25
|
-
expect(isExpectedIgnore("repos/private/x.ts")).toBe(true);
|
|
26
|
-
expect(isExpectedIgnore("workspace/tmp/file.md")).toBe(true);
|
|
27
|
-
});
|
|
28
|
-
it("classifies build, VCS, cache, and known basename noise as expected", () => {
|
|
29
|
-
expect(isExpectedIgnore("node_modules/react/index.js")).toBe(true);
|
|
30
|
-
expect(isExpectedIgnore("apps/web/node_modules/react/index.js")).toBe(true);
|
|
31
|
-
expect(isExpectedIgnore(".git/config")).toBe(true);
|
|
32
|
-
expect(isExpectedIgnore(".DS_Store")).toBe(true);
|
|
33
|
-
expect(isExpectedIgnore("x/.env")).toBe(true);
|
|
34
|
-
expect(isExpectedIgnore("a/b/.hq-sync.pid")).toBe(true);
|
|
35
|
-
expect(isExpectedIgnore("y/foo.pyc")).toBe(true);
|
|
36
|
-
// Cloud-only skill hero images (US-014) are an expected by-design exclusion.
|
|
37
|
-
expect(isExpectedIgnore(".claude/skills/foo/.skill-media/hero.png")).toBe(true);
|
|
38
|
-
});
|
|
39
|
-
it("classifies macOS Finder Icon\\r files as expected noise", () => {
|
|
40
|
-
// Finder scatters one into every directory it renders a custom icon for,
|
|
41
|
-
// and a folder-level cloud-sync agent propagates them tree-wide. Treated
|
|
42
|
-
// exactly like .DS_Store so a seeded tree stays silent rather than firing
|
|
43
|
-
// the "EXCLUDED from sync — review in case this is unintended" warning
|
|
44
|
-
// once per file.
|
|
45
|
-
expect(isExpectedIgnore("Icon\r")).toBe(true);
|
|
46
|
-
expect(isExpectedIgnore("companies/indigo/Icon\r")).toBe(true);
|
|
47
|
-
});
|
|
48
|
-
it("classifies AppleDouble files as expected noise", () => {
|
|
49
|
-
expect(isExpectedIgnore("core/._README.md")).toBe(true);
|
|
50
|
-
expect(isExpectedIgnore("core/connectors/apple-mail/._connector.sh")).toBe(true);
|
|
51
|
-
expect(isExpectedIgnore("core/README.md")).toBe(false);
|
|
52
|
-
});
|
|
53
|
-
it("classifies restore staging paths as expected noise", () => {
|
|
54
|
-
expect(isExpectedIgnore("core/packages.hq-restore-9980")).toBe(true);
|
|
55
|
-
expect(isExpectedIgnore("core/packages.hq-restore-9980/connectors/README.md")).toBe(true);
|
|
56
|
-
expect(isExpectedIgnore("core/README.md.hq-restore-probe-9980-m6bx")).toBe(true);
|
|
57
|
-
});
|
|
58
|
-
it("keeps a real file named Icons noteworthy (no `Icon?` over-match)", () => {
|
|
59
|
-
// The `Icon?` gitignore workaround would swallow these. Dropping real
|
|
60
|
-
// user content is a worse failure than the cruft being excluded.
|
|
61
|
-
expect(isExpectedIgnore("companies/indigo/Icons")).toBe(false);
|
|
62
|
-
expect(isExpectedIgnore("companies/indigo/Icon")).toBe(false);
|
|
63
|
-
expect(isExpectedIgnore("companies/indigo/Icons.md")).toBe(false);
|
|
64
|
-
});
|
|
65
|
-
it("keeps nested repos/workspace and ordinary content noteworthy", () => {
|
|
66
|
-
expect(isExpectedIgnore("companies/indigo/knowledge/repos/foo/notes.md")).toBe(false);
|
|
67
|
-
expect(isExpectedIgnore("companies/indigo/knowledge/overview.md")).toBe(false);
|
|
68
|
-
});
|
|
69
|
-
it("classifies secret/credential defaults as expected (no false 'unexpectedly excluded' warning)", () => {
|
|
70
|
-
// These are mandatory, by-design exclusions (DEFAULT_IGNORES). If they were
|
|
71
|
-
// not recognized here, every push touching a secret would fire the
|
|
72
|
-
// "EXCLUDED from sync — review in case unintended" warning.
|
|
73
|
-
expect(isExpectedIgnore("credentials.json")).toBe(true);
|
|
74
|
-
expect(isExpectedIgnore("companies/acme/credentials.json")).toBe(true);
|
|
75
|
-
expect(isExpectedIgnore("companies/acme/service.credentials.json")).toBe(true);
|
|
76
|
-
expect(isExpectedIgnore("personal/db.secret.yaml")).toBe(true);
|
|
77
|
-
expect(isExpectedIgnore("personal/.netrc")).toBe(true);
|
|
78
|
-
// Ordinary content that merely mentions "credentials"/"secret" stays noteworthy.
|
|
79
|
-
expect(isExpectedIgnore("docs/credentials-guide.md")).toBe(false);
|
|
80
|
-
expect(isExpectedIgnore("companies/acme/secrets-policy.md")).toBe(false);
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
describe("createIgnoreFilter", () => {
|
|
84
|
-
let hqRoot;
|
|
85
|
-
beforeEach(() => {
|
|
86
|
-
hqRoot = fs.mkdtempSync(path.join(os.tmpdir(), "hq-ignore-test-"));
|
|
87
|
-
});
|
|
88
|
-
afterEach(() => {
|
|
89
|
-
fs.rmSync(hqRoot, { recursive: true, force: true });
|
|
90
|
-
});
|
|
91
|
-
it("permissive mode excludes AppleDouble files", () => {
|
|
92
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
93
|
-
const paths = [
|
|
94
|
-
"._README.md",
|
|
95
|
-
"core/._README.md",
|
|
96
|
-
"core/connectors/apple-mail/._connector.sh",
|
|
97
|
-
];
|
|
98
|
-
for (const relative of paths) {
|
|
99
|
-
expect(shouldSync(path.join(hqRoot, relative)), relative).toBe(false);
|
|
100
|
-
}
|
|
101
|
-
expect(shouldSync(path.join(hqRoot, "core/README.md"))).toBe(true);
|
|
102
|
-
});
|
|
103
|
-
it("re-includes only the root MCP file for the personal-target flag", () => {
|
|
104
|
-
const shouldSync = createIgnoreFilter(hqRoot, { allowRootMcpConfig: true });
|
|
105
|
-
expect(shouldSync(path.join(hqRoot, ".mcp.json"))).toBe(true);
|
|
106
|
-
expect(shouldSync(path.join(hqRoot, "personal", ".mcp.json"))).toBe(false);
|
|
107
|
-
expect(shouldSync(path.join(hqRoot, "companies", "acme", ".mcp.json"))).toBe(false);
|
|
108
|
-
expect(createIgnoreFilter(hqRoot)(path.join(hqRoot, ".mcp.json"))).toBe(false);
|
|
109
|
-
});
|
|
110
|
-
it("permissive mode excludes every restore staging segment", () => {
|
|
111
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
112
|
-
const paths = [
|
|
113
|
-
"core/packages.hq-restore-9980",
|
|
114
|
-
"core/packages.hq-restore-9980/connectors/README.md",
|
|
115
|
-
"core/README.md.hq-restore-probe-9980-m6bx",
|
|
116
|
-
];
|
|
117
|
-
for (const relative of paths) {
|
|
118
|
-
expect(shouldSync(path.join(hqRoot, relative)), relative).toBe(false);
|
|
119
|
-
}
|
|
120
|
-
expect(shouldSync(path.join(hqRoot, "core/README.md"))).toBe(true);
|
|
121
|
-
});
|
|
122
|
-
it("memoized filter is observationally identical to the reference across ignore/include edge cases", () => {
|
|
123
|
-
// This combines the shapes that make a directory cache unsafe: ordered
|
|
124
|
-
// negations that re-include deep agency files, directory-only patterns,
|
|
125
|
-
// and allowlist ancestor descent. Every candidate is checked as both a
|
|
126
|
-
// file and a directory probe so the trailing-slash distinction is covered.
|
|
127
|
-
fs.writeFileSync(path.join(hqRoot, ".hqignore"), [
|
|
128
|
-
"plain-ignored.txt",
|
|
129
|
-
"dir-only/",
|
|
130
|
-
"workspace/agency/**",
|
|
131
|
-
"!workspace/agency/",
|
|
132
|
-
"!workspace/agency/*/",
|
|
133
|
-
"!workspace/agency/*/*/",
|
|
134
|
-
"!workspace/agency/*/*/status.json",
|
|
135
|
-
"!workspace/agency/*/*/team.json",
|
|
136
|
-
"!workspace/agency/*/*/chat.jsonl",
|
|
137
|
-
].join("\n"));
|
|
138
|
-
fs.writeFileSync(path.join(hqRoot, ".hqinclude"), ["allow/leaf.txt", "projects/*/docs/"].join("\n"));
|
|
139
|
-
const candidates = [
|
|
140
|
-
"plain-ignored.txt",
|
|
141
|
-
"plain-kept.txt",
|
|
142
|
-
"dir-only",
|
|
143
|
-
"dir-only/child.txt",
|
|
144
|
-
"workspace",
|
|
145
|
-
"workspace/agency",
|
|
146
|
-
"workspace/agency/acme",
|
|
147
|
-
"workspace/agency/acme/team-a",
|
|
148
|
-
"workspace/agency/acme/team-a/status.json",
|
|
149
|
-
"workspace/agency/acme/team-a/team.json",
|
|
150
|
-
"workspace/agency/acme/team-a/chat.jsonl",
|
|
151
|
-
"workspace/agency/acme/team-a/other.txt",
|
|
152
|
-
"allow",
|
|
153
|
-
"allow/leaf.txt",
|
|
154
|
-
"projects",
|
|
155
|
-
"projects/acme",
|
|
156
|
-
"projects/acme/docs",
|
|
157
|
-
"projects/acme/docs/readme.md",
|
|
158
|
-
"Icon\r",
|
|
159
|
-
];
|
|
160
|
-
const reference = createIgnoreFilterReference(hqRoot);
|
|
161
|
-
const memoized = createIgnoreFilter(hqRoot);
|
|
162
|
-
for (const relative of candidates) {
|
|
163
|
-
const absolute = path.join(hqRoot, relative);
|
|
164
|
-
for (const isDir of [false, true]) {
|
|
165
|
-
expect(memoized(absolute, isDir), `${relative} (isDir=${isDir})`).toBe(reference(absolute, isDir));
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
// Outside-root checks are part of the historical contract too.
|
|
169
|
-
const outside = path.join(path.dirname(hqRoot), "outside.md");
|
|
170
|
-
expect(memoized(outside)).toBe(reference(outside));
|
|
171
|
-
});
|
|
172
|
-
it("memoizes the parent-directory verdict, never the file's", () => {
|
|
173
|
-
const stats = {
|
|
174
|
-
cacheHits: 0,
|
|
175
|
-
cacheMisses: 0,
|
|
176
|
-
matcherInvocations: 0,
|
|
177
|
-
};
|
|
178
|
-
const filter = createIgnoreFilter(hqRoot, { memoLimit: 1_000, stats });
|
|
179
|
-
const paths = Array.from({ length: 500 }, (_value, index) => path.join(hqRoot, "workspace", "agency", "acme", `f-${index}.json`));
|
|
180
|
-
for (let pass = 0; pass < 4; pass += 1) {
|
|
181
|
-
for (const candidate of paths)
|
|
182
|
-
expect(filter(candidate)).toBe(true);
|
|
183
|
-
}
|
|
184
|
-
// 2,000 probes of one folder cost one memo entry and one memo miss. The
|
|
185
|
-
// old per-file memo held 500 entries here and ~1.5M on a real HQ walk,
|
|
186
|
-
// where it rolled over ~30 times per walk and so never stayed warm.
|
|
187
|
-
expect(stats.cacheEntries).toBe(1);
|
|
188
|
-
expect(filter.censusSize()).toBe(1);
|
|
189
|
-
expect(stats.cacheMisses).toBe(1);
|
|
190
|
-
expect(stats.cacheHits).toBe(paths.length * 4 - 1);
|
|
191
|
-
// Files inside an included folder still reach the matcher on every probe:
|
|
192
|
-
// that is the trade — matcher time per file for memory per directory.
|
|
193
|
-
expect(stats.matcherInvocations).toBe(paths.length * 4 + 1);
|
|
194
|
-
const cappedStats = {
|
|
195
|
-
cacheHits: 0,
|
|
196
|
-
cacheMisses: 0,
|
|
197
|
-
matcherInvocations: 0,
|
|
198
|
-
};
|
|
199
|
-
const capped = createIgnoreFilter(hqRoot, { memoLimit: 0, stats: cappedStats });
|
|
200
|
-
for (const candidate of paths)
|
|
201
|
-
expect(capped(candidate)).toBe(true);
|
|
202
|
-
for (const candidate of paths)
|
|
203
|
-
expect(capped(candidate)).toBe(true);
|
|
204
|
-
// With no memo at all every probe evaluates its parent and then itself.
|
|
205
|
-
// Correctness comes from exact re-evaluation, not from cache admission.
|
|
206
|
-
expect(cappedStats.cacheHits).toBe(0);
|
|
207
|
-
expect(cappedStats.cacheEntries).toBe(0);
|
|
208
|
-
expect(cappedStats.matcherInvocations).toBe(paths.length * 2 * 2);
|
|
209
|
-
});
|
|
210
|
-
it("short-circuits every file under an excluded folder without consulting the matcher", () => {
|
|
211
|
-
fs.writeFileSync(path.join(hqRoot, ".hqignore"), "private/\n");
|
|
212
|
-
const stats = {
|
|
213
|
-
cacheHits: 0,
|
|
214
|
-
cacheMisses: 0,
|
|
215
|
-
matcherInvocations: 0,
|
|
216
|
-
};
|
|
217
|
-
const filter = createIgnoreFilter(hqRoot, { memoLimit: 1_000, stats });
|
|
218
|
-
const dirs = Array.from({ length: 10 }, (_value, index) => `private/team-${index}/notes`);
|
|
219
|
-
for (const dir of dirs) {
|
|
220
|
-
for (let index = 0; index < 100; index += 1) {
|
|
221
|
-
expect(filter(path.join(hqRoot, dir, `${index}.md`))).toBe(false);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
// gitignore semantics: nothing under an excluded directory can be
|
|
225
|
-
// re-included, so an excluded parent settles its children with a Map
|
|
226
|
-
// lookup. The matcher ran once per distinct folder and never per file.
|
|
227
|
-
expect(stats.matcherInvocations).toBe(dirs.length);
|
|
228
|
-
expect(stats.cacheMisses).toBe(dirs.length);
|
|
229
|
-
expect(stats.cacheHits).toBe(dirs.length * 100 - dirs.length);
|
|
230
|
-
expect(stats.cacheEntries).toBe(dirs.length);
|
|
231
|
-
});
|
|
232
|
-
it("keeps memo entries proportional to directories, not files", () => {
|
|
233
|
-
const filter = createIgnoreFilter(hqRoot, { memoLimit: 1_000 });
|
|
234
|
-
for (let dir = 0; dir < 50; dir += 1) {
|
|
235
|
-
for (let file = 0; file < 200; file += 1) {
|
|
236
|
-
filter(path.join(hqRoot, "personal", `d-${dir}`, `f-${file}.md`));
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
expect(filter.censusSize()).toBe(50);
|
|
240
|
-
});
|
|
241
|
-
it("treats root-level files and directories as having no cacheable parent", () => {
|
|
242
|
-
fs.writeFileSync(path.join(hqRoot, ".hqignore"), "top-secret/\n*.log\n");
|
|
243
|
-
const stats = {
|
|
244
|
-
cacheHits: 0,
|
|
245
|
-
cacheMisses: 0,
|
|
246
|
-
matcherInvocations: 0,
|
|
247
|
-
};
|
|
248
|
-
const filter = createIgnoreFilter(hqRoot, { memoLimit: 1_000, stats });
|
|
249
|
-
expect(filter(path.join(hqRoot, "README.md"))).toBe(true);
|
|
250
|
-
expect(filter(path.join(hqRoot, "debug.log"))).toBe(false);
|
|
251
|
-
expect(filter(path.join(hqRoot, "top-secret"), true)).toBe(false);
|
|
252
|
-
expect(filter(path.join(hqRoot, "top-secret"), false)).toBe(true);
|
|
253
|
-
expect(filter(path.join(hqRoot, "top-secret", "x.md"))).toBe(false);
|
|
254
|
-
// Root probes never consult the memo. The one DIRECTORY probe seeded its
|
|
255
|
-
// own verdict (a walker probes a folder before descending into it), so the
|
|
256
|
-
// child's lookup was already warm.
|
|
257
|
-
expect(stats.cacheEntries).toBe(1);
|
|
258
|
-
expect(stats.cacheMisses).toBe(0);
|
|
259
|
-
expect(stats.cacheHits).toBe(1);
|
|
260
|
-
});
|
|
261
|
-
it("rolls the directory memo over at its bound and re-evaluates evicted folders", () => {
|
|
262
|
-
const stats = {
|
|
263
|
-
cacheHits: 0,
|
|
264
|
-
cacheMisses: 0,
|
|
265
|
-
matcherInvocations: 0,
|
|
266
|
-
};
|
|
267
|
-
fs.writeFileSync(path.join(hqRoot, ".hqignore"), "private/\n");
|
|
268
|
-
const filter = createIgnoreFilter(hqRoot, {
|
|
269
|
-
memoLimit: 3,
|
|
270
|
-
matcherRebuildInterval: 3,
|
|
271
|
-
stats,
|
|
272
|
-
});
|
|
273
|
-
for (let cycle = 0; cycle < 20; cycle += 1) {
|
|
274
|
-
for (let index = 0; index < 5; index += 1) {
|
|
275
|
-
expect(filter(path.join(hqRoot, "public", `${cycle}-${index}`, "note.md"))).toBe(true);
|
|
276
|
-
}
|
|
277
|
-
// This folder has necessarily fallen out of the small memo. A miss must
|
|
278
|
-
// consult the real matcher and preserve the privacy exclusion.
|
|
279
|
-
expect(filter(path.join(hqRoot, "private", `${cycle}`, "note.md"), false)).toBe(false);
|
|
280
|
-
}
|
|
281
|
-
expect(stats.cacheEntries).toBeLessThanOrEqual(3);
|
|
282
|
-
expect(stats.matcherGenerations).toBeGreaterThan(1);
|
|
283
|
-
});
|
|
284
|
-
it("bounds the matcher's private cache by rebuilding it after a fixed number of evaluations", () => {
|
|
285
|
-
const stats = {
|
|
286
|
-
cacheHits: 0,
|
|
287
|
-
cacheMisses: 0,
|
|
288
|
-
matcherInvocations: 0,
|
|
289
|
-
};
|
|
290
|
-
const filter = createIgnoreFilter(hqRoot, {
|
|
291
|
-
memoLimit: 1_000,
|
|
292
|
-
matcherRebuildInterval: 100,
|
|
293
|
-
stats,
|
|
294
|
-
});
|
|
295
|
-
// One folder, one memo entry — but the `ignore` package caches every path
|
|
296
|
-
// it is handed internally, so 1,000 distinct files would still grow its
|
|
297
|
-
// private cache without bound. Rebuilding on an evaluation count keeps it
|
|
298
|
-
// bounded independently of how many directories the memo retains.
|
|
299
|
-
for (let index = 0; index < 1_000; index += 1) {
|
|
300
|
-
filter(path.join(hqRoot, "personal", "notes", `${index}.md`));
|
|
301
|
-
}
|
|
302
|
-
expect(stats.cacheEntries).toBe(1);
|
|
303
|
-
expect(stats.matcherGenerations).toBeGreaterThanOrEqual(10);
|
|
304
|
-
});
|
|
305
|
-
it("captures ignore configuration once even when both caches roll over repeatedly", () => {
|
|
306
|
-
const coreYaml = path.join(hqRoot, "core", "core.yaml");
|
|
307
|
-
const hqignore = path.join(hqRoot, ".hqignore");
|
|
308
|
-
const hqsyncignore = path.join(hqRoot, ".hqsyncignore");
|
|
309
|
-
const hqinclude = path.join(hqRoot, ".hqinclude");
|
|
310
|
-
const contents = new Map([
|
|
311
|
-
[hqignore, "ignored/\n"],
|
|
312
|
-
[hqsyncignore, "legacy-ignored/\n"],
|
|
313
|
-
[hqinclude, "included/\n"],
|
|
314
|
-
]);
|
|
315
|
-
const snapshotReader = {
|
|
316
|
-
existsSync: vi.fn((filePath) => filePath === coreYaml || contents.has(filePath)),
|
|
317
|
-
readFileSync: vi.fn((filePath) => {
|
|
318
|
-
const content = contents.get(filePath);
|
|
319
|
-
if (content === undefined)
|
|
320
|
-
throw new Error(`unexpected read of ${filePath}`);
|
|
321
|
-
return content;
|
|
322
|
-
}),
|
|
323
|
-
};
|
|
324
|
-
const filter = createIgnoreFilter(hqRoot, {
|
|
325
|
-
memoLimit: 1,
|
|
326
|
-
matcherRebuildInterval: 1,
|
|
327
|
-
snapshotReader,
|
|
328
|
-
});
|
|
329
|
-
for (let index = 0; index < 10; index += 1) {
|
|
330
|
-
filter(path.join(hqRoot, "included", `${index}`, "note.md"));
|
|
331
|
-
}
|
|
332
|
-
const callsFor = (calls, filePath) => calls.filter(([candidate]) => candidate === filePath).length;
|
|
333
|
-
expect(callsFor(snapshotReader.existsSync.mock.calls, coreYaml)).toBe(1);
|
|
334
|
-
expect(callsFor(snapshotReader.existsSync.mock.calls, hqignore)).toBe(1);
|
|
335
|
-
expect(callsFor(snapshotReader.existsSync.mock.calls, hqsyncignore)).toBe(1);
|
|
336
|
-
expect(callsFor(snapshotReader.existsSync.mock.calls, hqinclude)).toBe(1);
|
|
337
|
-
expect(callsFor(snapshotReader.readFileSync.mock.calls, hqignore)).toBe(1);
|
|
338
|
-
expect(callsFor(snapshotReader.readFileSync.mock.calls, hqsyncignore)).toBe(1);
|
|
339
|
-
expect(callsFor(snapshotReader.readFileSync.mock.calls, hqinclude)).toBe(1);
|
|
340
|
-
});
|
|
341
|
-
describe("folder memo is observationally identical to the reference over a generated tree", () => {
|
|
342
|
-
// A deterministic tree that exercises every shape the folder memo must
|
|
343
|
-
// not get wrong: excluded directories with files that a later negation
|
|
344
|
-
// tries (and must fail) to re-include, directory-only patterns, deep
|
|
345
|
-
// negation ladders under workspace/agency, root-anchored globs, an
|
|
346
|
-
// excluded name that is itself re-included, and — in the second variant —
|
|
347
|
-
// allowlist mode with ancestor descent.
|
|
348
|
-
const IGNORE_RULES = [
|
|
349
|
-
"build/",
|
|
350
|
-
"*.log",
|
|
351
|
-
"!important.log",
|
|
352
|
-
"/workspace/agency/**/*.tmp",
|
|
353
|
-
"workspace/agency/**",
|
|
354
|
-
"!workspace/agency/",
|
|
355
|
-
"!workspace/agency/*/",
|
|
356
|
-
"!workspace/agency/*/*/",
|
|
357
|
-
"!workspace/agency/*/*/status.json",
|
|
358
|
-
"docs/*/drafts/",
|
|
359
|
-
"secret-*",
|
|
360
|
-
"!secret-public",
|
|
361
|
-
];
|
|
362
|
-
const DIRS = [
|
|
363
|
-
"build",
|
|
364
|
-
"build/sub",
|
|
365
|
-
"logs",
|
|
366
|
-
"workspace",
|
|
367
|
-
"workspace/agency",
|
|
368
|
-
"workspace/agency/acme",
|
|
369
|
-
"workspace/agency/acme/team",
|
|
370
|
-
"workspace/agency/acme/team/deep",
|
|
371
|
-
"docs",
|
|
372
|
-
"docs/a",
|
|
373
|
-
"docs/a/drafts",
|
|
374
|
-
"docs/a/drafts/x",
|
|
375
|
-
"secret-1",
|
|
376
|
-
"secret-1/inner",
|
|
377
|
-
"secret-public",
|
|
378
|
-
"secret-public/inner",
|
|
379
|
-
"plain",
|
|
380
|
-
"plain/nested",
|
|
381
|
-
];
|
|
382
|
-
const LEAVES = ["file.txt", "file.log", "important.log", "status.json", "note.tmp", "Icon\r"];
|
|
383
|
-
const candidates = () => {
|
|
384
|
-
const all = [...LEAVES];
|
|
385
|
-
for (const dir of DIRS) {
|
|
386
|
-
all.push(dir);
|
|
387
|
-
for (const leaf of LEAVES)
|
|
388
|
-
all.push(`${dir}/${leaf}`);
|
|
389
|
-
}
|
|
390
|
-
return all;
|
|
391
|
-
};
|
|
392
|
-
/** Small deterministic PRNG so a failure is reproducible from the seed. */
|
|
393
|
-
const shuffled = (items, seed) => {
|
|
394
|
-
const out = [...items];
|
|
395
|
-
let state = seed >>> 0;
|
|
396
|
-
for (let index = out.length - 1; index > 0; index -= 1) {
|
|
397
|
-
state = (Math.imul(state, 1664525) + 1013904223) >>> 0;
|
|
398
|
-
const swap = state % (index + 1);
|
|
399
|
-
[out[index], out[swap]] = [out[swap], out[index]];
|
|
400
|
-
}
|
|
401
|
-
return out;
|
|
402
|
-
};
|
|
403
|
-
const assertParity = (order, label) => {
|
|
404
|
-
const reference = createIgnoreFilterReference(hqRoot);
|
|
405
|
-
// Tiny bounds force memo rollovers and matcher rebuilds mid-walk, so the
|
|
406
|
-
// comparison covers warm hits, cold misses, and post-rollover state.
|
|
407
|
-
const memoized = createIgnoreFilter(hqRoot, { memoLimit: 2, matcherRebuildInterval: 3 });
|
|
408
|
-
for (let pass = 0; pass < 2; pass += 1) {
|
|
409
|
-
for (const relative of order) {
|
|
410
|
-
const absolute = path.join(hqRoot, relative);
|
|
411
|
-
for (const isDir of [false, true]) {
|
|
412
|
-
expect(memoized(absolute, isDir), `${label} pass=${pass} ${JSON.stringify(relative)} (isDir=${isDir})`).toBe(reference(absolute, isDir));
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
};
|
|
417
|
-
for (const allowlist of [false, true]) {
|
|
418
|
-
it(`${allowlist ? "allowlist" : "permissive"} mode: parents-first, children-first, and shuffled probe orders agree`, () => {
|
|
419
|
-
fs.writeFileSync(path.join(hqRoot, ".hqignore"), IGNORE_RULES.join("\n"));
|
|
420
|
-
if (allowlist) {
|
|
421
|
-
fs.writeFileSync(path.join(hqRoot, ".hqinclude"), ["docs/*/", "plain/file.txt", "secret-public/", "workspace/agency/*/*/"].join("\n"));
|
|
422
|
-
}
|
|
423
|
-
const all = candidates();
|
|
424
|
-
assertParity(all, "parents-first");
|
|
425
|
-
assertParity([...all].reverse(), "children-first");
|
|
426
|
-
for (const seed of [1, 7, 42])
|
|
427
|
-
assertParity(shuffled(all, seed), `seed=${seed}`);
|
|
428
|
-
});
|
|
429
|
-
}
|
|
430
|
-
});
|
|
431
|
-
it("keeps allowlist mode active after .hqinclude is deleted during a rollover", () => {
|
|
432
|
-
const hqinclude = path.join(hqRoot, ".hqinclude");
|
|
433
|
-
fs.writeFileSync(hqinclude, "included/allowed.md\n");
|
|
434
|
-
const filter = createIgnoreFilter(hqRoot, { memoLimit: 1, matcherRebuildInterval: 1 });
|
|
435
|
-
expect(filter(path.join(hqRoot, "included", "allowed.md"))).toBe(true);
|
|
436
|
-
fs.rmSync(hqinclude);
|
|
437
|
-
// This unique folder rolls the memo and the matcher rebuilds. Neither was
|
|
438
|
-
// captured in the first generation, so it proves the new generation
|
|
439
|
-
// retained allowlist mode.
|
|
440
|
-
expect(filter(path.join(hqRoot, "not-included", "private.md"))).toBe(false);
|
|
441
|
-
});
|
|
442
|
-
it("keeps .hqignore exclusions after its contents are truncated during a rollover", () => {
|
|
443
|
-
const hqignore = path.join(hqRoot, ".hqignore");
|
|
444
|
-
fs.writeFileSync(hqignore, "private/\n");
|
|
445
|
-
const filter = createIgnoreFilter(hqRoot, { memoLimit: 1, matcherRebuildInterval: 1 });
|
|
446
|
-
expect(filter(path.join(hqRoot, "public", "seed.md"))).toBe(true);
|
|
447
|
-
fs.writeFileSync(hqignore, "");
|
|
448
|
-
// This unique folder rolls the memo and the matcher rebuilds. Its
|
|
449
|
-
// exclusion must come from the construction-time snapshot, not the later
|
|
450
|
-
// on-disk file contents.
|
|
451
|
-
expect(filter(path.join(hqRoot, "private", "secret.md"))).toBe(false);
|
|
452
|
-
});
|
|
453
|
-
// Sync exclusions are governed ONLY by hq-cloud's own config (.hqignore /
|
|
454
|
-
// .hqinclude) plus the built-in defaults — never by the repo's .gitignore.
|
|
455
|
-
// .gitignore describes what the git-mirror should not COMMIT, which is a
|
|
456
|
-
// different question from what sync should not UPLOAD; coupling them meant
|
|
457
|
-
// excluding a subtree from the git-mirror silently stopped syncing it too
|
|
458
|
-
// (the 2026-08 personal-vault carve-out incident). Root cause of the split.
|
|
459
|
-
describe("ignores .gitignore entirely (only .hqignore/.hqinclude govern sync)", () => {
|
|
460
|
-
it("a .gitignore pattern does NOT exclude a file from sync", () => {
|
|
461
|
-
fs.writeFileSync(path.join(hqRoot, ".gitignore"), "workspace/\nsecret-dir/\n*.bigfile\n");
|
|
462
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
463
|
-
expect(shouldSync(path.join(hqRoot, "workspace/.session-logs/s.jsonl"))).toBe(true);
|
|
464
|
-
expect(shouldSync(path.join(hqRoot, "secret-dir/x.md"))).toBe(true);
|
|
465
|
-
expect(shouldSync(path.join(hqRoot, "notes.bigfile"))).toBe(true);
|
|
466
|
-
});
|
|
467
|
-
it("the same pattern in .hqignore DOES exclude it (the supported channel)", () => {
|
|
468
|
-
fs.writeFileSync(path.join(hqRoot, ".hqignore"), "secret-dir/\n*.bigfile\n");
|
|
469
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
470
|
-
expect(shouldSync(path.join(hqRoot, "secret-dir/x.md"))).toBe(false);
|
|
471
|
-
expect(shouldSync(path.join(hqRoot, "notes.bigfile"))).toBe(false);
|
|
472
|
-
expect(shouldSync(path.join(hqRoot, "notes.md"))).toBe(true);
|
|
473
|
-
});
|
|
474
|
-
// Secrets used to be kept out of the vault only because most HQ roots'
|
|
475
|
-
// .gitignore listed them. Now that .gitignore is not consulted, the built-in
|
|
476
|
-
// defaults must guarantee it for every user, independent of any config file.
|
|
477
|
-
it("secret files are excluded by the built-in defaults, with no ignore file at all", () => {
|
|
478
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
479
|
-
for (const p of [
|
|
480
|
-
".env",
|
|
481
|
-
".env.local",
|
|
482
|
-
".env.production.local",
|
|
483
|
-
".env.staging-token",
|
|
484
|
-
"companies/acme/.env",
|
|
485
|
-
"companies/acme/service.credentials.json",
|
|
486
|
-
"credentials.json", // bare basename, not just *.credentials.json
|
|
487
|
-
"companies/acme/knowledge/credentials.json",
|
|
488
|
-
"personal/db.secret.yaml",
|
|
489
|
-
".mcp.json",
|
|
490
|
-
"companies/acme/.mcp.json",
|
|
491
|
-
"personal/.netrc",
|
|
492
|
-
]) {
|
|
493
|
-
expect(shouldSync(path.join(hqRoot, p)), `${p} must be excluded by default`).toBe(false);
|
|
494
|
-
}
|
|
495
|
-
// A near-miss that must NOT be swallowed: an ordinary env-adjacent doc.
|
|
496
|
-
expect(shouldSync(path.join(hqRoot, "docs/env-setup.md"))).toBe(true);
|
|
497
|
-
// Packaged .mcp.json templates under core/packages/*/ are release-shipped
|
|
498
|
-
// config, not a user secret; the .gitignore used to re-include them and
|
|
499
|
-
// the defaults must preserve that carve-out.
|
|
500
|
-
expect(shouldSync(path.join(hqRoot, "core/packages/hq-pack-gemini/.mcp.json"))).toBe(true);
|
|
501
|
-
});
|
|
502
|
-
});
|
|
503
|
-
it("permissive mode: regular files sync, defaults are ignored", () => {
|
|
504
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
505
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/notes.md"))).toBe(true);
|
|
506
|
-
expect(shouldSync(path.join(hqRoot, "node_modules/foo/x.js"))).toBe(false);
|
|
507
|
-
expect(shouldSync(path.join(hqRoot, ".env"))).toBe(false);
|
|
508
|
-
});
|
|
509
|
-
it("permissive mode: project-local .qmd index is ignored by default", () => {
|
|
510
|
-
// feedback_332c7ccc / sqlite-vec#297 — never round-trip a project-local
|
|
511
|
-
// qmd index through the vault.
|
|
512
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
513
|
-
expect(shouldSync(path.join(hqRoot, ".qmd"), true)).toBe(false);
|
|
514
|
-
expect(shouldSync(path.join(hqRoot, ".qmd/index.sqlite"))).toBe(false);
|
|
515
|
-
expect(shouldSync(path.join(hqRoot, ".qmd/index.sqlite-wal"))).toBe(false);
|
|
516
|
-
expect(isExpectedIgnore(".qmd/index.sqlite")).toBe(true);
|
|
517
|
-
});
|
|
518
|
-
it("permissive mode: pnpm content-addressed store is ignored by default", () => {
|
|
519
|
-
// .pnpm-store/ is pnpm's content-addressed package store. Like
|
|
520
|
-
// node_modules/ it is large and machine-local and must never sync — a
|
|
521
|
-
// synced store writes a `.conflict-` copy of every blob each cycle, which
|
|
522
|
-
// then re-syncs and amplifies into tens of thousands of files. Regression
|
|
523
|
-
// guard for that storm.
|
|
524
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
525
|
-
// The store directory and everything beneath it is excluded.
|
|
526
|
-
expect(shouldSync(path.join(hqRoot, ".pnpm-store"), true)).toBe(false);
|
|
527
|
-
expect(shouldSync(path.join(hqRoot, ".pnpm-store/v10/files/00/abc123"))).toBe(false);
|
|
528
|
-
// Caught at any depth — a project store nested under a synced subtree.
|
|
529
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/repos/x/.pnpm-store/v10/blob"))).toBe(false);
|
|
530
|
-
// node_modules/ is already covered; asserted here so the pair travels together.
|
|
531
|
-
expect(shouldSync(path.join(hqRoot, "node_modules/react/index.js"))).toBe(false);
|
|
532
|
-
});
|
|
533
|
-
it("permissive mode: macOS Finder Icon\\r files never enter the walk", () => {
|
|
534
|
-
// A CR is a control character, so the vault key validator rejects the key
|
|
535
|
-
// (INVALID_KEY_CONTROL_CHARS) and the upload can only ever throw. Dropping
|
|
536
|
-
// them during the walk is what keeps them off the upload path entirely.
|
|
537
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
538
|
-
expect(shouldSync(path.join(hqRoot, "Icon\r"))).toBe(false);
|
|
539
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/Icon\r"))).toBe(false);
|
|
540
|
-
expect(shouldSync(path.join(hqRoot, ".agents/Icon\r"))).toBe(false);
|
|
541
|
-
// Caught at any depth, like the other OS-cruft exclusions.
|
|
542
|
-
expect(shouldSync(path.join(hqRoot, "a/b/c/d/Icon\r"))).toBe(false);
|
|
543
|
-
});
|
|
544
|
-
it("permissive mode: a real file named Icons still syncs", () => {
|
|
545
|
-
// Regression guard for the `Icon?` gitignore workaround, whose `?`
|
|
546
|
-
// single-char wildcard also matches Icons / Icon1 / IconX. This exclusion
|
|
547
|
-
// matches the exact Finder byte sequence instead, so real content survives.
|
|
548
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
549
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/Icons"))).toBe(true);
|
|
550
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/Icon"))).toBe(true);
|
|
551
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/Icon1"))).toBe(true);
|
|
552
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/Icons.md"))).toBe(true);
|
|
553
|
-
});
|
|
554
|
-
it("a literal Icon+CR line in .hqignore does NOT reach the ignore lib", () => {
|
|
555
|
-
// This is why the exclusion is a predicate and not a DEFAULT_IGNORES
|
|
556
|
-
// entry. ignore@5 strips a trailing CR from a pattern line, so the
|
|
557
|
-
// spelling git itself requires silently never matches. Pinning the
|
|
558
|
-
// upstream behavior here means a future ignore-lib bump that changes it
|
|
559
|
-
// surfaces as a failing test rather than a silent double-exclusion.
|
|
560
|
-
// (.hqignore is the sync-config channel; .gitignore is not consulted.)
|
|
561
|
-
fs.writeFileSync(path.join(hqRoot, ".hqignore"), "Icon\r\n");
|
|
562
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
563
|
-
// Still excluded — by the predicate, not by the pattern.
|
|
564
|
-
expect(shouldSync(path.join(hqRoot, "Icon\r"))).toBe(false);
|
|
565
|
-
// Proof the pattern itself is inert: it did not take `Icons` with it.
|
|
566
|
-
expect(shouldSync(path.join(hqRoot, "Icons"))).toBe(true);
|
|
567
|
-
});
|
|
568
|
-
it("repos/ exclusion is root-anchored to hqRoot (DEV-1791)", () => {
|
|
569
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
570
|
-
expect(shouldSync(path.join(hqRoot, "repos/private/hq-cloud/src/x.ts"))).toBe(false);
|
|
571
|
-
expect(shouldSync(path.join(hqRoot, "repos/public/hq-core/README.md"))).toBe(false);
|
|
572
|
-
expect(shouldSync(path.join(hqRoot, "companies/lutiq/knowledge/repos/dev-docs-mcp/overview.md"))).toBe(true);
|
|
573
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/knowledge/repos/foo/notes.md"))).toBe(true);
|
|
574
|
-
expect(shouldSync(path.join(hqRoot, "companies/lutiq/knowledge/repos"), true)).toBe(true);
|
|
575
|
-
});
|
|
576
|
-
it("excludes only repositories directly under a company root", () => {
|
|
577
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
578
|
-
expect(shouldSync(path.join(hqRoot, "companies", "acme", "repos", "x", "a.md"))).toBe(false);
|
|
579
|
-
expect(shouldSync(path.join(hqRoot, "companies", "acme", "repos"), true)).toBe(false);
|
|
580
|
-
expect(shouldSync(path.join(hqRoot, "companies", "acme", "knowledge", "repos", "a.md"))).toBe(true);
|
|
581
|
-
expect(shouldSync(path.join(hqRoot, "companies", "acme", "knowledge", "repos"), true)).toBe(true);
|
|
582
|
-
});
|
|
583
|
-
it("permissive mode: .hqignore patterns are honored", () => {
|
|
584
|
-
fs.writeFileSync(path.join(hqRoot, ".hqignore"), "companies/*/data/\n");
|
|
585
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
586
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/data/x.csv"))).toBe(false);
|
|
587
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/notes.md"))).toBe(true);
|
|
588
|
-
});
|
|
589
|
-
it("visibility fires on an OVER-BROAD exclusion (real filter + recorder, DEV-1791)", () => {
|
|
590
|
-
// Simulate the regressed over-broad bug: an un-anchored `repos/` in
|
|
591
|
-
// .hqignore that matches ANY nested repos segment — exactly what
|
|
592
|
-
// silently ate /discover knowledge under companies/*/knowledge/repos/
|
|
593
|
-
// before the root-anchor fix. The visibility recorder must surface the
|
|
594
|
-
// dropped knowledge as NOTEWORTHY while staying quiet on build noise.
|
|
595
|
-
fs.writeFileSync(path.join(hqRoot, ".hqignore"), "repos/\n");
|
|
596
|
-
const ignoreFilter = createIgnoreFilter(hqRoot);
|
|
597
|
-
const noteworthy = [];
|
|
598
|
-
let total = 0;
|
|
599
|
-
const recorded = wrapFilterWithIgnoreVisibility(ignoreFilter, hqRoot, (rel) => { noteworthy.push(rel); }, () => { total++; });
|
|
600
|
-
// Knowledge under a nested repos/ is dropped by the over-broad rule and
|
|
601
|
-
// is genuine content → captured as noteworthy.
|
|
602
|
-
expect(recorded(path.join(hqRoot, "companies/indigo/knowledge/repos/foo/notes.md"))).toBe(false);
|
|
603
|
-
// Build noise is also excluded but is EXPECTED → counted, not noteworthy.
|
|
604
|
-
expect(recorded(path.join(hqRoot, "node_modules/react/index.js"))).toBe(false);
|
|
605
|
-
// Ordinary knowledge that the filter ALLOWS fires nothing.
|
|
606
|
-
expect(recorded(path.join(hqRoot, "companies/indigo/knowledge/overview.md"))).toBe(true);
|
|
607
|
-
expect(noteworthy).toEqual(["companies/indigo/knowledge/repos/foo/notes.md"]);
|
|
608
|
-
expect(total).toBe(2); // both exclusions counted; only one is noteworthy
|
|
609
|
-
});
|
|
610
|
-
it("v15+ layout (core/core.yaml present): root core.yaml is ignored, nested core/core.yaml syncs", () => {
|
|
611
|
-
// On v15+ the scaffold/version manifest lives at `core/core.yaml` (a real
|
|
612
|
-
// project file that DOES sync). Any root-level `core.yaml` here is a stale
|
|
613
|
-
// per-machine duplicate that must never round-trip — pulling another
|
|
614
|
-
// machine's marker would corrupt root discovery. The exclusion is anchored
|
|
615
|
-
// (`/core.yaml`) so it never touches `core/core.yaml`.
|
|
616
|
-
fs.mkdirSync(path.join(hqRoot, "core"), { recursive: true });
|
|
617
|
-
fs.writeFileSync(path.join(hqRoot, "core/core.yaml"), 'version: 1\nhqVersion: "15.0.12"\n');
|
|
618
|
-
fs.writeFileSync(path.join(hqRoot, "core.yaml"), 'version: 1\nhqVersion: "15.0.12"\n');
|
|
619
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
620
|
-
expect(shouldSync(path.join(hqRoot, "core.yaml"))).toBe(false);
|
|
621
|
-
expect(shouldSync(path.join(hqRoot, "core/core.yaml"))).toBe(true);
|
|
622
|
-
});
|
|
623
|
-
it("v12–v14 layout (no core/core.yaml): root core.yaml IS the manifest and MUST sync", () => {
|
|
624
|
-
// Regression for DEV-1729 / the ~98 "no core.yaml in vault, version
|
|
625
|
-
// undetectable" sync users. On v12–v14 roots there is NO `core/core.yaml`
|
|
626
|
-
// — the ROOT `core.yaml` is the scaffold/version manifest. The old
|
|
627
|
-
// unconditional `/core.yaml` exclusion silently dropped it (while
|
|
628
|
-
// computePersonalVaultPaths still enumerated it), so the vault never
|
|
629
|
-
// received a version marker. With no `core/core.yaml` on disk, the root
|
|
630
|
-
// `core.yaml` must round-trip like any other top-level file.
|
|
631
|
-
fs.writeFileSync(path.join(hqRoot, "core.yaml"), 'version: 1\nhqVersion: "14.0.0"\n');
|
|
632
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
633
|
-
expect(shouldSync(path.join(hqRoot, "core.yaml"))).toBe(true);
|
|
634
|
-
});
|
|
635
|
-
it("permissive mode: modules/modules.yaml manifest is ignored", () => {
|
|
636
|
-
// modules.yaml is the local modules-resolution manifest. Per-machine
|
|
637
|
-
// state, never synced.
|
|
638
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
639
|
-
expect(shouldSync(path.join(hqRoot, "modules/modules.yaml"))).toBe(false);
|
|
640
|
-
});
|
|
641
|
-
it("permissive mode: per-company company.yaml is ignored", () => {
|
|
642
|
-
// company.yaml is written locally on first sync from the entity context.
|
|
643
|
-
// Round-tripping it would let one machine's identity overwrite another's.
|
|
644
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
645
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/company.yaml"))).toBe(false);
|
|
646
|
-
expect(shouldSync(path.join(hqRoot, "company.yaml"))).toBe(false);
|
|
647
|
-
});
|
|
648
|
-
it("permissive mode: root INDEX.md, tools INDEX.md, and policies/_digest.md are ignored", () => {
|
|
649
|
-
// Root INDEX.md and companies/*/tools/INDEX.md are regenerated locally.
|
|
650
|
-
// policies/_digest.md is the policies digest builder output.
|
|
651
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
652
|
-
expect(shouldSync(path.join(hqRoot, "INDEX.md"))).toBe(false);
|
|
653
|
-
expect(shouldSync(path.join(hqRoot, "companies/ghq/tools/INDEX.md"))).toBe(false);
|
|
654
|
-
expect(shouldSync(path.join(hqRoot, "policies/_digest.md"))).toBe(false);
|
|
655
|
-
});
|
|
656
|
-
it("syncs hand-authored INDEX.md under company knowledge (feedback 2292)", () => {
|
|
657
|
-
// Unanchored INDEX.md used to drop every file of that name at any depth.
|
|
658
|
-
// Crayads lost 14 hand-written knowledge maps (101 KB) that way: sync
|
|
659
|
-
// reported success and only an ignore-excluded ndjson event named one
|
|
660
|
-
// lowercase index.md. These are user content, not the tools indexer.
|
|
661
|
-
const knowledgeDir = path.join(hqRoot, "companies/crayads/knowledge/librarys/visual-formats/anleitungen");
|
|
662
|
-
fs.mkdirSync(knowledgeDir, { recursive: true });
|
|
663
|
-
const handWrittenUpper = path.join(hqRoot, "companies/crayads/knowledge/librarys/personas/INDEX.md");
|
|
664
|
-
const handWrittenLower = path.join(knowledgeDir, "index.md");
|
|
665
|
-
fs.mkdirSync(path.dirname(handWrittenUpper), { recursive: true });
|
|
666
|
-
fs.writeFileSync(handWrittenUpper, "# Personas\n\nHand-authored navigation.\n");
|
|
667
|
-
fs.writeFileSync(handWrittenLower, "# Anleitungen\n\nHand-authored navigation.\n");
|
|
668
|
-
const generated = path.join(hqRoot, "companies/crayads/knowledge/INDEX.md");
|
|
669
|
-
fs.writeFileSync(generated, "# Knowledge\n\n> Auto-generated. Updated: 2026-09-16\n\n| Name | Description |\n|------|-------------|\n");
|
|
670
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
671
|
-
const reference = createIgnoreFilterReference(hqRoot);
|
|
672
|
-
expect(shouldSync(handWrittenUpper)).toBe(true);
|
|
673
|
-
expect(shouldSync(handWrittenLower)).toBe(true);
|
|
674
|
-
expect(shouldSync(generated)).toBe(false);
|
|
675
|
-
expect(reference(handWrittenUpper)).toBe(true);
|
|
676
|
-
expect(reference(handWrittenLower)).toBe(true);
|
|
677
|
-
expect(reference(generated)).toBe(false);
|
|
678
|
-
// Visibility: generated copies stay expected (no false "review this"
|
|
679
|
-
// warning). Hand-authored files are allowed, so they never hit it.
|
|
680
|
-
expect(isExpectedIgnore("companies/crayads/knowledge/INDEX.md")).toBe(true);
|
|
681
|
-
expect(isExpectedIgnore("companies/crayads/knowledge/librarys/visual-formats/anleitungen/index.md")).toBe(true);
|
|
682
|
-
});
|
|
683
|
-
it("permissive mode: .claude/worktrees/ is ignored", () => {
|
|
684
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
685
|
-
expect(shouldSync(path.join(hqRoot, ".claude/worktrees/foo/file.ts"))).toBe(false);
|
|
686
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/.claude/worktrees/bar/x.md"))).toBe(false);
|
|
687
|
-
// The .claude/ dir itself (commands, skills, hooks) still syncs.
|
|
688
|
-
expect(shouldSync(path.join(hqRoot, ".claude/skills/foo/SKILL.md"))).toBe(true);
|
|
689
|
-
});
|
|
690
|
-
it("permissive mode: workspace/worktrees/ is ignored without an .hqignore entry", () => {
|
|
691
|
-
// Regression: this was excluded ONLY when an operator remembered to list it
|
|
692
|
-
// in .hqignore. On Outpost 2 (2026-09-04) it was absent, so the sync runner
|
|
693
|
-
// descended into 23 live fleet worktrees — 289,141 files / 4.2 GB — and,
|
|
694
|
-
// because this same filter drives chokidar's descent predicate, held
|
|
695
|
-
// 113,389 inotify watches and 3.65 GB RSS over a tree the hq-sentry fleet
|
|
696
|
-
// creates and deletes continuously. Same lifecycle as .claude/worktrees/,
|
|
697
|
-
// so it belongs in DEFAULT_IGNORES, not in an operator's config.
|
|
698
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
699
|
-
expect(shouldSync(path.join(hqRoot, "workspace/worktrees/hq-pro/task-1/src/a.ts"))).toBe(false);
|
|
700
|
-
expect(shouldSync(path.join(hqRoot, "workspace/worktrees/wf-hq-sentry-abc/node_modules/x/y.js"))).toBe(false);
|
|
701
|
-
expect(shouldSync(path.join(hqRoot, "workspace/worktrees"), true)).toBe(false);
|
|
702
|
-
// Root-anchored, following the /repos/ precedent (DEV-1791): a nested dir
|
|
703
|
-
// legitimately named workspace/worktrees inside synced knowledge must NOT
|
|
704
|
-
// be dropped.
|
|
705
|
-
expect(shouldSync(path.join(hqRoot, "personal/knowledge/repo-x/workspace/worktrees/notes.md"))).toBe(true);
|
|
706
|
-
// The rule must not broaden to workspace/ — the rest of workspace still syncs.
|
|
707
|
-
expect(shouldSync(path.join(hqRoot, "workspace/reports/outpost2.md"))).toBe(true);
|
|
708
|
-
expect(shouldSync(path.join(hqRoot, "workspace/threads/handoff.json"))).toBe(true);
|
|
709
|
-
});
|
|
710
|
-
it("permissive mode: workspace/locks/ is ignored, and the SYNCED carve-outs are not", () => {
|
|
711
|
-
// Lock files are per-host mutexes held by a running process: another machine
|
|
712
|
-
// can neither hold nor release one.
|
|
713
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
714
|
-
expect(shouldSync(path.join(hqRoot, "workspace/locks/run-project.lock"))).toBe(false);
|
|
715
|
-
expect(shouldSync(path.join(hqRoot, "workspace/locks"), true)).toBe(false);
|
|
716
|
-
// Root-anchored (the DEV-1791 lesson, as with /workspace/worktrees/): a
|
|
717
|
-
// nested `workspace/locks` inside synced knowledge is real content.
|
|
718
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/knowledge/workspace/locks/notes.md"))).toBe(true);
|
|
719
|
-
// ⚠️ These two were the audit's two LARGEST finding classes and are the
|
|
720
|
-
// obvious things to ignore — and they must NOT be. `.session-logs/` is the
|
|
721
|
-
// cross-machine session-capture carve-out and `workspace/threads/` carries
|
|
722
|
-
// the DEV-1778 continuity pointer that makes a `/handoff` resume on another
|
|
723
|
-
// machine. Their audit noise is a REPORTING problem, suppressed server-side.
|
|
724
|
-
expect(shouldSync(path.join(hqRoot, "workspace/.session-logs/2026-09-07/s.jsonl"))).toBe(true);
|
|
725
|
-
expect(shouldSync(path.join(hqRoot, "workspace/threads/handoff.json"))).toBe(true);
|
|
726
|
-
});
|
|
727
|
-
it("permissive mode: client-written conflict copies are ignored", () => {
|
|
728
|
-
// The client writes `<name>.conflict-<ts>-<id>` itself when it cannot merge.
|
|
729
|
-
// 874 audit findings, 732 of them verdict-flipping `local_untracked`.
|
|
730
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
731
|
-
expect(shouldSync(path.join(hqRoot, "plan.conflict-20260907T101112Z-a1b2c3.md"))).toBe(false);
|
|
732
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/knowledge/n.conflict-2026-09-07-9f2a.md"))).toBe(false);
|
|
733
|
-
// Must NOT swallow a user file that merely contains the word: the digit
|
|
734
|
-
// class after `conflict-` and the required second hyphen are what keep
|
|
735
|
-
// `notes.conflict-resolution.md` syncing.
|
|
736
|
-
expect(shouldSync(path.join(hqRoot, "notes.conflict-resolution.md"))).toBe(true);
|
|
737
|
-
});
|
|
738
|
-
it("permissive mode: .skill-media/ (cloud-only skill images) is ignored (US-014)", () => {
|
|
739
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
740
|
-
// Skill hero images are cloud-only — excluded from push AND pull at any depth.
|
|
741
|
-
expect(shouldSync(path.join(hqRoot, ".claude/skills/lead-qualifier/.skill-media/hero.png"))).toBe(false);
|
|
742
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/skills/foo/.skill-media/cover.jpg"))).toBe(false);
|
|
743
|
-
expect(shouldSync(path.join(hqRoot, "skills/bar/.skill-media"), true)).toBe(false);
|
|
744
|
-
// The skill's SKILL.md and other content still sync — the rule is scoped to
|
|
745
|
-
// the media dir only, never the skill.
|
|
746
|
-
expect(shouldSync(path.join(hqRoot, ".claude/skills/lead-qualifier/SKILL.md"))).toBe(true);
|
|
747
|
-
});
|
|
748
|
-
it("permissive mode: .hq-* internal state is ignored, .hqignore family still sync", () => {
|
|
749
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
750
|
-
// Internal state files that must never round-trip through the bucket.
|
|
751
|
-
expect(shouldSync(path.join(hqRoot, ".hq-sync.pid"))).toBe(false);
|
|
752
|
-
expect(shouldSync(path.join(hqRoot, ".hq-sync-journal.json"))).toBe(false);
|
|
753
|
-
expect(shouldSync(path.join(hqRoot, ".hq-sync-state.json"))).toBe(false);
|
|
754
|
-
expect(shouldSync(path.join(hqRoot, ".hq-embeddings-pending.json"))).toBe(false);
|
|
755
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/.hq-foo.json"))).toBe(false);
|
|
756
|
-
expect(shouldSync(path.join(hqRoot, ".hq-cache/blob.bin"))).toBe(false);
|
|
757
|
-
// Sync-config files still sync (no hyphen, doesn't match `.hq-*`).
|
|
758
|
-
expect(shouldSync(path.join(hqRoot, ".hqignore"))).toBe(true);
|
|
759
|
-
expect(shouldSync(path.join(hqRoot, ".hqsyncignore"))).toBe(true);
|
|
760
|
-
expect(shouldSync(path.join(hqRoot, ".hqinclude"))).toBe(true);
|
|
761
|
-
});
|
|
762
|
-
it("permissive mode: .claude/state/ and .claude/audit/ are per-host, never synced", () => {
|
|
763
|
-
// 5.34.0 live cross-machine sync test (macOS ↔ Lightsail) wrote
|
|
764
|
-
// ~25 of the 30 conflict mirrors directly to these paths. They're
|
|
765
|
-
// session-/host-scoped by design:
|
|
766
|
-
// - .claude/state/active-session-project: the active project
|
|
767
|
-
// pointer for the currently-foregrounded Claude Code session.
|
|
768
|
-
// - .claude/state/auto-session-project-<sessionUuid>: one
|
|
769
|
-
// marker per spawned session; entirely host-local.
|
|
770
|
-
// - .claude/audit/: hook-decision audit log + suppressions
|
|
771
|
-
// config; host-specific by nature.
|
|
772
|
-
// Syncing produces guaranteed conflicts per machine per session.
|
|
773
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
774
|
-
expect(shouldSync(path.join(hqRoot, ".claude/state/active-session-project"))).toBe(false);
|
|
775
|
-
expect(shouldSync(path.join(hqRoot, ".claude/state/auto-session-project-571177ff-59bb-4728-8670-0bf66a6410a5"))).toBe(false);
|
|
776
|
-
expect(shouldSync(path.join(hqRoot, ".claude/audit/instructions.md"))).toBe(false);
|
|
777
|
-
expect(shouldSync(path.join(hqRoot, ".claude/audit/suppressions.yaml"))).toBe(false);
|
|
778
|
-
expect(shouldSync(path.join(hqRoot, ".claude/state"), true)).toBe(false);
|
|
779
|
-
expect(shouldSync(path.join(hqRoot, ".claude/audit"), true)).toBe(false);
|
|
780
|
-
// Nested .claude/ inside a company also stays local — same anchor
|
|
781
|
-
// shape as the .claude/worktrees/ rule directly above.
|
|
782
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/.claude/state/active-session-project"))).toBe(false);
|
|
783
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/.claude/audit/instructions.md"))).toBe(false);
|
|
784
|
-
// The .claude/ dir's other contents (commands, skills, hooks) still
|
|
785
|
-
// sync — the rule MUST NOT broaden to .claude/.
|
|
786
|
-
expect(shouldSync(path.join(hqRoot, ".claude/skills/foo/SKILL.md"))).toBe(true);
|
|
787
|
-
expect(shouldSync(path.join(hqRoot, ".claude/hooks/foo.sh"))).toBe(true);
|
|
788
|
-
});
|
|
789
|
-
it("permissive mode: .claude/settings*.json is machine-local, never synced (qmd PATH regression)", () => {
|
|
790
|
-
// 2026-07-01 e2e-mac report (20260701-qmd-path): cloud sync pulled the
|
|
791
|
-
// operator's .claude/settings.json over a fresh install's copy ~40s
|
|
792
|
-
// after install, byte-identical to the source machine — reverting the
|
|
793
|
-
// installer's day-one env.PATH fix and propagating one host's PATH
|
|
794
|
-
// snapshot to every machine/teammate. This is the recurrence mechanism
|
|
795
|
-
// behind the recurring "qmd: command not found" reports. Settings are
|
|
796
|
-
// machine-local (PATH snapshot, model prefs) and must never round-trip
|
|
797
|
-
// in EITHER direction — the pull planner consults this same filter, so
|
|
798
|
-
// an existing vault copy is also never applied locally.
|
|
799
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
800
|
-
expect(shouldSync(path.join(hqRoot, ".claude/settings.json"))).toBe(false);
|
|
801
|
-
expect(shouldSync(path.join(hqRoot, ".claude/settings.local.json"))).toBe(false);
|
|
802
|
-
// Nested .claude/ inside a company stays local too — same anchor shape
|
|
803
|
-
// as the state/audit rules above.
|
|
804
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/.claude/settings.json"))).toBe(false);
|
|
805
|
-
// Siblings still sync — the rule must not broaden past settings files.
|
|
806
|
-
expect(shouldSync(path.join(hqRoot, ".claude/skills/foo/SKILL.md"))).toBe(true);
|
|
807
|
-
expect(shouldSync(path.join(hqRoot, ".claude/hooks/foo.sh"))).toBe(true);
|
|
808
|
-
expect(shouldSync(path.join(hqRoot, ".claude/CLAUDE.md"))).toBe(true);
|
|
809
|
-
});
|
|
810
|
-
it("permissive mode: .hq/ directory is per-host state, never synced (Bug #1/#6/#8)", () => {
|
|
811
|
-
// Bug catalog: `.hq/install-manifest.json`, `.hq/machine-id`, and
|
|
812
|
-
// `.hq/machine.json` are per-host source-of-truth files. The original
|
|
813
|
-
// `DEFAULT_IGNORES` only covered the `.hq-*` wildcard (with hyphen) and
|
|
814
|
-
// explicitly left the `.hq/` directory unaffected — so the install
|
|
815
|
-
// manifest and machine-id round-tripped through S3 between hosts,
|
|
816
|
-
// breaking the per-machine identity contract that the 5.33.0
|
|
817
|
-
// machine-id fix relies on.
|
|
818
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
819
|
-
expect(shouldSync(path.join(hqRoot, ".hq/install-manifest.json"))).toBe(false);
|
|
820
|
-
expect(shouldSync(path.join(hqRoot, ".hq/machine-id"))).toBe(false);
|
|
821
|
-
expect(shouldSync(path.join(hqRoot, ".hq/machine.json"))).toBe(false);
|
|
822
|
-
expect(shouldSync(path.join(hqRoot, ".hq/config.json"))).toBe(false);
|
|
823
|
-
expect(shouldSync(path.join(hqRoot, ".hq"), true)).toBe(false);
|
|
824
|
-
// Nested .hq/ inside a company also stays local (per-host scoping).
|
|
825
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/.hq/config.json"))).toBe(false);
|
|
826
|
-
});
|
|
827
|
-
it("excludes root .tmp-* build caches without excluding nested user content", () => {
|
|
828
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
829
|
-
const rootCache = path.join(hqRoot, ".tmp-c180-base");
|
|
830
|
-
expect(shouldSync(rootCache, true)).toBe(false);
|
|
831
|
-
expect(shouldSync(path.join(rootCache, "node-compile-cache", "entry"))).toBe(false);
|
|
832
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/knowledge/.tmp-c180-base"), true)).toBe(true);
|
|
833
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/knowledge/.tmp-c180-base/notes.md"))).toBe(true);
|
|
834
|
-
});
|
|
835
|
-
it("allowlist mode: presence of .hqinclude switches to opt-in", () => {
|
|
836
|
-
fs.writeFileSync(path.join(hqRoot, ".hqinclude"), "companies/*/knowledge/\ncompanies/*/projects/\n");
|
|
837
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
838
|
-
// Allowlisted paths sync.
|
|
839
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/knowledge/foo.md"))).toBe(true);
|
|
840
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/projects/p1/prd.json"))).toBe(true);
|
|
841
|
-
// Anything else stays local — this is the privacy guarantee.
|
|
842
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/data/leads.csv"))).toBe(false);
|
|
843
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/workers/cmo/skill.md"))).toBe(false);
|
|
844
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/settings/aws.json"))).toBe(false);
|
|
845
|
-
expect(shouldSync(path.join(hqRoot, "personal/journal/2026-04-26.md"))).toBe(false);
|
|
846
|
-
});
|
|
847
|
-
it("allowlist mode: directory entries match dir-suffix include patterns (walker descent)", () => {
|
|
848
|
-
// Regression: walkDir tests directory entries when deciding whether to
|
|
849
|
-
// descend. The `ignore` lib only matches dir-only patterns like
|
|
850
|
-
// `companies/*/knowledge/` against paths that end with `/`. The filter
|
|
851
|
-
// accepts an `isDir` hint and appends the trailing slash before probing,
|
|
852
|
-
// mirroring how git itself decides (it knows from the index whether
|
|
853
|
-
// each entry is a tree or a blob). Without the hint the walker would
|
|
854
|
-
// see `companies/indigo/knowledge` -> not allowed -> never descend ->
|
|
855
|
-
// entire subtree silently lost. Files inside still work because
|
|
856
|
-
// `ignore` walks ancestors internally; the bug only bites the descent
|
|
857
|
-
// decision for directory entries.
|
|
858
|
-
fs.writeFileSync(path.join(hqRoot, ".hqinclude"), "companies/*/knowledge/\ncompanies/*/projects/\n.claude/\n");
|
|
859
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
860
|
-
// Directory entries must be allowed when the caller hints isDir=true.
|
|
861
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/knowledge"), true)).toBe(true);
|
|
862
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/projects"), true)).toBe(true);
|
|
863
|
-
expect(shouldSync(path.join(hqRoot, ".claude"), true)).toBe(true);
|
|
864
|
-
// Files inside still resolve correctly without the hint.
|
|
865
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/knowledge/x.md"))).toBe(true);
|
|
866
|
-
expect(shouldSync(path.join(hqRoot, ".claude/skills/foo/SKILL.md"))).toBe(true);
|
|
867
|
-
// Machine-local settings stay excluded even inside an allowlisted
|
|
868
|
-
// subtree — exclusion layers subtract on top of the allowlist.
|
|
869
|
-
expect(shouldSync(path.join(hqRoot, ".claude/settings.json"))).toBe(false);
|
|
870
|
-
// Non-allowlisted siblings stay excluded — privacy guarantee intact.
|
|
871
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/data"), true)).toBe(false);
|
|
872
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/workers"), true)).toBe(false);
|
|
873
|
-
});
|
|
874
|
-
it("allowlist mode: walker descends through intermediate ancestor dirs", () => {
|
|
875
|
-
// Full gitignore semantics: a walker starting at hqRoot must be able to
|
|
876
|
-
// descend through `companies/` and `companies/indigo/` to reach the
|
|
877
|
-
// allowlisted leaf `companies/*/knowledge/`. The ancestor matcher
|
|
878
|
-
// permits this for dir-mode queries while keeping files directly inside
|
|
879
|
-
// those intermediate dirs excluded — privacy invariant intact.
|
|
880
|
-
fs.writeFileSync(path.join(hqRoot, ".hqinclude"), "companies/*/knowledge/\n");
|
|
881
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
882
|
-
// Intermediate directories along the path to the leaf are descent-allowed.
|
|
883
|
-
expect(shouldSync(path.join(hqRoot, "companies"), true)).toBe(true);
|
|
884
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo"), true)).toBe(true);
|
|
885
|
-
// The leaf itself is allowed.
|
|
886
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/knowledge"), true)).toBe(true);
|
|
887
|
-
// Files directly inside intermediate dirs are still excluded — only the
|
|
888
|
-
// dir is descent-allowed, the dir's loose files are not.
|
|
889
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/notes.md"))).toBe(false);
|
|
890
|
-
expect(shouldSync(path.join(hqRoot, "companies/README.md"))).toBe(false);
|
|
891
|
-
// Files inside the allowlisted leaf still sync.
|
|
892
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/knowledge/x.md"))).toBe(true);
|
|
893
|
-
});
|
|
894
|
-
it("dir-only ignore patterns honor the isDir hint symmetrically", () => {
|
|
895
|
-
// Gitignore semantics: a trailing-slash pattern (`foo/`) matches only
|
|
896
|
-
// directories, never files of the same name. The filter applies this
|
|
897
|
-
// on BOTH layers — exclude and include — by appending `/` to the probe
|
|
898
|
-
// when the caller passes isDir=true, and leaving it as-is otherwise.
|
|
899
|
-
// This guarantees:
|
|
900
|
-
// - a directory `node_modules` is excluded (descent skipped),
|
|
901
|
-
// - but a regular file literally named `node_modules` is NOT
|
|
902
|
-
// mistakenly excluded by the dir-only pattern.
|
|
903
|
-
fs.writeFileSync(path.join(hqRoot, ".hqignore"), "build/\n");
|
|
904
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
905
|
-
// Directory `build` matches the dir-only exclusion.
|
|
906
|
-
expect(shouldSync(path.join(hqRoot, "build"), true)).toBe(false);
|
|
907
|
-
// A file literally named `build` (not a dir) does NOT match `build/`.
|
|
908
|
-
// This is the asymmetry that previous PR comments warned about and
|
|
909
|
-
// that the isDir hint resolves cleanly.
|
|
910
|
-
expect(shouldSync(path.join(hqRoot, "build"), false)).toBe(true);
|
|
911
|
-
// Default-call (no hint) is treated as "not a directory" — matches
|
|
912
|
-
// gitignore's blob-default and preserves the file-side guarantee.
|
|
913
|
-
expect(shouldSync(path.join(hqRoot, "build"))).toBe(true);
|
|
914
|
-
});
|
|
915
|
-
it("allowlist mode: exclusion layers still subtract on top", () => {
|
|
916
|
-
// Even when a subtree is allowlisted, default ignores like node_modules/
|
|
917
|
-
// and .env must still apply. Otherwise an allowlisted subdir would sync
|
|
918
|
-
// gigabytes of dependency junk or leak secret env files.
|
|
919
|
-
fs.writeFileSync(path.join(hqRoot, ".hqinclude"), "companies/*/projects/\n");
|
|
920
|
-
const shouldSync = createIgnoreFilter(hqRoot);
|
|
921
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/projects/p1/prd.json"))).toBe(true);
|
|
922
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/projects/p1/node_modules/react/index.js"))).toBe(false);
|
|
923
|
-
expect(shouldSync(path.join(hqRoot, "companies/indigo/projects/p1/.env"))).toBe(false);
|
|
924
|
-
});
|
|
925
|
-
});
|
|
926
|
-
//# sourceMappingURL=ignore.test.js.map
|