chore(gates): detect new native duplication with jscpd

Merged
TH
10h ago
+668-1

Summary

Native changes under the scan roots in .jscpd-native.json select jscpd without a second extension list. Weak mode at 50 tokens / 5 lines accepts 82 baseline clones and rejects new fingerprints or extra copies. CI scans Swift, Objective-C headers/implementations, Kotlin, Java and Python.

Keeps configuration, baseline, policy tests and CI gates. Removes maintained prototype tooling; experiment notes contain exact commands and measured revision for eight settings across native code and the Duo pair. Documents explicit pruning when clones are removed. Restores unrelated manifest ordering.

11 files changed. Scope: duplication tooling only. No linked issue.

Validation

  • Head: e14a19edeed7a14e3e72dcc9abb6603e607d44ea; rebased onto 21f3f50a90f21bf8f994e742cbb7dd295f255d6c. Range-diff preserves the prior three commits.
  • pnpm check:affected --run --head e14a19edeed7a14e3e72dcc9abb6603e607d44ea: passed; receipt exactCommit=true, 39 passed, 25 skipped, 2 deduplicated.
  • Runtime: 1,994 files and 17,347 tests passed, 1 skipped. Native policy: 10 passed; selector: 82 passed.
  • Isolated proof: old extension filter fails .mm; configured root expansion passes. Pruning test demonstrates stale acceptance, refresh, then rejected reintroduction. Disposable checkout removed.
  • All 16 documented scans reproduce the historical matrix. Worker counts 1, 2 and auto produce identical baselines. Refresh replaces three fingerprints changed upstream; native source matches main.
  • New-head CI pending; GitHub owns Linux execution, coverage and native/device lanes. Small or partially edited copies remain detection limits.