@thomasminh1995/depverdict 0.6.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +518 -0
  3. package/bin/depverdict.js +7 -0
  4. package/bin/upgradelens.js +7 -0
  5. package/docs/GR-01-Semantic-Grounding-Failure-Analysis.md +309 -0
  6. package/docs/GR-02-Versioned-Action-Evaluation-Criteria.md +187 -0
  7. package/docs/GR-03-Extractive-Contract-Safety-Experiment.md +242 -0
  8. package/docs/GR-04-Versioned-Production-Extractive-Contract.md +154 -0
  9. package/docs/IA-01-Repository-Usage-Discovery.md +122 -0
  10. package/docs/IA-02-Repository-Impact-Analysis.md +118 -0
  11. package/docs/IA-03-Repository-Impact-Evidence.md +160 -0
  12. package/docs/IA-04-CLI-Orchestration.md +235 -0
  13. package/docs/IA-05-Real-Provider-Validation.md +235 -0
  14. package/docs/IA-05-VinGrade-Validation.md +339 -0
  15. package/docs/MVP-01.md +48 -0
  16. package/docs/MVP-02-Architecture.md +536 -0
  17. package/docs/MVP-02-CLI-HTTP-Runtime.md +50 -0
  18. package/docs/MVP-02-HTTP-Lifecycle.md +37 -0
  19. package/docs/MVP-02-Knowledge-Manifest-Generation.md +75 -0
  20. package/docs/MVP-02-Knowledge-Manifest.md +279 -0
  21. package/docs/MVP-02-Knowledge-Research-Orchestration.md +62 -0
  22. package/docs/MVP-02-Knowledge-Store.md +87 -0
  23. package/docs/MVP-02-PyPI-Registry-Adapter.md +97 -0
  24. package/docs/MVP-02-Research-Planning.md +196 -0
  25. package/docs/MVP-02-Source-Provenance.md +81 -0
  26. package/docs/MVP-02-npm-Registry-Adapter.md +99 -0
  27. package/docs/RR-01-End-to-End-and-Real-Provider-Validation.md +393 -0
  28. package/docs/RR-01-RERUN-Extractive-Contract-Validation.md +566 -0
  29. package/docs/RR-02-Full-Product-Workflow-and-Developer-CLI-UX-Review.md +35 -0
  30. package/docs/RR02-FIX-01-Persistent-Qualification-Resolution.md +32 -0
  31. package/docs/RR02-FIX-02-Stage-aware-CLI-Progress-and-Heartbeat.md +28 -0
  32. package/docs/RR02-FIX-03-npm-Capture-Evidence-Exclusion.md +33 -0
  33. package/docs/RR02-FIX-03A-Complete-Package-Exclusion-and-Evidence-Commit.md +223 -0
  34. package/docs/RR02-FIX-04-Event-loop-safe-Heartbeat.md +393 -0
  35. package/docs/RR02-FIX-05-Materialize-Persisted-Qualification.md +207 -0
  36. package/docs/RR02-RERUN-CLI-Qualification-Progress-UX-and-Package-Validation.md +342 -0
  37. package/docs/VinGrade-MVP-02-Validation.md +480 -0
  38. package/docs/VinGrade-RC02-Live-Validation.md +273 -0
  39. package/docs/ai-capability-discovery.md +573 -0
  40. package/docs/ai-engineering-production-readiness.md +390 -0
  41. package/docs/ai-engineering-review.md +251 -0
  42. package/docs/ai-runtime-governance-discovery.md +754 -0
  43. package/docs/architecture-overview.md +78 -0
  44. package/docs/cli-progress.md +111 -0
  45. package/docs/decisions/diff-01-brand-distribution-identity.md +450 -0
  46. package/docs/decisions/diff-02-identity-compatibility-contract.md +274 -0
  47. package/docs/decisions/diff-03-repository-docs-community-migration.md +165 -0
  48. package/docs/decisions/diff-04-release-evidence-gap-acceptance.md +110 -0
  49. package/docs/discovery/mvp-05-ai-migration-planning-discovery.md +350 -0
  50. package/docs/gateway-runtime-discovery.md +614 -0
  51. package/docs/live-ai-validation.md +299 -0
  52. package/docs/migration-planning-qualification-resolution.md +99 -0
  53. package/docs/migrations/upgradelens-to-depverdict.md +97 -0
  54. package/docs/mp-r03-deterministic-upgrade-decision-architecture.md +135 -0
  55. package/docs/mp-r04-evidence-bounded-migration-handoff-architecture.md +116 -0
  56. package/docs/mp-r05-product-completion-and-decision-first-cli-architecture.md +162 -0
  57. package/docs/mvp-05-deterministic-context-runtime.md +127 -0
  58. package/docs/mvp-05-migration-checklist-contract.md +166 -0
  59. package/docs/mvp-05-migration-checklist-orchestration.md +105 -0
  60. package/docs/mvp-05-migration-evaluation-and-qualification.md +135 -0
  61. package/docs/mvp-05-provider-neutral-generator.md +79 -0
  62. package/docs/ollama-local-smoke-validation.md +156 -0
  63. package/docs/openai-compatible-runtime-discovery.md +789 -0
  64. package/docs/openrouter-one-dependency-validation.md +205 -0
  65. package/docs/oss-02-package-guard-hardening-architecture.md +131 -0
  66. package/docs/oss-04-public-ci-package-metadata-architecture.md +142 -0
  67. package/docs/package-content-policy.md +98 -0
  68. package/docs/releases/v0.5.0-technical-preview.md +114 -0
  69. package/docs/releases/v0.6.0-alpha.1-depverdict-preview.md +101 -0
  70. package/docs/reviews/diff-02-identity-contract-compatibility.md +413 -0
  71. package/docs/reviews/diff-03-repository-docs-community-migration.md +364 -0
  72. package/docs/reviews/diff-04-depverdict-distribution-identity-readiness-rereview.md +453 -0
  73. package/docs/reviews/diff-04-fix-post-rename-identity-release-remediation.md +310 -0
  74. package/docs/reviews/diff-05-final-preview-distribution-qualification.md +561 -0
  75. package/docs/reviews/mvp-05-final-product-value-workflow-rereview.md +471 -0
  76. package/docs/reviews/mvp-05-product-workflow-review.md +605 -0
  77. package/docs/reviews/oss-01-duplicate-artifact-investigation-cleanup.md +411 -0
  78. package/docs/reviews/oss-02-package-guard-hardening.md +303 -0
  79. package/docs/reviews/oss-03-community-scaffolding.md +378 -0
  80. package/docs/reviews/oss-04-public-ci-package-metadata.md +439 -0
  81. package/docs/reviews/oss-05-technical-preview-qualification.md +482 -0
  82. package/docs/reviews/upgradelens-vs-upgradedepdetective-source-comparison.md +355 -0
  83. package/docs/reviews/v0.5.0-pre-release-smoke.md +263 -0
  84. package/docs/reviews/v0.5.0-version-bump-release-verification.md +306 -0
  85. package/docs/runtime-contract-discovery.md +521 -0
  86. package/docs/structured-output-compatibility-report.md +100 -0
  87. package/docs/ts-fix-01-exact-duplicate-occurrence-target-selection-architecture.md +111 -0
  88. package/docs/version-analysis-architecture.md +827 -0
  89. package/eval/README.md +86 -0
  90. package/eval/datasets/generic/declared-constraint.json +59 -0
  91. package/eval/datasets/generic/evidence-conflict.json +73 -0
  92. package/eval/datasets/generic/major-breaking-release.json +66 -0
  93. package/eval/datasets/generic/missing-evidence.json +46 -0
  94. package/eval/datasets/generic/patch-release-low.json +59 -0
  95. package/eval/datasets/node/axios-patch-low.json +59 -0
  96. package/eval/datasets/node/react-major-breaking.json +66 -0
  97. package/eval/datasets/node/react-minor-compatibility.json +66 -0
  98. package/eval/datasets/python/fastapi-deprecation.json +66 -0
  99. package/eval/datasets/python/pydantic-major-breaking.json +66 -0
  100. package/eval/migration-planning/golden-dataset-v2.json +306 -0
  101. package/eval/migration-planning/golden-dataset.json +214 -0
  102. package/eval/schemas/expected-result.schema.json +88 -0
  103. package/eval/schemas/golden-case.schema.json +181 -0
  104. package/package.json +57 -0
  105. package/schemas/ai-scorecard.schema.json +132 -0
  106. package/schemas/benchmark-report.schema.json +189 -0
  107. package/schemas/benchmark.schema.json +55 -0
  108. package/schemas/capability-profile.schema.json +44 -0
  109. package/schemas/conformance-report.schema.json +150 -0
  110. package/schemas/deployment-profile.schema.json +64 -0
  111. package/schemas/evaluation-report.schema.json +158 -0
  112. package/schemas/knowledge-evidence-bundle.schema.json +150 -0
  113. package/schemas/knowledge-manifest.schema.json +548 -0
  114. package/schemas/metrics.schema.json +178 -0
  115. package/schemas/migration-checklist-extractive-candidate.schema.json +42 -0
  116. package/schemas/migration-checklist.schema.json +706 -0
  117. package/schemas/migration-evaluation-dataset-v2.schema.json +208 -0
  118. package/schemas/migration-evaluation-dataset.schema.json +204 -0
  119. package/schemas/migration-planning-qualification-record.schema.json +234 -0
  120. package/schemas/project-manifest.schema.json +308 -0
  121. package/schemas/qualification-record.schema.json +56 -0
  122. package/schemas/repository-impact-evidence.schema.json +232 -0
  123. package/schemas/repository-impact.schema.json +202 -0
  124. package/schemas/upgrade-decision.schema.json +273 -0
  125. package/schemas/usage-index.schema.json +179 -0
  126. package/schemas/version-analysis.schema.json +449 -0
  127. package/src/ai-runtime-debug.js +325 -0
  128. package/src/ai-runtime-error.js +42 -0
  129. package/src/ai-runtime.js +174 -0
  130. package/src/ai-scorecard.js +204 -0
  131. package/src/ai-version-analysis.js +484 -0
  132. package/src/artifact-root-compatibility.js +91 -0
  133. package/src/benchmark-report.js +111 -0
  134. package/src/benchmark-runner.js +191 -0
  135. package/src/canonical-json.js +69 -0
  136. package/src/cli.js +1299 -0
  137. package/src/conformance-report.js +158 -0
  138. package/src/conformance-runner.js +253 -0
  139. package/src/constants.js +73 -0
  140. package/src/cooperative-scheduler.js +79 -0
  141. package/src/dependencies.js +44 -0
  142. package/src/dependency-ai-context.js +625 -0
  143. package/src/detectors.js +253 -0
  144. package/src/discovery.js +234 -0
  145. package/src/ecosystem-version-adapter.js +294 -0
  146. package/src/environment-compatibility.js +77 -0
  147. package/src/evaluation-comparator.js +158 -0
  148. package/src/evaluation-report.js +76 -0
  149. package/src/evaluation-runner.js +248 -0
  150. package/src/evidence-source-adapter.js +472 -0
  151. package/src/files.js +89 -0
  152. package/src/governance-diagnostics.js +64 -0
  153. package/src/governance-loader.js +63 -0
  154. package/src/governance-metadata.js +346 -0
  155. package/src/governance-validator.js +360 -0
  156. package/src/http/bounded-fetch.js +278 -0
  157. package/src/http/cli-http-runtime.js +44 -0
  158. package/src/impact/input-loader.js +157 -0
  159. package/src/impact/matcher.js +40 -0
  160. package/src/impact/repository-impact.js +199 -0
  161. package/src/impact/runtime.js +24 -0
  162. package/src/impact/status.js +62 -0
  163. package/src/impact/writer.js +30 -0
  164. package/src/impact-evidence/input-loader.js +202 -0
  165. package/src/impact-evidence/repository-impact-evidence.js +234 -0
  166. package/src/impact-evidence/runtime.js +16 -0
  167. package/src/impact-evidence/writer.js +30 -0
  168. package/src/index.js +563 -0
  169. package/src/installed-version-baseline.js +196 -0
  170. package/src/knowledge-cache.js +324 -0
  171. package/src/knowledge-evidence-bundle.js +101 -0
  172. package/src/knowledge-evidence-producer.js +233 -0
  173. package/src/knowledge-manifest-builder.js +188 -0
  174. package/src/knowledge-manifest-writer.js +32 -0
  175. package/src/knowledge-manifest.js +255 -0
  176. package/src/knowledge-research.js +615 -0
  177. package/src/metrics-engine.js +205 -0
  178. package/src/migration-checklist/ai-candidate.js +320 -0
  179. package/src/migration-checklist/assembler.js +37 -0
  180. package/src/migration-checklist/context-runtime.js +828 -0
  181. package/src/migration-checklist/evaluation/action-criteria.js +244 -0
  182. package/src/migration-checklist/evaluation/comparator-v2.js +332 -0
  183. package/src/migration-checklist/evaluation/comparator.js +279 -0
  184. package/src/migration-checklist/evaluation/dataset-v2.js +227 -0
  185. package/src/migration-checklist/evaluation/dataset.js +336 -0
  186. package/src/migration-checklist/evaluation/extractive-fixtures-v2.js +148 -0
  187. package/src/migration-checklist/evaluation/metrics-v2.js +226 -0
  188. package/src/migration-checklist/evaluation/metrics.js +158 -0
  189. package/src/migration-checklist/evaluation/qualification-v2.js +321 -0
  190. package/src/migration-checklist/evaluation/qualification.js +239 -0
  191. package/src/migration-checklist/evaluation/runner-v2.js +294 -0
  192. package/src/migration-checklist/evaluation/runner.js +194 -0
  193. package/src/migration-checklist/evaluation/scorecard-v2.js +106 -0
  194. package/src/migration-checklist/evaluation/scorecard.js +86 -0
  195. package/src/migration-checklist/extractive-candidate.js +166 -0
  196. package/src/migration-checklist/extractive-prompt.js +62 -0
  197. package/src/migration-checklist/generator.js +702 -0
  198. package/src/migration-checklist/grounding-policy.js +117 -0
  199. package/src/migration-checklist/input-loader.js +613 -0
  200. package/src/migration-checklist/migration-checklist.js +635 -0
  201. package/src/migration-checklist/presentation.js +292 -0
  202. package/src/migration-checklist/progress.js +96 -0
  203. package/src/migration-checklist/prompt.js +83 -0
  204. package/src/migration-checklist/qualification-guard.js +462 -0
  205. package/src/migration-checklist/qualification-resolution.js +122 -0
  206. package/src/migration-checklist/qualification-store.js +225 -0
  207. package/src/migration-checklist/runtime.js +205 -0
  208. package/src/migration-checklist/verification.js +134 -0
  209. package/src/migration-checklist/writer.js +35 -0
  210. package/src/openai-compatible-provider.js +451 -0
  211. package/src/orchestration/failure-log.js +32 -0
  212. package/src/orchestration/pipeline.js +200 -0
  213. package/src/orchestration/progress-events.js +337 -0
  214. package/src/orchestration/progress-reporter.js +131 -0
  215. package/src/orchestration/text-writer.js +22 -0
  216. package/src/portable.js +13 -0
  217. package/src/product-completion.js +249 -0
  218. package/src/project-manifest-input.js +90 -0
  219. package/src/project-manifest.js +141 -0
  220. package/src/python-requirements.js +137 -0
  221. package/src/registry/npm-packument.js +256 -0
  222. package/src/registry/npm-registry-adapter.js +262 -0
  223. package/src/registry/pypi-project.js +300 -0
  224. package/src/registry/pypi-registry-adapter.js +235 -0
  225. package/src/registry/sanitize-registry-body.js +51 -0
  226. package/src/renderers/console.js +160 -0
  227. package/src/renderers/impact-presentation.js +278 -0
  228. package/src/renderers/markdown.js +172 -0
  229. package/src/research-plan.js +455 -0
  230. package/src/runtime-conformance.js +275 -0
  231. package/src/source-provenance.js +393 -0
  232. package/src/source-url.js +62 -0
  233. package/src/structured-output-schema.js +66 -0
  234. package/src/target-selector.js +306 -0
  235. package/src/upgrade-decision/input-loader.js +107 -0
  236. package/src/upgrade-decision/presentation.js +43 -0
  237. package/src/upgrade-decision/runtime.js +21 -0
  238. package/src/upgrade-decision/upgrade-decision.js +626 -0
  239. package/src/upgrade-decision/writer.js +30 -0
  240. package/src/usage/analyzer-registry.js +63 -0
  241. package/src/usage/coverage.js +116 -0
  242. package/src/usage/input-loader.js +139 -0
  243. package/src/usage/js/analyzer.js +240 -0
  244. package/src/usage/js/parser.js +21 -0
  245. package/src/usage/runtime.js +187 -0
  246. package/src/usage/scope.js +44 -0
  247. package/src/usage/source-files.js +50 -0
  248. package/src/usage/usage-index.js +217 -0
  249. package/src/usage/writer.js +31 -0
  250. package/src/version-analysis-loader.js +203 -0
  251. package/src/version-analysis-manifest.js +314 -0
  252. package/src/version-analysis-writer.js +30 -0
@@ -0,0 +1,411 @@
1
+ # OSS-01 — Duplicate Artifact Investigation & Cleanup
2
+
3
+ ## 1. Executive verdict
4
+
5
+ **Verdict: `TARBALL_HYGIENE_RESTORED_WITH_REVIEW_ITEMS`**
6
+
7
+ The package drift was reproduced and bounded. The 304-entry tarball contained 76
8
+ unintended numeric-suffix copies; every one was an untracked, byte-identical copy of
9
+ an existing canonical source or schema file, with no path reference, Git history, or
10
+ contract identity. A further 32 exact copies in `eval/`, `scripts/`, and `test/` were
11
+ not packaged but belonged to the same artifact set. Those 108 files were removed
12
+ only after per-file evidence was collected. No canonical file was changed.
13
+
14
+ Nine exact copies inside an untracked CLI-capture tree and one ignored `.DS_Store`
15
+ remain as non-packaged review items because this task's safety boundary prohibits
16
+ deleting unrelated retained evidence or ignored metadata. Two broad-scan matches are
17
+ intentional tracked files. None of the 12 retained matches enters the final package
18
+ except the intentional TS-FIX-01 architecture document.
19
+
20
+ ## 2. Release gate impact
21
+
22
+ The previous 228-file release-candidate qualification was invalidated by current
23
+ working-tree package drift and could not authorize a publish. OSS-01 restores a
24
+ fully explained package boundary and closes the duplicate-artifact blocker, but it
25
+ does not authorize a public preview, tag, release, or npm publish.
26
+
27
+ **Next gate: `PROCEED_TO_OSS_02_PACKAGE_GUARD_HARDENING`**
28
+
29
+ ## 3. Initial branch, commit and dirty-worktree state
30
+
31
+ The safety-baseline commands were captured before cleanup.
32
+
33
+ | Field | Initial value |
34
+ | --- | --- |
35
+ | Branch | `fix/public-preview-readiness` |
36
+ | Commit | `74d57344db254d0109ea951dc7c44853cdad9be0` |
37
+ | Tracked diff | Clean; `git diff --stat` and `git diff --name-status` had no output |
38
+ | Untracked state | Two pre-existing release-review reports, multiple CLI-capture/evidence trees, and the duplicate-suffixed candidate set |
39
+ | Ignored relevant match | Root `.DS_Store` |
40
+ | Package version | `0.5.0` |
41
+
42
+ The worktree was not globally clean, so all existing untracked reports, captures,
43
+ qualification material, and other review output were treated as user-owned. No
44
+ reset, clean, restore, checkout, broad glob deletion, or bulk filesystem deletion was
45
+ used.
46
+
47
+ ## 4. Reproduced tarball count and manifest digest
48
+
49
+ The canonical pack workflow was run with an isolated npm cache. The actual tarball
50
+ was extracted and inventoried by relative path, byte size, mode, SHA-256 content
51
+ digest, top-level directory, and repository Git state.
52
+
53
+ | Measurement | Initial reproduced package |
54
+ | --- | --- |
55
+ | Entry count | 304 |
56
+ | npm package size | 593,013 bytes |
57
+ | npm unpacked size | 2,935,134 bytes |
58
+ | npm SHA-1 | `b3e053c5fe34a7596bec8962916a84459e1fba70` |
59
+ | Deterministic content-manifest digest | `sha256:9db3d6d5c03fa349b78bb1f607aff08468e83c5586867813b2b37f0e5d16092e` |
60
+ | Suspicious packaged paths | 77: 76 exact artifacts plus one intentional architecture document |
61
+
62
+ The 228-to-304 comparison used the same npm package boundary. The full 76-entry
63
+ increase is accounted for by 9 schema copies and 67 source copies. The two
64
+ pre-existing release-review reports were already included in the verified 228-entry
65
+ candidate, so they do not explain any part of this drift. `package.json` publishes
66
+ the broad `schemas` and `src` trees; the current guard checked required and forbidden
67
+ content but did not reject duplicate-style filenames, allowing untracked copies to
68
+ enter the tarball.
69
+
70
+ ## 5. Complete candidate inventory
71
+
72
+ Candidate discovery walked the repository without shell filename expansion and
73
+ checked numeric suffixes, parenthesized numeric suffixes, copy/duplicate labels,
74
+ editor backup suffixes, swap/temporary suffixes, and `.DS_Store`. It safely handled
75
+ whitespace and nested paths; no symlink candidate, newline-bearing filename, Unicode
76
+ normalization collision, case-only collision, parenthesized/copy/backup/swap match,
77
+ or tarball artifact was found.
78
+
79
+ | Classification | Count | Packaged initially | Decision |
80
+ | --- | ---: | ---: | --- |
81
+ | `EXACT_DUPLICATE` | 117 | 76 | Delete 108 task-scope artifacts; retain 9 non-packaged captures |
82
+ | `INTENTIONAL_FILE` | 2 | 1 | Retain |
83
+ | `ORPHAN_ARTIFACT` | 1 | 0 | Retain ignored OS metadata |
84
+ | `NON_SEMANTIC_DUPLICATE` | 0 | 0 | None |
85
+ | `DIVERGENT_COPY` | 0 | 0 | None |
86
+ | `REQUIRES_HUMAN_REVIEW` | 0 | 0 | None |
87
+ | **Total** | **120** | **77** | **108 deleted, 12 retained** |
88
+
89
+ The 108 deletion candidates break down as 2 `eval`, 9 `schemas`, 6 `scripts`, 67
90
+ `src`, and 24 `test` files. The 76 packaged deletion candidates are exactly the 9
91
+ schema and 67 source files.
92
+
93
+ ## 6. Per-file evidence table
94
+
95
+ For each `E1` row, both files were read as bytes and independently SHA-256 hashed:
96
+ the two full hashes matched, direct byte comparison passed, normalized-text
97
+ comparison passed, and candidate-only/canonical-only unique-line counts were `0/0`.
98
+ The candidate was untracked, absent from all Git history, unreferenced by exact path
99
+ or basename, and had no import, export, schema-loader, test-discovery, package,
100
+ documentation, dataset, manifest, or qualification identity. `E2` is the same proof,
101
+ but deletion is outside scope because the path is retained non-packaged capture
102
+ evidence. `I1` denotes a tracked/history-backed intentional identity. `O1` denotes
103
+ ignored OS metadata with no canonical sibling and no package membership.
104
+
105
+ | Candidate | Canonical sibling | Git state | Packaged | Byte-identical | Normalized-identical | Unique lines | Referenced by source | Referenced by package/docs/tests | Classification | Proposed action |
106
+ | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
107
+ | `.DS_Store` | — | ignored; history=no | no | n/a | n/a | n/a | none | ignore rule only | `ORPHAN_ARTIFACT` | RETAIN (O1) |
108
+ | `docs/rr02-rerun-cli-captures/003-rerun-002-default-tty-auto/01-start 2.png` | `docs/rr02-rerun-cli-captures/003-rerun-002-default-tty-auto/01-start.png` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | RETAIN (E2) |
109
+ | `docs/rr02-rerun-cli-captures/003-rerun-002-default-tty-auto/02-progress 2.png` | `docs/rr02-rerun-cli-captures/003-rerun-002-default-tty-auto/02-progress.png` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | RETAIN (E2) |
110
+ | `docs/rr02-rerun-cli-captures/003-rerun-002-default-tty-auto/03-final 2.png` | `docs/rr02-rerun-cli-captures/003-rerun-002-default-tty-auto/03-final.png` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | RETAIN (E2) |
111
+ | `docs/rr02-rerun-cli-captures/003-rerun-002-default-tty-auto/command 2.txt` | `docs/rr02-rerun-cli-captures/003-rerun-002-default-tty-auto/command.txt` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | RETAIN (E2) |
112
+ | `docs/rr02-rerun-cli-captures/003-rerun-002-default-tty-auto/environment 2.json` | `docs/rr02-rerun-cli-captures/003-rerun-002-default-tty-auto/environment.json` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | RETAIN (E2) |
113
+ | `docs/rr02-rerun-cli-captures/003-rerun-002-default-tty-auto/final-screen 2.png` | `docs/rr02-rerun-cli-captures/003-rerun-002-default-tty-auto/final-screen.png` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | RETAIN (E2) |
114
+ | `docs/rr02-rerun-cli-captures/003-rerun-002-default-tty-auto/metadata 2.json` | `docs/rr02-rerun-cli-captures/003-rerun-002-default-tty-auto/metadata.json` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | RETAIN (E2) |
115
+ | `docs/rr02-rerun-cli-captures/003-rerun-002-default-tty-auto/transcript.clean 2.txt` | `docs/rr02-rerun-cli-captures/003-rerun-002-default-tty-auto/transcript.clean.txt` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | RETAIN (E2) |
116
+ | `docs/rr02-rerun-cli-captures/003-rerun-002-default-tty-auto/transcript.raw 2.txt` | `docs/rr02-rerun-cli-captures/003-rerun-002-default-tty-auto/transcript.raw.txt` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | RETAIN (E2) |
117
+ | `docs/ts-fix-01-exact-duplicate-occurrence-target-selection-architecture.md` | — | tracked; history=yes | yes | n/a | n/a | n/a | none | tracked historical document identity | `INTENTIONAL_FILE` | RETAIN (I1) |
118
+ | `eval/migration-planning/golden-dataset 2.json` | `eval/migration-planning/golden-dataset.json` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
119
+ | `eval/migration-planning/golden-dataset-v2 2.json` | `eval/migration-planning/golden-dataset-v2.json` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
120
+ | `schemas/migration-checklist-extractive-candidate.schema 2.json` | `schemas/migration-checklist-extractive-candidate.schema.json` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
121
+ | `schemas/migration-checklist.schema 2.json` | `schemas/migration-checklist.schema.json` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
122
+ | `schemas/migration-checklist.schema 3.json` | `schemas/migration-checklist.schema.json` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
123
+ | `schemas/migration-evaluation-dataset-v2.schema 2.json` | `schemas/migration-evaluation-dataset-v2.schema.json` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
124
+ | `schemas/migration-evaluation-dataset.schema 2.json` | `schemas/migration-evaluation-dataset.schema.json` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
125
+ | `schemas/migration-evaluation-dataset.schema 3.json` | `schemas/migration-evaluation-dataset.schema.json` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
126
+ | `schemas/migration-planning-qualification-record.schema 2.json` | `schemas/migration-planning-qualification-record.schema.json` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
127
+ | `schemas/migration-planning-qualification-record.schema 3.json` | `schemas/migration-planning-qualification-record.schema.json` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
128
+ | `schemas/upgrade-decision.schema 2.json` | `schemas/upgrade-decision.schema.json` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
129
+ | `scripts/mp-r05-cli-captures 2.mjs` | `scripts/mp-r05-cli-captures.mjs` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
130
+ | `scripts/package-content-guard 2.mjs` | `scripts/package-content-guard.mjs` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
131
+ | `scripts/render-cli-transcript 2.py` | `scripts/render-cli-transcript.py` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
132
+ | `scripts/render-cli-transcript 3.py` | `scripts/render-cli-transcript.py` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
133
+ | `scripts/rr02-fix-01-captures 2.mjs` | `scripts/rr02-fix-01-captures.mjs` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
134
+ | `scripts/rr02-fix-01-captures 3.mjs` | `scripts/rr02-fix-01-captures.mjs` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
135
+ | `src/cooperative-scheduler 2.js` | `src/cooperative-scheduler.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
136
+ | `src/cooperative-scheduler 3.js` | `src/cooperative-scheduler.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
137
+ | `src/impact/status 2.js` | `src/impact/status.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
138
+ | `src/installed-version-baseline 2.js` | `src/installed-version-baseline.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
139
+ | `src/migration-checklist/ai-candidate 2.js` | `src/migration-checklist/ai-candidate.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
140
+ | `src/migration-checklist/ai-candidate 3.js` | `src/migration-checklist/ai-candidate.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
141
+ | `src/migration-checklist/assembler 2.js` | `src/migration-checklist/assembler.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
142
+ | `src/migration-checklist/assembler 3.js` | `src/migration-checklist/assembler.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
143
+ | `src/migration-checklist/context-runtime 2.js` | `src/migration-checklist/context-runtime.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
144
+ | `src/migration-checklist/evaluation/action-criteria 2.js` | `src/migration-checklist/evaluation/action-criteria.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
145
+ | `src/migration-checklist/evaluation/comparator 2.js` | `src/migration-checklist/evaluation/comparator.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
146
+ | `src/migration-checklist/evaluation/comparator-v2 2.js` | `src/migration-checklist/evaluation/comparator-v2.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
147
+ | `src/migration-checklist/evaluation/dataset 2.js` | `src/migration-checklist/evaluation/dataset.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
148
+ | `src/migration-checklist/evaluation/dataset-v2 2.js` | `src/migration-checklist/evaluation/dataset-v2.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
149
+ | `src/migration-checklist/evaluation/extractive-fixtures-v2 2.js` | `src/migration-checklist/evaluation/extractive-fixtures-v2.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
150
+ | `src/migration-checklist/evaluation/metrics 2.js` | `src/migration-checklist/evaluation/metrics.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
151
+ | `src/migration-checklist/evaluation/metrics-v2 2.js` | `src/migration-checklist/evaluation/metrics-v2.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
152
+ | `src/migration-checklist/evaluation/qualification 2.js` | `src/migration-checklist/evaluation/qualification.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
153
+ | `src/migration-checklist/evaluation/qualification-v2 2.js` | `src/migration-checklist/evaluation/qualification-v2.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
154
+ | `src/migration-checklist/evaluation/runner 2.js` | `src/migration-checklist/evaluation/runner.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
155
+ | `src/migration-checklist/evaluation/runner-v2 2.js` | `src/migration-checklist/evaluation/runner-v2.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
156
+ | `src/migration-checklist/evaluation/scorecard 2.js` | `src/migration-checklist/evaluation/scorecard.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
157
+ | `src/migration-checklist/evaluation/scorecard-v2 2.js` | `src/migration-checklist/evaluation/scorecard-v2.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
158
+ | `src/migration-checklist/extractive-candidate 2.js` | `src/migration-checklist/extractive-candidate.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
159
+ | `src/migration-checklist/extractive-candidate 3.js` | `src/migration-checklist/extractive-candidate.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
160
+ | `src/migration-checklist/extractive-prompt 2.js` | `src/migration-checklist/extractive-prompt.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
161
+ | `src/migration-checklist/extractive-prompt 3.js` | `src/migration-checklist/extractive-prompt.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
162
+ | `src/migration-checklist/generator 2.js` | `src/migration-checklist/generator.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
163
+ | `src/migration-checklist/generator 3.js` | `src/migration-checklist/generator.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
164
+ | `src/migration-checklist/grounding-policy 2.js` | `src/migration-checklist/grounding-policy.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
165
+ | `src/migration-checklist/grounding-policy 3.js` | `src/migration-checklist/grounding-policy.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
166
+ | `src/migration-checklist/input-loader 2.js` | `src/migration-checklist/input-loader.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
167
+ | `src/migration-checklist/migration-checklist 2.js` | `src/migration-checklist/migration-checklist.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
168
+ | `src/migration-checklist/migration-checklist 3.js` | `src/migration-checklist/migration-checklist.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
169
+ | `src/migration-checklist/presentation 2.js` | `src/migration-checklist/presentation.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
170
+ | `src/migration-checklist/presentation 3.js` | `src/migration-checklist/presentation.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
171
+ | `src/migration-checklist/progress 2.js` | `src/migration-checklist/progress.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
172
+ | `src/migration-checklist/progress 3.js` | `src/migration-checklist/progress.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
173
+ | `src/migration-checklist/prompt 2.js` | `src/migration-checklist/prompt.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
174
+ | `src/migration-checklist/prompt 3.js` | `src/migration-checklist/prompt.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
175
+ | `src/migration-checklist/qualification-guard 2.js` | `src/migration-checklist/qualification-guard.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
176
+ | `src/migration-checklist/qualification-guard 3.js` | `src/migration-checklist/qualification-guard.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
177
+ | `src/migration-checklist/qualification-resolution 2.js` | `src/migration-checklist/qualification-resolution.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
178
+ | `src/migration-checklist/qualification-resolution 3.js` | `src/migration-checklist/qualification-resolution.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
179
+ | `src/migration-checklist/qualification-store 2.js` | `src/migration-checklist/qualification-store.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
180
+ | `src/migration-checklist/qualification-store 3.js` | `src/migration-checklist/qualification-store.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
181
+ | `src/migration-checklist/runtime 2.js` | `src/migration-checklist/runtime.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
182
+ | `src/migration-checklist/runtime 3.js` | `src/migration-checklist/runtime.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
183
+ | `src/migration-checklist/verification 2.js` | `src/migration-checklist/verification.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
184
+ | `src/migration-checklist/verification 3.js` | `src/migration-checklist/verification.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
185
+ | `src/migration-checklist/writer 2.js` | `src/migration-checklist/writer.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
186
+ | `src/migration-checklist/writer 3.js` | `src/migration-checklist/writer.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
187
+ | `src/orchestration/progress-events 2.js` | `src/orchestration/progress-events.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
188
+ | `src/orchestration/progress-events 3.js` | `src/orchestration/progress-events.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
189
+ | `src/product-completion 2.js` | `src/product-completion.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
190
+ | `src/product-completion 3.js` | `src/product-completion.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
191
+ | `src/target-selector 2.js` | `src/target-selector.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
192
+ | `src/target-selector 3.js` | `src/target-selector.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
193
+ | `src/upgrade-decision/input-loader 2.js` | `src/upgrade-decision/input-loader.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
194
+ | `src/upgrade-decision/input-loader 3.js` | `src/upgrade-decision/input-loader.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
195
+ | `src/upgrade-decision/presentation 2.js` | `src/upgrade-decision/presentation.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
196
+ | `src/upgrade-decision/presentation 3.js` | `src/upgrade-decision/presentation.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
197
+ | `src/upgrade-decision/runtime 2.js` | `src/upgrade-decision/runtime.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
198
+ | `src/upgrade-decision/runtime 3.js` | `src/upgrade-decision/runtime.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
199
+ | `src/upgrade-decision/upgrade-decision 2.js` | `src/upgrade-decision/upgrade-decision.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
200
+ | `src/usage/coverage 2.js` | `src/usage/coverage.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
201
+ | `src/usage/coverage 3.js` | `src/usage/coverage.js` | untracked; history=no | yes | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
202
+ | `test/cooperative-scheduling.test 2.js` | `test/cooperative-scheduling.test.js` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
203
+ | `test/cooperative-scheduling.test 3.js` | `test/cooperative-scheduling.test.js` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
204
+ | `test/ecosystem-coverage-impact.test 2.js` | `test/ecosystem-coverage-impact.test.js` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
205
+ | `test/fixtures/knowledge-manifest/duplicate-occurrence.json` | — | tracked; history=yes | no | n/a | n/a | n/a | none | exact test-fixture identity | `INTENTIONAL_FILE` | RETAIN (I1) |
206
+ | `test/installed-version-baseline.test 2.js` | `test/installed-version-baseline.test.js` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
207
+ | `test/migration-checklist-context-runtime.test 2.js` | `test/migration-checklist-context-runtime.test.js` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
208
+ | `test/migration-checklist-contract.test 2.js` | `test/migration-checklist-contract.test.js` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
209
+ | `test/migration-checklist-contract.test 3.js` | `test/migration-checklist-contract.test.js` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
210
+ | `test/migration-checklist-evaluation-v2.test 2.js` | `test/migration-checklist-evaluation-v2.test.js` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
211
+ | `test/migration-checklist-evaluation.test 2.js` | `test/migration-checklist-evaluation.test.js` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
212
+ | `test/migration-checklist-evaluation.test 3.js` | `test/migration-checklist-evaluation.test.js` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
213
+ | `test/migration-checklist-extractive-experiment.test 2.js` | `test/migration-checklist-extractive-experiment.test.js` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
214
+ | `test/migration-checklist-extractive-production.test 2.js` | `test/migration-checklist-extractive-production.test.js` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
215
+ | `test/migration-checklist-generator.test 2.js` | `test/migration-checklist-generator.test.js` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
216
+ | `test/migration-checklist-generator.test 3.js` | `test/migration-checklist-generator.test.js` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
217
+ | `test/migration-checklist-orchestration.test 2.js` | `test/migration-checklist-orchestration.test.js` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
218
+ | `test/migration-checklist-orchestration.test 3.js` | `test/migration-checklist-orchestration.test.js` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
219
+ | `test/migration-handoff.test 2.js` | `test/migration-handoff.test.js` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
220
+ | `test/package-content-guard.test 2.js` | `test/package-content-guard.test.js` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
221
+ | `test/package-content-guard.test 3.js` | `test/package-content-guard.test.js` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
222
+ | `test/product-completion-cli.test 2.js` | `test/product-completion-cli.test.js` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
223
+ | `test/progress-orchestration.test 2.js` | `test/progress-orchestration.test.js` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
224
+ | `test/progress-orchestration.test 3.js` | `test/progress-orchestration.test.js` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
225
+ | `test/target-selector.test 2.js` | `test/target-selector.test.js` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
226
+ | `test/upgrade-decision.test 2.js` | `test/upgrade-decision.test.js` | untracked; history=no | no | yes; same SHA-256 | yes | 0/0 | none | none | `EXACT_DUPLICATE` | DELETE (E1) |
227
+
228
+ ## 7. Root-cause assessment and confidence
229
+
230
+ **`PROBABLE_ROOT_CAUSE` — medium confidence.**
231
+
232
+ The evidence is a coherent, untracked set of literal `" 2"` and `" 3"` copies
233
+ spanning source, schema, tests, evaluation data, and helper scripts. Each copy is
234
+ byte-identical to a canonical sibling, no candidate ever appeared in Git history,
235
+ and repository scripts contain no generator that writes numeric-suffixed source
236
+ names. File timestamps are clustered, but were used only as correlation.
237
+
238
+ This is most consistent with an external filesystem copy/conflict event such as a
239
+ Finder duplicate, cloud-sync conflict copy, editor/file-manager copy, archive
240
+ restoration, or prior tooling operation. The repository cannot distinguish the
241
+ specific actor, so no `CONFIRMED_ROOT_CAUSE` claim is made. Merge resolution is
242
+ unlikely because Git has no index/history trace; generated output is unlikely
243
+ because the same operation copied hand-authored sources, schemas, tests, and scripts.
244
+ The packaging configuration did not create the files, but its broad directory
245
+ inclusion and missing suspicious-name rule allowed 76 of them to ship.
246
+
247
+ ## 8. Files deleted, retained, recovered or escalated
248
+
249
+ | Outcome | Count | Detail |
250
+ | --- | ---: | --- |
251
+ | Deleted | 108 | Explicitly reviewed exact copies: 2 eval, 9 schema, 6 script, 67 source, 24 test |
252
+ | Retained | 12 | 9 non-packaged capture copies, 1 ignored `.DS_Store`, 2 intentional tracked files |
253
+ | Recovered/ported | 0 | No unique content existed to recover |
254
+ | Escalated | 0 | No divergent or ownership-ambiguous packaged artifact remained |
255
+
256
+ Deletion was performed with an explicit path list after evidence collection. No
257
+ canonical sibling, capture copy, ignored file, qualification record, user report, or
258
+ other pre-existing output was deleted.
259
+
260
+ ## 9. Proof that no unique change was lost
261
+
262
+ All 108 deleted files met the `EXACT_DUPLICATE` contract before deletion:
263
+
264
+ - candidate and canonical SHA-256 digests matched;
265
+ - direct byte comparison succeeded, which is stronger than formatting-based
266
+ semantic inference;
267
+ - normalized comparison also succeeded and unique-line deltas were `0/0`;
268
+ - every candidate was untracked and absent from all reachable Git history;
269
+ - exact relative-path and basename reference scans returned no references;
270
+ - canonical siblings remain present, including all package-required schemas and
271
+ runtime modules;
272
+ - no JS import/export, schema identity, dataset registry, manifest, test-discovery,
273
+ or qualification identity belonged to a candidate path;
274
+ - post-cleanup canonical tests, package guard, packaged import, schema/dataset
275
+ identity checks, and clean-install smoke passed.
276
+
277
+ There were no byte-different candidates, so no semantic merge judgment or hunk port
278
+ was needed. The cleanup cannot remove a change that existed only in a candidate
279
+ because byte equality proves each candidate's content already exists in its retained
280
+ canonical sibling.
281
+
282
+ ## 10. Before/after tarball comparison
283
+
284
+ | Package state | Entries | Manifest digest | Explanation |
285
+ | --- | ---: | --- | --- |
286
+ | Initial reproduced | 304 | `sha256:9db3d6d5c03fa349b78bb1f607aff08468e83c5586867813b2b37f0e5d16092e` | Included 76 unintended exact copies |
287
+ | Cleanup, before this report | 228 | `sha256:50c3d79e5a2b5b361cac105bc8d19196467279c91299f53de3e2691f897693bb` | Exactly 76 duplicate entries removed |
288
+ | Final, including this report | 229 | `sha256:50c3d79e5a2b5b361cac105bc8d19196467279c91299f53de3e2691f897693bb` for the stable 228-entry release-content subset; the self-referential report entry verified separately | One intentional public OSS-01 report added |
289
+
290
+ No required asset disappeared. The initial-to-pre-report entry delta is exactly
291
+ `-76`; the pre-report-to-final delta is exactly `+1` and is this report. The final
292
+ manifest is therefore explained by content identity rather than by forcing a target
293
+ count.
294
+
295
+ Two consecutive final `npm pack` executions from the same source state produced
296
+ byte-identical tarballs. The report records the stable digest of every package entry
297
+ other than itself because embedding a digest that includes this report would mutate
298
+ the digest it claims to record.
299
+
300
+ ## 11. Remaining suspicious-file scan
301
+
302
+ | Scope | Remaining match | Classification | Package impact |
303
+ | --- | --- | --- | --- |
304
+ | Working tree | 9 numeric-suffix files under the existing RR02 CLI-capture directory | `EXACT_DUPLICATE`, retained evidence | Excluded by package `files` rules; not packaged |
305
+ | Working tree | `.DS_Store` | `ORPHAN_ARTIFACT`, ignored OS metadata | Not packaged |
306
+ | Working tree and tarball | `docs/ts-fix-01-exact-duplicate-occurrence-target-selection-architecture.md` | `INTENTIONAL_FILE`; tracked historical architecture identity | Intentionally packaged |
307
+ | Working tree and tarball | `docs/reviews/oss-01-duplicate-artifact-investigation-cleanup.md` | `INTENTIONAL_FILE`; this task's required report | Intentionally packaged |
308
+ | Working tree | `test/fixtures/knowledge-manifest/duplicate-occurrence.json` | `INTENTIONAL_FILE`; tracked fixture referenced by tests | Tests are not packaged |
309
+
310
+ The extracted final tarball has no unintended numeric/copy/backup/editor artifact,
311
+ `.DS_Store`, capture/runtime output, `.env`, credential, local qualification
312
+ input/record, unexpected tarball, or Git metadata. The only broad-word match is the
313
+ intentional architecture document and this required investigation report. Existing
314
+ historical documentation may contain previously reported local-path examples; that
315
+ known Medium package-hygiene item is not duplicate drift and was not changed in
316
+ OSS-01.
317
+
318
+ ## 12. Tests, package guard, clean install and exports
319
+
320
+ | Check | Result |
321
+ | --- | --- |
322
+ | `git diff --check` | Pass |
323
+ | Canonical `npm test` | 616 total: 615 pass, 0 fail, 1 known sandbox-loopback skip |
324
+ | `npm run check:package` | Pass; required assets present and capture count zero |
325
+ | `npm pack --dry-run --json` | Pass; final entry count explained |
326
+ | Actual tarball extraction | Pass; bytes inventoried and suspicious-name scan clean |
327
+ | Repeat-pack determinism | Pass; consecutive tarballs were byte-identical |
328
+ | Clean install from final tarball | Pass |
329
+ | Packaged CLI `--version` | Pass: `0.5.0` |
330
+ | Packaged CLI `--help` | Pass |
331
+ | ESM package import | Pass |
332
+ | Public export count | Pass: 438 |
333
+ | Schema loading/validation | Pass |
334
+ | Evaluation dataset and qualification identity | Pass; deterministic, no provider call |
335
+
336
+ ## 13. Blocked/skipped checks
337
+
338
+ No release-hygiene check was blocked. One canonical test remains skipped because the
339
+ sandbox does not provide the loopback listener required by that online CLI test; it
340
+ is the same known baseline skip, not introduced by cleanup. Real-provider execution
341
+ was deliberately not run because it is a non-goal. No target repository was changed
342
+ and no qualification record was regenerated.
343
+
344
+ ## 14. Defects by severity
345
+
346
+ | Severity | Count | Status |
347
+ | --- | ---: | --- |
348
+ | Blocker | 0 | None |
349
+ | High | 0 | None |
350
+ | Medium | 2 | Root-cause actor remains uncertain; package guard does not yet reject duplicate-style package drift |
351
+ | Low/review | 2 | Nine unrelated capture copies and ignored `.DS_Store` remain outside the package |
352
+
353
+ The Medium items do not leave an ambiguous or unintended file in the tarball. Guard
354
+ hardening is explicitly the next gate.
355
+
356
+ ## 15. Package-guard follow-up requirements
357
+
358
+ OSS-02 should add deterministic checks without treating every occurrence of words
359
+ such as `duplicate` as an error:
360
+
361
+ 1. Reject numeric duplicate suffixes (`" 2"`, `" 3"`, and parenthesized variants)
362
+ in protected packaged directories such as `src/`, `schemas/`, and published eval
363
+ assets.
364
+ 2. Reject copy, backup, editor temporary, swap, `.DS_Store`, and archive artifacts
365
+ in the actual tarball.
366
+ 3. Detect unexpected untracked packaged source, schema, and eval files while
367
+ preserving intentional tracked names such as the TS-FIX-01 document and
368
+ `duplicate-occurrence.json` fixture.
369
+ 4. Compare an extracted actual-tarball manifest, not only source-tree expectations,
370
+ and surface explained additions/removals with a deterministic digest.
371
+ 5. Add regression fixtures for whitespace, nested paths, shell-special characters,
372
+ Unicode/case behavior, symlinks, and intentional false positives.
373
+
374
+ No OSS-02 implementation is mixed into this cleanup.
375
+
376
+ ## 16. Exact files changed/created by this task
377
+
378
+ - Created `docs/reviews/oss-01-duplicate-artifact-investigation-cleanup.md`.
379
+ - Removed 108 untracked, exact duplicate artifacts listed as `DELETE` in the
380
+ per-file evidence table: 2 eval, 9 schema, 6 script, 67 source, and 24 test files.
381
+ - Changed no tracked production source, schema, test, package metadata, version, or
382
+ canonical asset.
383
+
384
+ Because the removed artifacts were untracked, Git can show the new report but cannot
385
+ represent their deletion as a tracked diff.
386
+
387
+ ## 17. Pre-existing changes preserved
388
+
389
+ The two untracked v0.5.0 review reports, all RR02/RR02-FIX-05 capture and rerun
390
+ evidence, the nine numeric-suffix capture copies, ignored `.DS_Store`, ignored
391
+ qualification material, and all unrelated untracked review output were preserved.
392
+ The branch, commit, `package.json` version, npm metadata, target repository, and
393
+ provider state were not changed. No commit, merge, tag, push, GitHub Release, npm
394
+ publish, or real-provider call was performed.
395
+
396
+ ## 18. Final verdict and next gate
397
+
398
+ **Verdict: `TARBALL_HYGIENE_RESTORED_WITH_REVIEW_ITEMS`**
399
+
400
+ All suspicious candidates have a decision; every deletion has byte-level proof; no
401
+ unique content was lost; no unintended copy artifact remains in the actual tarball;
402
+ manifest deltas are fully explained; canonical tests, package verification, clean
403
+ installation, CLI/import/export, and schema/dataset identity checks pass; and there
404
+ is no Blocker or High defect. The retained review items are non-packaged evidence or
405
+ ignored metadata, and the precise external actor that created the copies cannot be
406
+ confirmed from repository evidence.
407
+
408
+ **Gate: `PROCEED_TO_OSS_02_PACKAGE_GUARD_HARDENING`**
409
+
410
+ This gate permits only the next hygiene task. It does not authorize a public preview,
411
+ tag, release, or publish.