zorya-classifier 0.2.1 → 0.2.3

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 (139) hide show
  1. package/README.md +31 -17
  2. package/dist/app/classifier-config.d.ts +30 -0
  3. package/dist/app/classifier-config.js +46 -0
  4. package/dist/app/classifier-contracts.d.ts +32 -0
  5. package/dist/app/classifier-contracts.js +1 -0
  6. package/dist/app/classifier-runtime.d.ts +7 -0
  7. package/dist/app/classifier-runtime.js +71 -0
  8. package/dist/app/classifier-spatial.d.ts +31 -0
  9. package/dist/app/classifier-spatial.js +78 -0
  10. package/dist/app/cli-arguments.d.ts +2 -2
  11. package/dist/app/composed-classifier.d.ts +17 -0
  12. package/dist/app/composed-classifier.js +1 -0
  13. package/dist/app/create-classifier.d.ts +9 -33
  14. package/dist/app/create-classifier.js +53 -245
  15. package/dist/cli.js +1 -1
  16. package/dist/entities/classification.d.ts +83 -0
  17. package/dist/entities/classification.js +28 -0
  18. package/dist/entities/contracts.d.ts +6 -475
  19. package/dist/entities/contracts.js +6 -97
  20. package/dist/entities/decision.d.ts +211 -0
  21. package/dist/entities/decision.js +33 -0
  22. package/dist/entities/geometry.d.ts +37 -0
  23. package/dist/entities/geometry.js +26 -0
  24. package/dist/entities/image.d.ts +30 -0
  25. package/dist/entities/image.js +12 -0
  26. package/dist/entities/localization.d.ts +110 -0
  27. package/dist/entities/localization.js +13 -0
  28. package/dist/entities/object-proposals.d.ts +1 -1
  29. package/dist/entities/representation.d.ts +0 -183
  30. package/dist/entities/representation.js +1 -33
  31. package/dist/entities/segmentation-metadata.d.ts +70 -0
  32. package/dist/entities/segmentation-metadata.js +21 -1
  33. package/dist/entities/segmentation-verification.d.ts +1 -1
  34. package/dist/entities/segmentation.d.ts +5 -20
  35. package/dist/entities/validation.d.ts +2 -0
  36. package/dist/entities/validation.js +9 -0
  37. package/dist/entities/whole-object.d.ts +6 -21
  38. package/dist/features/choice-beam-layout.js +2 -7
  39. package/dist/features/proposals/presentation.d.ts +21 -0
  40. package/dist/features/proposals/presentation.js +122 -0
  41. package/dist/features/proposals/validation.d.ts +138 -0
  42. package/dist/features/proposals/validation.js +125 -0
  43. package/dist/features/segmentation/box-check.js +10 -23
  44. package/dist/features/segmentation/mask.js +2 -7
  45. package/dist/features/segmentation/region-result.d.ts +18 -0
  46. package/dist/features/segmentation/region-result.js +171 -0
  47. package/dist/features/segmentation/source-mask.d.ts +6 -0
  48. package/dist/features/segmentation/source-mask.js +32 -0
  49. package/dist/features/segmentation/validation.d.ts +9 -0
  50. package/dist/features/segmentation/validation.js +94 -0
  51. package/dist/infrastructure/decision-transport/errors.d.ts +8 -0
  52. package/dist/infrastructure/decision-transport/errors.js +34 -0
  53. package/dist/infrastructure/decision-transport/images.d.ts +1 -0
  54. package/dist/infrastructure/decision-transport/images.js +52 -0
  55. package/dist/infrastructure/{openrouter-common.d.ts → decision-transport/request.d.ts} +6 -15
  56. package/dist/infrastructure/decision-transport/request.js +162 -0
  57. package/dist/infrastructure/decision-transport/response.d.ts +1 -0
  58. package/dist/infrastructure/decision-transport/response.js +72 -0
  59. package/dist/infrastructure/decision-transport/route-identity.d.ts +11 -0
  60. package/dist/infrastructure/decision-transport/route-identity.js +23 -0
  61. package/dist/infrastructure/openrouter-vision.js +1 -1
  62. package/dist/infrastructure/openrouter.js +7 -19
  63. package/dist/infrastructure/raster.js +3 -8
  64. package/dist/infrastructure/segmentation/grabcut/index.d.ts +2 -2
  65. package/dist/infrastructure/segmentation/grabcut/index.js +3 -5
  66. package/dist/infrastructure/segmentation/grabcut/masks.d.ts +49 -0
  67. package/dist/infrastructure/segmentation/grabcut/masks.js +89 -0
  68. package/dist/infrastructure/segmentation/grabcut/model-asset.d.ts +4 -0
  69. package/dist/infrastructure/segmentation/grabcut/model-asset.js +4 -0
  70. package/dist/infrastructure/segmentation/grabcut/runtime.d.ts +70 -0
  71. package/dist/infrastructure/segmentation/grabcut/runtime.js +96 -0
  72. package/dist/infrastructure/segmentation/grabcut/worker-inference.d.ts +4 -43
  73. package/dist/infrastructure/segmentation/grabcut/worker-inference.js +4 -187
  74. package/dist/infrastructure/segmentation/mobile-sam/index.d.ts +3 -66
  75. package/dist/infrastructure/segmentation/mobile-sam/index.js +2 -478
  76. package/dist/infrastructure/segmentation/mobile-sam/input.d.ts +46 -0
  77. package/dist/infrastructure/segmentation/mobile-sam/input.js +83 -0
  78. package/dist/infrastructure/segmentation/mobile-sam/model-assets.d.ts +8 -0
  79. package/dist/infrastructure/segmentation/mobile-sam/model-assets.js +8 -0
  80. package/dist/infrastructure/segmentation/mobile-sam/object-proposals.d.ts +7 -0
  81. package/dist/infrastructure/segmentation/mobile-sam/object-proposals.js +124 -0
  82. package/dist/infrastructure/segmentation/mobile-sam/options.d.ts +43 -0
  83. package/dist/infrastructure/segmentation/mobile-sam/options.js +19 -0
  84. package/dist/infrastructure/segmentation/mobile-sam/proposal-masks.d.ts +26 -0
  85. package/dist/infrastructure/segmentation/mobile-sam/proposal-masks.js +71 -0
  86. package/dist/infrastructure/segmentation/mobile-sam/segmentation-masks.d.ts +112 -0
  87. package/dist/infrastructure/segmentation/mobile-sam/segmentation-masks.js +230 -0
  88. package/dist/infrastructure/segmentation/mobile-sam/segmenter.d.ts +22 -0
  89. package/dist/infrastructure/segmentation/mobile-sam/segmenter.js +268 -0
  90. package/dist/infrastructure/segmentation/mobile-sam/worker-expand.d.ts +7 -0
  91. package/dist/infrastructure/segmentation/mobile-sam/worker-expand.js +188 -0
  92. package/dist/infrastructure/segmentation/mobile-sam/worker-inference.d.ts +6 -149
  93. package/dist/infrastructure/segmentation/mobile-sam/worker-inference.js +6 -845
  94. package/dist/infrastructure/segmentation/mobile-sam/worker-models.d.ts +14 -0
  95. package/dist/infrastructure/segmentation/mobile-sam/worker-models.js +72 -0
  96. package/dist/infrastructure/segmentation/mobile-sam/worker-proposals.d.ts +7 -0
  97. package/dist/infrastructure/segmentation/mobile-sam/worker-proposals.js +159 -0
  98. package/dist/infrastructure/segmentation/mobile-sam/worker-segment.d.ts +4 -0
  99. package/dist/infrastructure/segmentation/mobile-sam/worker-segment.js +126 -0
  100. package/dist/infrastructure/segmentation/native-protocol.d.ts +59 -34
  101. package/dist/infrastructure/segmentation/native-protocol.js +26 -16
  102. package/dist/infrastructure/segmentation/proposal-presentation-input.d.ts +20 -0
  103. package/dist/infrastructure/segmentation/proposal-presentation-input.js +107 -0
  104. package/dist/infrastructure/segmentation/proposal-presentation-pixels.d.ts +8 -0
  105. package/dist/infrastructure/segmentation/proposal-presentation-pixels.js +93 -0
  106. package/dist/infrastructure/segmentation/proposal-presentation.js +10 -201
  107. package/dist/infrastructure/vision-chat/options.d.ts +62 -0
  108. package/dist/infrastructure/vision-chat/options.js +46 -0
  109. package/dist/infrastructure/vision-chat/request.d.ts +23 -0
  110. package/dist/infrastructure/vision-chat/request.js +109 -0
  111. package/dist/infrastructure/vision-chat/response.d.ts +3 -0
  112. package/dist/infrastructure/vision-chat/response.js +105 -0
  113. package/dist/infrastructure/vision-chat.d.ts +4 -61
  114. package/dist/infrastructure/vision-chat.js +8 -271
  115. package/dist/openai-compatible.js +1 -1
  116. package/dist/processes/extract-from-region.js +11 -216
  117. package/dist/processes/extract.d.ts +2 -8
  118. package/dist/processes/extract.js +12 -128
  119. package/dist/processes/proposal-location.js +5 -251
  120. package/docs/README.ru.md +50 -33
  121. package/docs/acceptance.md +6 -4
  122. package/docs/agents.ru.md +97 -0
  123. package/docs/api.md +4 -4
  124. package/docs/architecture.md +33 -7
  125. package/docs/architecture.ru.md +146 -0
  126. package/docs/benchmarks.md +3 -1
  127. package/docs/development.ru.md +141 -0
  128. package/docs/migrations/experimental-text-image-removal.ru.md +9 -0
  129. package/docs/provenance.json +288 -1
  130. package/docs/publishing.md +5 -3
  131. package/docs/refactoring-plan.ru.md +183 -0
  132. package/docs/v02-usage.md +8 -8
  133. package/docs/vision-results.md +1 -1
  134. package/package.json +5 -3
  135. package/dist/infrastructure/boundary-view.d.ts +0 -2
  136. package/dist/infrastructure/boundary-view.js +0 -263
  137. package/dist/infrastructure/openrouter-common.js +0 -317
  138. package/dist/infrastructure/text-representation.d.ts +0 -23
  139. package/dist/infrastructure/text-representation.js +0 -226
@@ -18,6 +18,289 @@
18
18
  "destination": "tools/no-discarded-interval.mjs"
19
19
  }
20
20
  ],
21
+ "authoredResearchNotes": [
22
+ {
23
+ "status": "scoped-verified-offline-dev",
24
+ "experiment": "color-normalization-hsv12-v1",
25
+ "prospectiveFreezeSha256": "0f2fef5754e83e7d3999a0f3a725c059f746519b222c2b3005fcd47806480b1f",
26
+ "sourceCommit": "167e6e2c50465e79649a4d1dca59cbf6b878c071",
27
+ "producerInputsSha256": "d72afa66096ea353d43f50fa01acbf03bf6875278ab4ea235051a0a6d5025009",
28
+ "codeFreezePath": "/root/.codex/artifacts/zorya-classifier-color-normalization-20261025/code-freeze.json",
29
+ "codeFreezeSha256": "e7dd607ce2f47545f4bd9eec978c12b3fe828f913867911218d003f03a5d3d03",
30
+ "artifactRoot": "/root/.codex/artifacts/zorya-classifier-color-normalization-20261025",
31
+ "runManifestPath": "/root/.codex/artifacts/zorya-classifier-color-normalization-20261025/run/run-manifest.json",
32
+ "runManifestSha256": "2713a85e2833865ae11c189069459ad74862a4005228e0ba99d32685cce33fc7",
33
+ "evaluationReportPath": "/root/.codex/artifacts/zorya-classifier-color-normalization-20261025/evaluation/evaluation-report.json",
34
+ "evaluationReportSha256": "f7c02ec50aebaa52e5758a94594d6e03270fa529d21941d10eb7073710d12e08",
35
+ "truthSha256": "af5bf46d19c7c7dd418f6da0b2d26b7708bf7e4ca659ea378641c424e2f3a1dd",
36
+ "independentAuditPath": "/root/.codex/artifacts/zorya-classifier-color-normalization-20261025/root-independent-audit.json",
37
+ "visualsManifestPath": "/root/.codex/artifacts/zorya-classifier-color-normalization-20261025/visuals/final/visuals-manifest.json",
38
+ "visualsManifestSha256": "4c50c070fbf28382d20aef6ba95d3fa9fc817010a232da7aac1e0c3613dc3d10",
39
+ "visualsPrimaryManifestPath": "/root/.codex/artifacts/zorya-classifier-color-normalization-20261025/visuals/visuals-manifest.json",
40
+ "makeVisualsScript": "/root/.codex/artifacts/zorya-classifier-color-normalization-20261025/make-visuals.mjs",
41
+ "makeVisualsScriptSha256": "5d194f1ec56e61ee87e1ca6b17ed97a200eda8147c3a15b13a44901d62476a2f",
42
+ "hypothesisArtifact": "/root/.codex/artifacts/zorya-classifier-color-normalization-20261025/hypothesis.txt",
43
+ "researchDoc": "docs/research/v03-color-normalization-v1.ru.md",
44
+ "providerCalls": 0,
45
+ "repositoryCheckNote": "Superseded: root-check.log stopped at Knip after secrets/typecheck/lint/boundaries. Linux local npm run check exit 0 (800 pass, 0 fail, 0 skip, build ok) — root-check-final.log; npm run pack:check exit 0 (445 files, 188 runtime dist, runtime dist sha256 unchanged vs v0.2.2) — root-pack-check.log. Local acceptance/package only; quality qualification and heldout not run.",
46
+ "note": "One complete offline DEV producer/evaluator run on frozen cohort; independent artifact audit passed; local check and pack:check passed on Linux; raster oracle metrics and visualization only — no promotion, no quality qualification."
47
+ },
48
+ {
49
+ "status": "scoped-verified-offline-dev",
50
+ "experiment": "contour-completion-v1",
51
+ "prospectiveFreezeSha256": "ea0bba2e9a421f2b80053c69e38e7ce54a1d356153e4a70691c7a2890ed3a2b9",
52
+ "producerInputsSha256": "e4be519770d7089c371f92a115d5141ecd46a9b49d358aa969a3d78057794218",
53
+ "v1RunManifestSha256": "2713a85e2833865ae11c189069459ad74862a4005228e0ba99d32685cce33fc7",
54
+ "sourceCommit": "167e6e2c50465e79649a4d1dca59cbf6b878c071",
55
+ "artifactRoot": "/root/.codex/artifacts/zorya-classifier-contour-completion-20261025",
56
+ "producerScript": "/root/.codex/artifacts/zorya-classifier-contour-completion-20261025/contour-completion.mjs",
57
+ "producerScriptSha256": "c91ac92042b64a6bd0a5059b00c73070bd3a5da7ffd3fb775449016e6cc7eb7e",
58
+ "evaluatorScript": "/root/.codex/artifacts/zorya-classifier-contour-completion-20261025/evaluate-contour-completion.mjs",
59
+ "evaluatorScriptSha256": "02ebce558bfcf7516f83a74a93bd7b37b68a3986bff0fd7f8e920c0452c35392",
60
+ "syntheticTestScript": "/root/.codex/artifacts/zorya-classifier-contour-completion-20261025/contour-completion.test.mjs",
61
+ "syntheticTestScriptSha256": "682ca39473216627b74f827d9662bb00f45eff62524635e0bc768159c1e6d7c4",
62
+ "syntheticTestLog": "/root/.codex/artifacts/zorya-classifier-contour-completion-20261025/contour-completion.test.log",
63
+ "runManifestPath": "/root/.codex/artifacts/zorya-classifier-contour-completion-20261025/run/run-manifest.json",
64
+ "runManifestSha256": "87c55b12351a6b6f408eebb71eaa0d79f5a03a11d755c575d73f2c83a8c37d5d",
65
+ "evaluationReportPath": "/root/.codex/artifacts/zorya-classifier-contour-completion-20261025/evaluation/evaluation-report.json",
66
+ "evaluationReportSha256": "ac9f8e193414892ae2adf9f03e3350a7b9fa3bf669f640127ea1193129d6c480",
67
+ "independentAuditPath": "/root/.codex/artifacts/zorya-classifier-contour-completion-20261025/root-independent-audit.json",
68
+ "independentAuditSha256": "0efa03ae7bf4c2db00732614aa5179428c40a9ec0e833cf78893d7b92b91ab96",
69
+ "truthSha256": "af5bf46d19c7c7dd418f6da0b2d26b7708bf7e4ca659ea378641c424e2f3a1dd",
70
+ "truthMaskSha256": "0a82516a43057329a7b2cafa4fcbe1c714d997a87a9e1dbe6d84ffcbf1bbbe26",
71
+ "makeAnalysisScript": "/root/.codex/artifacts/zorya-classifier-contour-completion-20261025/make-analysis-report.mjs",
72
+ "makeAnalysisScriptSha256": "d37c4ea642c2c20147b6a899dba2332eafcd3351c1a70f8854faff6812e8d352",
73
+ "analysisFirstPassManifestPath": "/root/.codex/artifacts/zorya-classifier-contour-completion-20261025/analysis/analysis-manifest.json",
74
+ "analysisFirstPassHtmlPath": "/root/.codex/artifacts/zorya-classifier-contour-completion-20261025/analysis/comparison.html",
75
+ "analysisFirstPassHtmlSha256": "971dee36e3b8b4522920a8c6b049fa9aa09e0b850fb37c953b631707c37c5ebe",
76
+ "analysisPriorFinalManifestPath": "/root/.codex/artifacts/zorya-classifier-contour-completion-20261025/analysis-final/analysis-manifest.json",
77
+ "analysisPriorFinalManifestSha256": "98cc626c6fe903360156af122fa28816edfabf1f378320381faaaf1ef2d58ed1",
78
+ "analysisPriorFinalHtmlPath": "/root/.codex/artifacts/zorya-classifier-contour-completion-20261025/analysis-final/comparison.html",
79
+ "analysisPriorFinalHtmlSha256": "6d27e7fc9a6ce6ce264af41da770aabcdf764a074350a58763c13c36438112a4",
80
+ "analysisPriorFinalOverviewSha256": "c6e7c135ec666312207a94f91631a4a1f7cd9c65adf2d90a720b91c8e3df6f23",
81
+ "analysisPriorReadableManifestPath": "/root/.codex/artifacts/zorya-classifier-contour-completion-20261025/analysis-readable/analysis-manifest.json",
82
+ "analysisPriorReadableManifestSha256": "3c04539f4a55c440bc500c34abba17a54d1749f3b2901bf2e141ca23f24840ac",
83
+ "analysisPriorReadableHtmlPath": "/root/.codex/artifacts/zorya-classifier-contour-completion-20261025/analysis-readable/comparison.html",
84
+ "analysisPriorReadableHtmlSha256": "bb1197b772ba8c5a2fb70a0d25cfac93d41a73a27a7a8a58ceb16049808a945a",
85
+ "analysisPriorReadableOverviewSha256": "9b91e913b24c02a78321d11d6de689b17aac2b2738e3275253531af23cb268eb",
86
+ "analysisManifestPath": "/root/.codex/artifacts/zorya-classifier-contour-completion-20261025/analysis-ru/analysis-manifest.json",
87
+ "analysisManifestSha256": "58ee884e9043a9560101b07397d453adcdf78f5924ff565f42a24a5a938655fc",
88
+ "analysisHtmlPath": "/root/.codex/artifacts/zorya-classifier-contour-completion-20261025/analysis-ru/comparison.html",
89
+ "analysisHtmlSha256": "f5e2c1cb0087fa7f41e771f980c66c48b0cc19116f1a7da12a4c2b1a2cd3874b",
90
+ "analysisOverviewSha256": "9b91e913b24c02a78321d11d6de689b17aac2b2738e3275253531af23cb268eb",
91
+ "analysisCasePhoto01Sha256": "a1eb771d8a14f377bcc10e120fcb6f2b2249e1c9267c22a2c304a9511683d62e",
92
+ "analysisCasePhoto02Sha256": "c9e125bb2fcb684643b5a65a0911ce3fa7f91995af429082c9ba8f914798e670",
93
+ "analysisCaseUi01Sha256": "4a7152efc563558db302697a54a6640ee78a7511dbdce776d20d4d4148fd3509",
94
+ "analysisCaseMap01Sha256": "c4498625946778c0225841b8c737df0e81c0f91a7559125f3563d2fad133af67",
95
+ "analysisReadableLogPath": "/root/.codex/artifacts/zorya-classifier-contour-completion-20261025/make-analysis-readable.log",
96
+ "analysisReadableReceiptPath": "/root/.codex/artifacts/zorya-classifier-contour-completion-20261025/composer-make-analysis-readable-receipt.json",
97
+ "analysisRuLogPath": "/root/.codex/artifacts/zorya-classifier-contour-completion-20261025/make-analysis-ru.log",
98
+ "analysisRuReceiptPath": "/root/.codex/artifacts/zorya-classifier-contour-completion-20261025/composer-make-analysis-ru-receipt.json",
99
+ "researchDoc": "docs/research/v03-contour-completion-v1.ru.md",
100
+ "scope": "offline geometry on frozen v1 HSV12 component maps; 72361 components; 9 unique images; 12 case rows; no truth or corpus images in producer",
101
+ "providerCalls": 0,
102
+ "resultsMeasured": true,
103
+ "note": "One complete offline DEV producer/evaluator run; independent artifact audit passed; canonical Russian presentation (make-analysis-report.mjs --output-dir analysis-ru) from frozen receipts only; analysis/, analysis-final/, analysis-readable/ preserved as prior drafts; raw evaluator visuals unchanged; no promotion, no quality qualification, no heldout."
104
+ },
105
+ {
106
+ "status": "scoped-verified-offline-dev",
107
+ "experiment": "directed-boundary-v1",
108
+ "prospectiveFreezeSha256": "5f056f97d0d6eda4ec2df3f47ee392f2999b1bc9b9f599e2037d615bca5ffd54",
109
+ "producerInputsSha256": "90449b819df88233bf847f449604cfe1b2fe707fcbc73ecd43f467225e96cece",
110
+ "v1RunManifestSha256": "2713a85e2833865ae11c189069459ad74862a4005228e0ba99d32685cce33fc7",
111
+ "sourceCommit": "167e6e2c50465e79649a4d1dca59cbf6b878c071",
112
+ "artifactRoot": "/root/.codex/artifacts/zorya-classifier-directed-boundary-20261025",
113
+ "producerScript": "/root/.codex/artifacts/zorya-classifier-directed-boundary-20261025/producer.py",
114
+ "evaluatorScript": "/root/.codex/artifacts/zorya-classifier-directed-boundary-20261025/evaluator.py",
115
+ "evaluatorCodeFreezeSha256": "1fade929b325ec322f28ad39ea184c8af74b3bd50912888de989416571f9b68b",
116
+ "syntheticProducerTests": 32,
117
+ "syntheticEvaluatorTests": 18,
118
+ "runManifestPath": "/root/.codex/artifacts/zorya-classifier-directed-boundary-20261025/run/run-manifest.json",
119
+ "runManifestSha256": "ba6c26c6bee06766aa0dcc2e3fc5bb95dc2286a25237c89f5ad56d44dca31a91",
120
+ "evaluationReportPath": "/root/.codex/artifacts/zorya-classifier-directed-boundary-20261025/evaluation/evaluation-report.json",
121
+ "evaluationReportSha256": "b0d375ac58eba198ff8ffe8f27c10da2d62ab74ce6bf7b5dfe85a1a6f1ab6a5e",
122
+ "independentAuditPath": "/root/.codex/artifacts/zorya-classifier-directed-boundary-20261025/root-independent-audit.json",
123
+ "independentAuditSha256": "a63c3501407ed2d0dde69a639968af6dc7a8eb9b7bfa09d5d1b64b9195833a7e",
124
+ "firstHitAuditPath": "/root/.codex/artifacts/zorya-classifier-directed-boundary-20261025/root-first-hit-audit.json",
125
+ "firstHitAuditSha256": "c8bb2e8b2d2bcaef8b0a644f4c07615862cb320c879cefedb24a792a3d0ceac1",
126
+ "metricsAuditPath": "/root/.codex/artifacts/zorya-classifier-directed-boundary-20261025/root-metrics-audit.json",
127
+ "metricsAuditSha256": "71ddee66b9d519f8a979c62b553b4e2cc53e3d1257b7ba522ed6bdc846455ffc",
128
+ "evaluationAgreementPath": "/root/.codex/artifacts/zorya-classifier-directed-boundary-20261025/root-evaluation-agreement.json",
129
+ "evaluationAgreementSha256": "b10270de1f33a1af548f738b6a08e682a3951c882d9b5f6114df2e65540de059",
130
+ "truthSha256": "af5bf46d19c7c7dd418f6da0b2d26b7708bf7e4ca659ea378641c424e2f3a1dd",
131
+ "truthMaskSha256": "0a82516a43057329a7b2cafa4fcbe1c714d997a87a9e1dbe6d84ffcbf1bbbe26",
132
+ "makeReportScript": "/root/.codex/artifacts/zorya-classifier-directed-boundary-20261025/make_report.py",
133
+ "makeReportScriptSha256": "8920e273b8f6f201bcc418f84c83a15022619e86f6cf49c7ba198b2f7295f45d",
134
+ "analysisManifestPath": "/root/.codex/artifacts/zorya-classifier-directed-boundary-20261025/analysis-final-v3/outputs-manifest.json",
135
+ "analysisManifestSha256": "1a3fbb39de305a56314ae2ec84fb555719d9017effc7b1fae86791ff60c0625f",
136
+ "analysisHtmlPath": "/root/.codex/artifacts/zorya-classifier-directed-boundary-20261025/analysis-final-v3/comparison.html",
137
+ "analysisHtmlSha256": "aa7c4da3eaaa37fca3cba26c739dc5d9da071f264be64a163331cc94c7a7ac3a",
138
+ "priorAnalysisDirsPreserved": [
139
+ "/root/.codex/artifacts/zorya-classifier-directed-boundary-20261025/analysis",
140
+ "/root/.codex/artifacts/zorya-classifier-directed-boundary-20261025/analysis-final",
141
+ "/root/.codex/artifacts/zorya-classifier-directed-boundary-20261025/analysis-final-v2"
142
+ ],
143
+ "contourCompletionHtmlPath": "/root/.codex/artifacts/zorya-classifier-contour-completion-20261025/analysis-ru/comparison.html",
144
+ "researchDoc": "docs/research/v03-directed-boundary-v1.ru.md",
145
+ "scope": "offline directed rays and same-parent partition on frozen v1 HSV12 maps; 72361 components to 85012 fragments; 9 unique images; 12 case rows; no truth in producer",
146
+ "providerCalls": 0,
147
+ "resultsMeasured": true,
148
+ "repositoryCheckNote": "npm run check passed Linux Node 22.23.2 (800/800, build passed); receipt /root/.codex/artifacts/zorya-classifier-directed-boundary-20261025/root-repo-check.log. /root/.codex/artifacts/zorya-classifier-directed-boundary-20261025/root-final-verification.json will record format/secrets/installed-archive pack checks after doc-only pass; those not claimed passed yet.",
149
+ "note": "One complete offline DEV producer/evaluator run each; independent partition and metrics audits passed; canonical Russian presentation (make_report.py → analysis-final-v3) from frozen receipts only; factual UI02/UI03 clarification (gate-pass vs highest-IoU card candidates, no PNG/cutout regen); prior analysis/, analysis-final/, analysis-final-v2/ preserved; no promotion, no heldout qualification."
150
+ },
151
+ {
152
+ "status": "scoped-verified-retrospective",
153
+ "experiment": "v03-method-comparison-dev12",
154
+ "selectedExperimentalBaseline": "color-normalization-hsv12-v1",
155
+ "baselineStatus": "experimental-reference-only; not a library default",
156
+ "sourceCommit": "167e6e2c50465e79649a4d1dca59cbf6b878c071",
157
+ "prospectiveFreezeSha256": "0f2fef5754e83e7d3999a0f3a725c059f746519b222c2b3005fcd47806480b1f",
158
+ "producerInputsSha256": "d72afa66096ea353d43f50fa01acbf03bf6875278ab4ea235051a0a6d5025009",
159
+ "codeFreezeSha256": "e7dd607ce2f47545f4bd9eec978c12b3fe828f913867911218d003f03a5d3d03",
160
+ "v1RunManifestSha256": "2713a85e2833865ae11c189069459ad74862a4005228e0ba99d32685cce33fc7",
161
+ "v1EvaluationReportSha256": "f7c02ec50aebaa52e5758a94594d6e03270fa529d21941d10eb7073710d12e08",
162
+ "truthSha256": "af5bf46d19c7c7dd418f6da0b2d26b7708bf7e4ca659ea378641c424e2f3a1dd",
163
+ "v1IndependentAuditSha256": "01cba09b45c99acddd9f051524408500897e75aa41794e15ab2d7bd97e372e29",
164
+ "visualsManifestSha256": "4c50c070fbf28382d20aef6ba95d3fa9fc817010a232da7aac1e0c3613dc3d10",
165
+ "artifactRoot": "/root/.codex/artifacts/zorya-classifier-method-comparison-20261025",
166
+ "frozenComparisonAuditPath": "/root/.codex/artifacts/zorya-classifier-method-comparison-20261025/root-frozen-comparison-audit.json",
167
+ "frozenComparisonAuditSha256": "3092d167bee31203469fb21629dee58bf1a23d63d3abc305e6dd23d57e597339",
168
+ "h8aRunPath": "/root/projects/Zorya/.migration/20261022-r1/classifier/aux/runs/v03/h8a-luna-chat-8633fe55-47af-441b-9265-a159d3e4efc8/run.json",
169
+ "h8aRunSha256": "1def8b64894f520e6e3ddd9c432212e1333684ae5db1e7c5747485c185cbb98a",
170
+ "h8aIndependentAuditPath": "/root/.codex/artifacts/zorya-classifier-method-comparison-20261025/root-h8a-audit.json",
171
+ "h8aIndependentAuditSha256": "90bf5f53ba01523ad3e410d48b8dd1a54cf11770bad81a8b62353ecab8a61179",
172
+ "h8aCutoutAuditPath": "/root/.codex/artifacts/zorya-classifier-method-comparison-20261025/root-h8a-cutout-audit.json",
173
+ "h8aCutoutAuditSha256": "e0acfa8e2b54e142c1b68a8753e47fbe79a1b94d6dec97bda33d9c9f6fd247a9",
174
+ "makeMethodComparisonScript": "/root/.codex/artifacts/zorya-classifier-method-comparison-20261025/report/make-method-comparison.mjs",
175
+ "makeMethodComparisonScriptSha256": "4759d04cf88bcdb4b8c4086cbbde36a3d3a27fc4116b36e1e1b3d10a8e0b5888",
176
+ "firstPassComparisonHtmlPath": "/root/.codex/artifacts/zorya-classifier-method-comparison-20261025/report/comparison.html",
177
+ "firstPassComparisonHtmlSha256": "16d1d7f92549253a14120906bfadfc88633140c4736a172a4259ddaf83167d7d",
178
+ "firstPassReportManifestPath": "/root/.codex/artifacts/zorya-classifier-method-comparison-20261025/report/report-manifest.json",
179
+ "firstPassReportManifestSha256": "c22c383f7cd1e7f81e2ab444988fa77b653660a88869bdacc789ac4d9ea20f7b",
180
+ "firstPassGeneratorScriptSha256": "83019ab0f7d49edb9e24549304bf91206726a8db41ea2d5f06d1b2f824b4c566",
181
+ "selectedBaselinePath": "/root/.codex/artifacts/zorya-classifier-method-comparison-20261025/report-final/selected-baseline.json",
182
+ "selectedBaselineSha256": "f201c45064df827b4a7f99810be9366b06616fb15654b85c7d62af95263b2a90",
183
+ "comparisonHtmlPath": "/root/.codex/artifacts/zorya-classifier-method-comparison-20261025/report-final/comparison.html",
184
+ "comparisonHtmlSha256": "b7056e509337d5f03be156572e42385eb8c513d2fbbf28254faa200c52535855",
185
+ "reportManifestPath": "/root/.codex/artifacts/zorya-classifier-method-comparison-20261025/report-final/report-manifest.json",
186
+ "reportManifestSha256": "9aac44273386bcbb0a95a140b72b47d1c4d816112f8fbf997c1590ebc2cd82d8",
187
+ "finalReceiptPath": "/root/.codex/artifacts/zorya-classifier-method-comparison-20261025/logs/make-method-comparison-final-receipt.json",
188
+ "presentationCorrectionReceiptPath": "/root/.codex/artifacts/zorya-classifier-method-comparison-20261025/root-presentation-correction-receipt.json",
189
+ "researchDocSha256": "175ed38285edf614ab3f2a3b9cd7a68f5e45baaaa723b8ec5aa1a6018e1b9b23",
190
+ "directedAnalysisManifestPath": "/root/.codex/artifacts/zorya-classifier-directed-boundary-20261025/analysis-final-v3/outputs-manifest.json",
191
+ "hullAnalysisManifestPath": "/root/.codex/artifacts/zorya-classifier-contour-completion-20261025/analysis-ru/analysis-manifest.json",
192
+ "researchDoc": "docs/research/v03-method-comparison.ru.md",
193
+ "providerCalls": 0,
194
+ "resultsMeasured": true,
195
+ "photo01CutoutProseCorrectionReceiptPath": "/root/.codex/artifacts/zorya-classifier-method-comparison-20261025/root-photo01-cutout-prose-correction-receipt.json",
196
+ "note": "Retrospective DEV12 method comparison from frozen audits and copied visuals only; canonical presentation in report-final/ with report/ first pass preserved; H8a/H8b 7/9 mask-derived box gate not pixel-mask IoU; repo hrefs path.relative; bird IoU same reference mask; h8a-cutout audit e0acfa8e…; H4b omitted; photo01 H8a vs HSV12 cutout interpretation corrected (H8a better wall separation, not more road/wall bleed); manifest 41 outputs verify 0 mismatches; image asset hashes unchanged vs prior report-final; no producer/evaluator reran; no promotion or heldout."
197
+ },
198
+ {
199
+ "status": "scoped-verified-offline",
200
+ "experiment": "public-experimental-text-image-removal",
201
+ "sourceCommit": "167e6e2c50465e79649a4d1dca59cbf6b878c071",
202
+ "artifactRoot": "/root/.codex/artifacts/zorya-classifier-remove-text-image-20261025",
203
+ "preRemovalSnapshotPath": "/root/.codex/artifacts/zorya-classifier-remove-text-image-20261025/pre-removal-state.json",
204
+ "migrationDoc": "docs/migrations/experimental-text-image-removal.ru.md",
205
+ "ownedPaths": [
206
+ "src/entities/image.ts",
207
+ "src/entities/representation.ts",
208
+ "src/app/create-classifier.ts",
209
+ "src/app/classifier-representation.ts",
210
+ "benchmarks/experiments/research-representation-contract.ts",
211
+ "benchmarks/experiments/create-research-classifier.ts",
212
+ "benchmarks/experiments/text-representation.ts",
213
+ "scripts/pack-check.mjs",
214
+ "test/v02-contracts.test.ts",
215
+ "test/v02-integration.test.ts",
216
+ "test/proposal-ownership.test.ts",
217
+ "test/whole-object-boundary-view.test.ts"
218
+ ],
219
+ "providerCalls": 0,
220
+ "note": "Public IMAGE-AS-TEXT selector removed; strict INVALID_INPUT before DecisionPort; benchmark-only research schemas and createResearchClassifier composition preserved; historical v02 text evidence unchanged."
221
+ },
222
+ {
223
+ "status": "owner-selected-development-direction",
224
+ "experiment": "h8a-openai-luna-chat-primary-development",
225
+ "selectedArm": "h8a-openai-luna-chat",
226
+ "sourceCommit": "167e6e2c50465e79649a4d1dca59cbf6b878c071",
227
+ "selectionDate": "2026-10-25",
228
+ "selectedBy": "owner",
229
+ "artifactRoot": "/root/.codex/artifacts/zorya-classifier-h8a-selection-20261025",
230
+ "beforeFilesSnapshotPath": "/root/.codex/artifacts/zorya-classifier-h8a-selection-20261025/before-files.json",
231
+ "beforeStateSnapshotPath": "/root/.codex/artifacts/zorya-classifier-h8a-selection-20261025/before-state.json",
232
+ "h8aRunPath": "/root/projects/Zorya/.migration/20261022-r1/classifier/aux/runs/v03/h8a-luna-chat-8633fe55-47af-441b-9265-a159d3e4efc8/run.json",
233
+ "h8aRunSha256": "1def8b64894f520e6e3ddd9c432212e1333684ae5db1e7c5747485c185cbb98a",
234
+ "h8aFreezeSha256": "d371f64a76effb8b96951709c03a4801e1751f8f8032d363623ba1903b33ed27",
235
+ "h8aIndependentEvaluationPath": "docs/evidence/v03/h8a-ordinary-vision-independent-evaluation.json",
236
+ "h8aIndependentEvaluationSha256": "1a6850b69d4f5ce52d0531594ede845ba0aeb3698b844f5946c33da46c3fbab2",
237
+ "h8aIndependentAuditPath": "docs/evidence/v03/h8a-ordinary-vision-independent-audit.md",
238
+ "h8aIndependentAuditSha256": "707c47f7f5efffc94ee6375cbfa795df1689ee26e3481bffe1795ac815da5fca",
239
+ "h8aExternalArtifactAuditPath": "/root/.codex/artifacts/zorya-classifier-method-comparison-20261025/root-h8a-audit.json",
240
+ "h8aExternalArtifactAuditSha256": "90bf5f53ba01523ad3e410d48b8dd1a54cf11770bad81a8b62353ecab8a61179",
241
+ "selectionRecordPath": "docs/evidence/v03/h8a-development-selection-20261025.json",
242
+ "selectionRecordSha256": "d6f00e0947933fbada045812dff5f9815bcb057b35d92d0174a3dbaa0461bf0b",
243
+ "researchDoc": "docs/research/v03-h8a-development-baseline.ru.md",
244
+ "researchDocSha256": "a23dbc79e169704777873e5f31ad55a796bb00c701d1ee45ddcb5d47d2da78e5",
245
+ "implementationReference": "benchmarks/v03/run-h8-ordinary-vision.ts",
246
+ "selectedForDevelopment": true,
247
+ "productionPromotion": false,
248
+ "libraryDefaultChanged": false,
249
+ "implementationChanged": false,
250
+ "providerCalls": 0,
251
+ "newInferenceCalls": 0,
252
+ "positiveSameMaskBoxGate": "7/9",
253
+ "negativeFalseOutputs": "2/3",
254
+ "advancementGatePass": false,
255
+ "note": "Owner recorded H8a as primary development direction from verified frozen DEV12 evidence only; no reruns, tuning, qualification, or library default; H8b and failed H9–H11 records preserved; next work is diagnostic sequencing documented in research baseline, not authorization for paid inference."
256
+ },
257
+ {
258
+ "status": "prepared-not-executed",
259
+ "experiment": "jev-native-box-dev12-v1",
260
+ "profileId": "jev-native-box-dev12-v1",
261
+ "producerInputsSha256": "f5c5cba9cd15c3ed1e027d8f8e705bcc723ccf86e08862edfcd75b05b1e9c2ed",
262
+ "truthSha256": "af5bf46d19c7c7dd418f6da0b2d26b7708bf7e4ca659ea378641c424e2f3a1dd",
263
+ "researchDoc": "docs/research/v03-jev-native-box-comparison-plan.ru.md",
264
+ "researchDocSha256": "aad610cf236a4d48157ec606074bab0e5c3a0b6f67a7499aa304cd1a17ba2e35",
265
+ "producerScript": "benchmarks/v03/run-jev-native-box.ts",
266
+ "evaluatorScript": "benchmarks/v03/evaluate-jev-native-box.ts",
267
+ "providerCalls": 0,
268
+ "newInferenceCalls": 0,
269
+ "note": "Prospective DEV12 native Box+Noul arm: evaluator join/receipt audit and H8 mask visual contract prepared offline; no live producer/evaluator CLI run, no evaluation metrics or promotion."
270
+ },
271
+ {
272
+ "status": "scoped-verified-dev",
273
+ "experiment": "jev-native-box-dev12-v1",
274
+ "profileId": "jev-native-box-dev12-v1",
275
+ "producerInputsSha256": "f5c5cba9cd15c3ed1e027d8f8e705bcc723ccf86e08862edfcd75b05b1e9c2ed",
276
+ "truthSha256": "af5bf46d19c7c7dd418f6da0b2d26b7708bf7e4ca659ea378641c424e2f3a1dd",
277
+ "freezeFilePath": "/root/.codex/artifacts/zorya-classifier-jev-native-box-20261025/offline-pipeline-v2/freeze/freeze.json",
278
+ "freezeFileSha256": "ed73aa7cb0cc683e8a36353fecd3e556a132dab7ddb083c4a2a50fd2d244ddb7",
279
+ "freezeContentSha256": "ce9de928ffc22ff593046a9e42e17352ec4492479bae0d833a739e4e036e7b6d",
280
+ "runManifestPath": "/root/.codex/artifacts/zorya-classifier-jev-native-box-20261025/live-run-20261025T173530/run-manifest.json",
281
+ "runManifestSha256": "75d5a7932ac7c8c4244404f89e7e5f91886120843a742d3dcfddfc8ad3c6324b",
282
+ "evaluationPath": "/root/.codex/artifacts/zorya-classifier-jev-native-box-20261025/live-evaluation-20261025T173530/evaluation.json",
283
+ "evaluationSha256": "7c147472a4aefdd5309a71753f1affa73a185e7f19c2ea6619dc29356185f52a",
284
+ "h8aRunSha256": "1def8b64894f520e6e3ddd9c432212e1333684ae5db1e7c5747485c185cbb98a",
285
+ "h8aEvaluationSha256": "1a6850b69d4f5ce52d0531594ede845ba0aeb3698b844f5946c33da46c3fbab2",
286
+ "researchDoc": "docs/research/v03-jev-native-box-results.ru.md",
287
+ "evidenceRecord": "docs/evidence/v03/jev-native-box-dev12-20261025.json",
288
+ "finalReportManifestPath": "/root/.codex/artifacts/zorya-classifier-jev-native-box-20261025/final-report/output-manifest.json",
289
+ "finalReportManifestSha256": "9da113e8934d39d5a7d5359b5d86097e3ce432f7e5e43b80687e6fd6878fd2be",
290
+ "providerCalls": 12,
291
+ "newInferenceCalls": 12,
292
+ "knownCostUsd": 0.00140553,
293
+ "unknownCostUsd": 0,
294
+ "unknownCostCalls": 0,
295
+ "jevStrictPositiveBoxGate": "3/9",
296
+ "h8aStrictPositiveBoxGate": "7/9",
297
+ "jevPositiveIoUOnlyDiagnostic": "8/9",
298
+ "h8aPositiveIoUOnlyDiagnostic": "7/9",
299
+ "productionPromotion": false,
300
+ "libraryDefaultChanged": false,
301
+ "note": "Completed single DEV12 exposed pilot: native Jev Box+Noul vs historical H8a on frozen cohort; independent evaluation and root audit verified; final HTML/PNG report under external artifact final-report/; no heldout qualification."
302
+ }
303
+ ],
21
304
  "changes": [
22
305
  "Standalone ports and lifecycle; no game/application dependencies",
23
306
  "Multiple targets allowed, returning one candidate",
@@ -26,7 +309,11 @@
26
309
  "45-second default for standalone operations; original gaming deadline unchanged",
27
310
  "Provider-independent ordinary vision chat protocol with closed ranks and separate presence; no invented probabilities",
28
311
  "Direct OpenAI-compatible endpoint and optional OpenRouter wrapper; native Jev retained as optional historical integration",
29
- "One winner for single-label/final selection; four ranks only for coarse/fine beam stages"
312
+ "One winner for single-label/final selection; four ranks only for coarse/fine beam stages",
313
+ "Refactor wave 8 (completed, branch work/classifier-refactor-20261023, commit 7a74226): Russian guides architecture.ru.md, development.ru.md, agents.ru.md, refactoring-plan.ru.md; English README/CONTRIBUTING/architecture navigation aligned to measured waves; documented app→processes/features/entities/infrastructure import direction, four package exports plus separate CLI bin, v0.2 extract branch complete→result/cutout and needs-expansion→single enclosing correction plus final check; benchmarks/credentials.ts env and limited --env-file; benchmarks/v03/integrity-receipts.ts path identity; benchmarks/experiments research tree with runtime-source-files.ts recording source dependencies and build/pack:check enforcing npm dist boundaries; agent roles and composer-2.5-fast dispatch rules in agents.ru.md; copied-file SHA-256 entries above unchanged",
314
+ "Refactor waves 1-8 (measured, Linux Node 22/24 at 7a74226): waves 1-7C as below plus wave 8 documentation and provenance closure; wave 9 verification on Linux Node 22.23.2 and bundled Node 24.22.1 — npm run check 772/772, pack:check 447/188/212, zero provider HTTP; public API four entries and 67 exported types (final-public-api.log); 407 protected baseline files unchanged plus package-lock.json, .env.example, src/index.ts (final-protected-evidence.json, code checkpoint 76d7ac6); local-evidence 7/7 configured (final-local-evidence-node22-configured.log); Python geometry oracles 6/6 (root-controlled-oracles.log); Windows checks not run on measured host; python-native suite not run; no publication or paid provider runs",
315
+ "Refactor waves 1-7C (measured): src/app classifier module split; processes/features/segmentation and proposals; infrastructure decision-transport, vision-chat, mobile-sam/grabcut facades; runtime-source-files.ts records benchmark source dependencies; npm dist isolation enforced by build and pack:check; benchmarks/credentials.ts explicit env and limited --env-file; benchmarks/v03/integrity-receipts.ts H5/H6 path identity; unified scripts/run-classified-tests.mjs and Zod test catalog; Wave 7C removed four unused functions and one unused type and privatized unused exports without algorithm changes; portable 772/772 Linux Node 22 at 76d7ac6; 407 protected baseline files byte-identical (wave7-final-protected-evidence.json); package-lock unchanged; Knip explicit entries with onnxruntime-node sole optional dependency exception",
316
+ "Refactor wave 9 completion (accepted, branch work/classifier-refactor-20261023, commit 4877d05): four-pair matrix Linux Node 22.23.2 and 24.22.1 plus Windows Server 2025 build 26100 Node 22.23.4 and 24.22.1 on local evaluation VM (remote GitHub Actions CI not run); npm run check portable 772 per run with Linux 772/772 zero skip and Windows 765 pass zero fail seven pre-existing optional/platform skips; pack:check 447/188/212 archive sha256 cb3e980854bb625380b594f5ac3f05d657bbeda4b42880bf8f57fe307645aa20 and runtime dist sha256 111c744ad406ff4645e2ff0f471610376a648aa81771eacf0a94bb61ea8d1131 identical across pairs zero provider HTTP requests/calls (not zero network traffic); public API four entries 67 types bidirectional value compatibility (public-api.log); 407 protected files unchanged plus package-lock.json .env.example src/index.ts (protected-evidence.json); isolated offline CPU Python 3.12.3 python-native 44/44 zero skip with H10 caller-owned pinned local model files HF_HUB_OFFLINE TRANSFORMERS_OFFLINE both H10_PYTHON_EXECUTABLE and H11_PYTHON_EXECUTABLE required verified run used one interpreter two H11 tests CPU FakeTensor metadata-only fixtures exercise loader/validation not GPU or live H11 inference; local-evidence 7/7 zero fail skip (local-evidence-current.log); Python geometry oracles 6/6 (controlled-oracles-current.log); native request-source bounds dedupe 420 equivalent inputs identical ordered Zod errors (native-protocol-equivalence.json); preserved failed receipts python-native.log initial offline setup failure wave7-root-local-evidence-baseline.log final-local-evidence-node22.log Windows win-4877d0535a04-node22 setup failure win-4877d0535a04-node22-r2 Knip VCRUNTIME before portable tests vc-runtime Node -e empty stdout probe not accepted accepted separate CJS module-load check exact stdout marker exit 0; Windows jobs win-4877d0535a04-node22-r3 and win-4877d0535a04-node24 accepted completion-code-verification.json local-verification.json; historical wave 9 Linux-only snapshot at 7a74226 retained in docs; no publication or paid provider runs; copied-file SHA-256 entries above unchanged"
30
317
  ],
31
318
  "originalRepositoryModified": false
32
319
  }
@@ -29,8 +29,10 @@ Before release, match every runtime file in the final archive to the bytes cover
29
29
 
30
30
  Keep the final release manifest outside its own archives to avoid self-reference. It records the clean source commit, archive hashes/integrities, model recipe and corpus seals, preserved failures, native/resource receipts, CI run and redacted secret scan. Publish those exact archive bytes, verify the registry response and dist-tag, then attach the matching source and npm artifact to the GitHub release. Do not replace failed accuracy or resource gates with an offline test count.
31
31
 
32
- ## 0.2.1 release-candidate handoff
32
+ ## Research and consumer archive
33
33
 
34
- This branch prepares a local **0.2.1 release candidate** from the published **0.2.0** package baseline. Only experimental status documentation, JSDoc, CLI help, the package description, and a test-only Git fixture isolation fix in `test/secrets.test.ts` changed. There are no model, default, or algorithm/runtime behavior changes relative to 0.2.0. At local 0.2.1 release-candidate preparation time, npm and GitHub publication for 0.2.1 had not yet been recorded in this handoff; check the repository releases, npm registry entry, and external release receipt for the current publication state.
34
+ The v0.3 research plans and evidence stay in Git history under `docs/research/v03-*` and `docs/evidence/v03/`. They can contain local artifact references needed for reproducibility and are excluded from the npm consumer archive through `docs/.npmignore`, together with the unfinished v0.3 quality plan. Preserve their original evidence bytes; do not rewrite historical receipts to make packaging pass. Public API and usage documentation remains packaged. `pack:check` rejects accidental inclusion of these internal paths and still scans the actual installed archive for credentials and private paths. Before a release, ensure every packaged documentation link has a packaged or public GitHub destination.
35
35
 
36
- A failed pre-commit attempt during local release preparation is preserved in the maintainer’s local release-preparation logs. That failure led to the narrow test-only isolation fix so hook-provided `GIT_*` variables cannot redirect fixture repositories or mutate unrelated sentinel indexes during secret scans.
36
+ ## 0.2.2 merge release scope
37
+
38
+ Version **0.2.2** integrates the refactor worktree with **0.2.1** documentation and packaging safeguards from `main`: experimental status/JSDoc, archive documentation links, `docs/.npmignore` sensitive-evidence exclusions, and isolated Git fixture handling in `test/secrets.test.ts`. Runtime defaults and the primary 0.2 extraction contract are unchanged relative to the published **0.2.0** baseline. This note does not assert npm/GitHub publication, CI completion, or release artifacts; check the registry, repository releases, and external release receipt for current state.
@@ -0,0 +1,183 @@
1
+ # План рефакторинга (волны 1–9)
2
+
3
+ Исторические планы и замороженные свидетельства в `docs/evidence/**` **не переписываются** задним числом. Полные потоки журналов хранятся **вне** репозитория (корень артефактов задачи рефакторинга); здесь — имена журналов/отчётов и измеренные итоги, подтверждённые проверками главного оркестратора.
4
+
5
+ Ветка: `work/classifier-refactor-20261023`. Порядок работы агентов: [правила для агентов](agents.ru.md), [контракт участников](https://github.com/zoomplus/zorya-classifier/blob/main/AGENTS.md).
6
+
7
+ ## Базовая линия до волн (сохранить)
8
+
9
+ | Метрика | Значение |
10
+ | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
11
+ | Ранний `npm test` (только `test/*.test.ts`) | **674** теста, **671** успех, **3** падения |
12
+ | Типичный блокер до волны `2A` | H6: журнал целостности — идентичность путей-алиасов: разные пути, ведущие через симлинки к одному и тому же файлу, считаются одним и тем же; воспроизведение через `realpath` |
13
+
14
+ Дальнейший рост переносимого каталога (772), восстановление идентичности путей, регрессия владения байтами рендерера, явная конфигурация учётных данных каталога `benchmarks` — отражены в волнах 2–7.
15
+
16
+ **Тройки чисел архива** в проверках `pack:check`: сначала **всего** файлов в установленном архиве, затем файлов **среды выполнения** (`dist` и связанные артефакты), затем деклараций, проверенных через **отдельный** проект-потребитель.
17
+
18
+ ### Пять зафиксированных регрессий/изменений поведения доказательств
19
+
20
+ 1. **Волна 2 / H6:** идентичность каталога-алиаса для воспроизведения целостности (`buildIntegrityReceiptByRealPath`, `test/v03-h6-integrity-receipt-path-identity.test.ts`): пути совпадают, если через симлинки они указывают на один и тот же реальный файл.
21
+ 2. **Рендерер:** Рендерер копирует RGBA-байты до чтения синхронного геттера `proposals`; отдельный тест проверяет мутацию исходного буфера этим геттером.
22
+ 3. **Историческая фикстура:** отделение синтетического манифеста «53 исходника / 82 ключа» от текущего набора исходников и списков зависимостей без переписывания замороженных хешей оценщика.
23
+ 4. **Будущие наборы манифестов исходников и списки зависимостей:** обновлены без изменения исторического JSON, хешей и порядка полей.
24
+ 5. **Учётные данные каталога `benchmarks`:** `benchmarks/credentials.ts`, переменные окружения процесса по умолчанию, необязательный `--env-file` только во вспомогательных раннерах.
25
+
26
+ ---
27
+
28
+ ## Волна 1 — базовая линия (ЗАВЕРШЕНО)
29
+
30
+ **Итог:** зафиксирован исходный набор тестов и список блокеров.
31
+
32
+ **Проверка:** базовая линия 674/671/3; ранние журналы в каталоге артефактов (сырые потоки не в репозитории).
33
+
34
+ ---
35
+
36
+ ## Волна 2 — фундамент (ЗАВЕРШЕНО)
37
+
38
+ **Модули:** `2A` — H6 и идентичность `realpath`; `2B` — проверка границ слоёв (`scripts/boundaries.mjs`), каталог тестов, `run-classified-tests.mjs`, `knip.json`, документация для участников разработки.
39
+
40
+ **Проверка (Linux Node 22, главный оркестратор):** коммит `c3923f0`; `npm run check` **764/764** — `wave2-root-checkpoint-retry.log`. Ранний сбой этапа Husky только на `format:check` — `wave2-root-checkpoint.log` (сохранён).
41
+
42
+ Узкие прогоны исполнителя Composer на встроенном Linux Node 24 — **не** полная продуктовая проверка Node 24.
43
+
44
+ ---
45
+
46
+ ## Волна 3 — контракты и листовая геометрия (ЗАВЕРШЕНО)
47
+
48
+ **Итог:** листовые модули `entities/*`, фасад `contracts.ts`; разделение схемы метаданных сегментации.
49
+
50
+ **Проверка:** коммит `0a5095f`; **764/764**; архив пакета 383 / 126 / 207 — `wave3-root-checkpoint.log`, `wave3-root-pack.log`.
51
+
52
+ ---
53
+
54
+ ## Волна 4 — разделение фабрики приложения (ЗАВЕРШЕНО)
55
+
56
+ **Итог:** `classifier-{contracts,config,runtime,spatial,representation}.ts` и тонкий `create-classifier.ts`.
57
+
58
+ **Проверка:** коммит `1515f15`; **764/764**; архив 393/136/208 — `wave4-root-pack.log`.
59
+
60
+ ---
61
+
62
+ ## Волна 5 — извлечение и предложения (ЗАВЕРШЕНО)
63
+
64
+ **Итог:** `features/segmentation/*`, `features/proposals/*`; процессы только оркестрируют.
65
+
66
+ **Проверка:** коммит `abc68b3`; **765/765** — отчёт проверенной ревизии (сохранён).
67
+
68
+ ---
69
+
70
+ ## Волна 6 — транспорты и нативная сегментация (ЗАВЕРШЕНО)
71
+
72
+ | Подволна | Зона ответственности | Проверка |
73
+ | -------- | ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
74
+ | `6A` | `decision-transport/*`, `vision-chat/*`; удалён `openrouter-common.ts` | коммит `9e9b491`; **765/765**; архив **421** / **164** / **209**; API: 4 точки входа / 67 типов — `wave6a-root-checkpoint-retry.log`, `wave6a-root-pack.log` |
75
+ | `6B` | фасады `mobile-sam/*`, `grabcut/*` | коммит `e5b448b`; **765/765**; архив **449** / **192** / **212** — журналы подволны `6B` |
76
+
77
+ **Фикстура `6A`:** исторический тест манифеста использует замороженные ключи JSON и синтетические дайджесты — хеши замороженного оценщика не менять.
78
+
79
+ ---
80
+
81
+ ## Волна 7 — изоляция исследований, состав npm и инструменты (ЗАВЕРШЕНО)
82
+
83
+ | Подволна | Зона ответственности | Статус |
84
+ | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
85
+ | `7A` | `benchmarks/experiments/{create-research-classifier,text-representation,boundary-view}`; `runtime-source-files.ts`; исследования вне дистрибутива npm | ЗАВЕРШЕНО — **767/767** — `wave7a-root-checkpoint.log`; коммит **`b7f8bd2`** |
86
+ | `7B` | `integrity-receipts.ts`; индекс H5 по `realpath`; `credentials.ts`; единый раннер; удалён `run-portable-tests.mjs` | ЗАВЕРШЕНО — **7/7** группы `local-evidence` после исправления; H4e сравнивается по реальному пути, сохранена проверка родительского каталога; журналы `wave7b-h4e-realpath-identity-local-evidence.log`, `wave7b-composer-h5-test.log`, **`final-local-evidence-node22-configured.log`** (7/7 при корректной раскладке данных); полные проверки главного оркестратора **772/772** после замены тестовых поддельных ключей на низкоэнтропийные фикстуры — `wave7b-root-checkpoint-retry.log`; сохранены неудачные журналы **`wave7-root-local-evidence-baseline.log`** (4/7 до исправления) и **`final-local-evidence-node22.log`** (3 падения `grounded-mask` при неверной конфигурации); коммит **`0fd9507`** |
87
+ | `7C` | явные точки входа Knip; удалены **4** неиспользуемые функции и **1** неиспользуемый тип; доказанно неиспользуемые экспорты сделаны внутренними; единственное исключение зависимости — `onnxruntime-node` | ЗАВЕРШЕНО — коммит **`76d7ac6`**; **772/772**; архив **445** / **188** / **212**; API: 4 точки входа / 67 типов / проверка совместимости типов — `wave7c-root-checkpoint.log`, `wave7c-root-pack.log` |
88
+
89
+ **Защищённая базовая линия (волна `7C`):** **407** файлов, включая **весь** JSON каталога `benchmarks`, побайтово идентичны на `76d7ac6`; `package-lock.json` без изменений. Отчёт **`wave7-final-protected-evidence.json`**. Число **377** относилось к более узкому подмножеству — не путать с 407.
90
+
91
+ **Учётные данные `7B`:** `process.env.OPENROUTER_API_KEY`; `--env-file` только во вспомогательных раннерах; без отката к чужому `.env`.
92
+
93
+ Алгоритмы классификации и `extract` **не менялись** в `7C`; удаления мёртвого кода уже выполнены — отдельной области работ после волны 9 на удаления в исходниках **не** планируется.
94
+
95
+ ---
96
+
97
+ ## Волна 8 — документация и происхождение (ЗАВЕРШЕНО)
98
+
99
+ **Зона ответственности:** связные русские руководства по архитектуре, разработке, агентам и этому плану; навигация в корневых руководствах и CONTRIBUTING, в [архитектуре на английском](architecture.md) и [эталонных прогонах](benchmarks.md); записи [provenance.json](provenance.json); указатели [контракта участников](https://github.com/zoomplus/zorya-classifier/blob/main/AGENTS.md) и [правила проекта](https://github.com/zoomplus/zorya-classifier/blob/main/.cursor/rules/zorya-classifier.mdc).
100
+
101
+ **Проверка:** коммит **`7a74226`**; Linux Node **22.23.2**, полный `npm run check` **772/772**, форматирование в этапе Husky — `wave8-root-checkpoint.log`; `pack:check` архив **447** / **188** / **212**, **0** HTTP-запросов к провайдеру (нет вызовов провайдера по HTTP; это не означает нулевой сетевой трафик) — `wave8-root-pack.log`; локальные ссылки, `git diff --check`, `npm run secrets:check`.
102
+
103
+ ---
104
+
105
+ ## Волна 9 — финальная верификация (ЗАВЕРШЕНО)
106
+
107
+ **Итог:** принята полная платформенная матрица на ревизии **`4877d05`** (ветка `work/classifier-refactor-20261023`). Сводка и имена журналов — в каталоге артефактов завершения `zorya-classifier-completion-20261023` (`local-verification.json`, `completion-code-verification.json`); сырые потоки **вне** репозитория.
108
+
109
+ **Узкое завершение кода на `4877d05` (не переписывает историю волн 1–8):** общая проверка границ источника запроса — результаты и упорядоченные ошибки Zod совпали на **420** входных комбинациях (`native-protocol-equivalence.json`). Только **два** теста H11 создают на CPU фикстуры FakeTensor только с метаданными (синтетические метаданные CUDA-устройства и dtype для отдельных случаев валидации и размещения в загрузчике); остальные тесты H11 FakeTensor не используют. Проверяется фактическая логика валидации и загрузчика рабочего кода и негативные случаи; прогон **не** доказывает выделение физической видеопамяти, реальный CUDA/GPU или живой инференс модели H11.
110
+
111
+ ### Исторический снимок на коммите `7a74226` (сохранён)
112
+
113
+ На этом снимке главный оркестратор измерил **только Linux**; Windows и **`python-native`** **ещё не запускались** — это исторический факт, его **не** переклассифицируют как «ново пройденное» на `7a74226`.
114
+
115
+ | Проверка | Результат | Журнал |
116
+ | ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------ |
117
+ | Linux Node **22.23.2**, `npm run check` | **772/772**, **0** пропусков, форматирование OK | `wave8-root-checkpoint.log` |
118
+ | Linux Node **22.23.2**, `pack:check` | **447** / **188** / **212**, **0** HTTP-запросов к провайдеру | `wave8-root-pack.log` |
119
+ | Linux Node **24.22.1** (измеренный исполняемый файл Node.js для Linux из установки Cursor Agent), `npm run check` | **772/772**, **0** пропусков | `final-node24-check.log`; формат — `final-node24-format.log` |
120
+ | Linux Node **24.22.1**, `pack:check` | **447** / **188** / **212**, **0** HTTP-запросов к провайдеру | `final-node24-pack.log` |
121
+ | Публичный API | **4** точки входа, **67** экспортируемых типов; типы экспортируемых значений совместимы в обе стороны с исходной версией | `final-public-api.log` |
122
+ | Защищённая базовая линия | **407** файлов без изменений плюс `package-lock.json`, `.env.example`, `src/index.ts`; кодовая контрольная точка **`76d7ac6`** | `final-protected-evidence.json` |
123
+ | Группа `local-evidence` (настроенная раскладка) | **7/7**, без падений/пропусков | `final-local-evidence-node22-configured.log` |
124
+ | Контрольные тесты геометрии на Python | **6/6** | `root-controlled-oracles.log` |
125
+
126
+ **Ограничения снимка `7a74226` (исторически):** Windows на Linux-хосте **не запускались**; удалённый GitHub Actions CI **не запускался**; **`python-native`** **не запускался**; **6/6** оракулов **не** заменяет `python-native`.
127
+
128
+ ### Текущая матрица на ревизии `4877d05` (принято)
129
+
130
+ | Платформа / Node | `npm run check` (переносимый каталог) | `pack:check` | Прочее |
131
+ | ------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------- | ------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
132
+ | Linux **22.23.2** | **772/772**, **0** пропусков | **447** / **188** / **212**, **0** HTTP-запросов к провайдеру | формат в обычном commit-hook — `local-verification.json` |
133
+ | Linux **24.22.1** | **772/772**, **0** пропусков | те же тройки и байты архива | `linux-node24-check.log`, `linux-node24-pack.log`, `linux-node24-format.log` |
134
+ | Windows Server **2025** (build **26100**), Node **22.23.4** / npm **10.9.9**, задание `win-4877d0535a04-node22-r3` | **772** всего / **765** успех / **0** падений / **7** пропусков | **447** / **188** / **212**, **0** HTTP-запросов к провайдеру | локальная оценочная VM **win32** (удалённый GitHub Actions CI не запускался); все четыре команды exit **0**; **962/962** отслеживаемых исходников побайтово после проверок; журналы `windows/results/win-4877d0535a04-node22-r3/` |
135
+ | Windows Server **2025** (build **26100**), Node **24.22.1** / npm **11.19.1**, задание `win-4877d0535a04-node24` | **772** / **765** / **0** / **7** | идентично Linux | `windows/results/win-4877d0535a04-node24/`; артефакт декодирования консоли OEM **не** меняет имена тестов, счётчики и хеши исходников |
136
+
137
+ **Общий архив** (все четыре пары): SHA-256 **`cb3e980854bb625380b594f5ac3f05d657bbeda4b42880bf8f57fe307645aa20`**; SHA-256 каталога runtime **`dist`**: **`111c744ad406ff4645e2ff0f471610376a648aa81771eacf0a94bb61ea8d1131`**.
138
+
139
+ В колонках `pack:check` значение **0** HTTP означает ноль HTTP-запросов или HTTP-вызовов к провайдеру моделей, а не отсутствие любого сетевого трафика.
140
+
141
+ **Семь заранее существовавших пропусков на Windows** (не добавлены этой задачей; на Linux при наличии входов/возможностей платформы все **772** проходят):
142
+
143
+ 1. один тест с заменой POSIX FIFO;
144
+ 2. один тест с внешним симлинком без привилегий Windows;
145
+ 3. одна необязательная фикстура маски H3b;
146
+ 4. одна необязательная фикстура маски H4e;
147
+ 5. одна замороженная фикстура воспроизведения H6;
148
+ 6. одна замороженная фикстура отмены H6;
149
+ 7. один необязательный тест замороженных доказательств H8.
150
+
151
+ | Дополнительные проверки на Linux (`4877d05`) | Результат | Журнал / отчёт |
152
+ | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- |
153
+ | Публичный API | **4** точки входа, **67** типов, совместимость типов экспортируемых значений **в обе стороны** | `public-api.log` |
154
+ | Защищённая базовая линия | **407** файлов без изменений плюс `package-lock.json`, `.env.example`, `src/index.ts` | `protected-evidence.json` |
155
+ | `python-native` (изолированный CPU Python **3.12.3**) | **44/44**, **0** пропусков; офлайн-контракты/метаданные/жизненный цикл — не проверяет GPU или живой H11 | успех: `python-native-rerun.log`; сбой: `python-native.log` |
156
+ | `local-evidence` (существующая раскладка вызывающего) | **7/7**, **0** падений, **0** пропусков | `local-evidence-current.log` |
157
+ | Контрольные оракулы геометрии Python | **6/6** | `controlled-oracles-current.log` |
158
+
159
+ Платные прогоны провайдера и публикация **не** выполнялись.
160
+
161
+ **Сохранённые неудачи и неверные конфигурации (имена только):** ранний сбой офлайн-настройки **`python-native`** (`python-native.log`); неверная конфигурация `local-evidence` — **`wave7-root-local-evidence-baseline.log`**, **`final-local-evidence-node22.log`**; Windows — сбой PowerShell-настройки до проверок (`win-4877d0535a04-node22`), отсутствие VC runtime на этапе Knip до переносимых тестов (`win-4877d0535a04-node22-r2`; typecheck/lint/boundaries уже прошли); первая проба Node `-e` с пустым stdout **не принята** (`windows/vc-runtime-first-provisioning.json`); принята последующая проверка загрузки модуля через отдельный CJS-файл с точным маркером stdout и exit **0** (`windows/vc-runtime-verified-smoke.json`). Установка VC++ x64 Redistributable — только в одноразовой VM, зависимости репозитория **не** менялись.
162
+
163
+ ---
164
+
165
+ ## Платформы и CI
166
+
167
+ | Тема | Статус |
168
+ | --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
169
+ | Матрица CI (проект) | `ubuntu-latest`, `windows-latest` × Node 22 и 24 |
170
+ | Измерено (волна 9, Linux) | **`4877d05`**: Node **22.23.2** и **24.22.1** — `npm run check` **772/772**, **0** пропусков; `pack:check` **447** / **188** / **212**; исторический снимок **`7a74226`** — см. подраздел выше |
171
+ | Измерено (волна 9, Windows) | **`4877d05`**, локальная оценочная VM Server **2025** build **26100**, Node **22.23.4** и **24.22.1**: все проверки exit **0**; **765/772** с **7** заранее существовавшими пропусками (см. волну 9); байты архива как на Linux |
172
+ | Удалённый GitHub Actions CI | **Не запускался**; локальная Windows-матрица **не** заменяет удалённый CI |
173
+ | `python-native` | **`4877d05`**: **44/44**, **0** пропусков в изолированном CPU Python **3.12.3** (`python-native-rerun.log`, `python-runtime-receipt.json`); два теста H11 с FakeTensor-метаданными **не** проверяют GPU/живую модель; предварительные условия — [разработка](development.ru.md#python-windows-и-нативные-предварительные-условия) |
174
+ | Волна 8 | **ЗАВЕРШЕНО** — **`7a74226`** |
175
+
176
+ Успех удалённого GitHub Actions CI и публикация **не** заявлены этим документом.
177
+
178
+ ## Инварианты на все волны
179
+
180
+ - Публичные точки входа и семантика региона по умолчанию `v0.2` (закрытые проверки рамки в **текущем** основном потоке `extract`).
181
+ - Гигиена секретов: индексированные и рабочее дерево + байты установленного архива; только пустой `.env.example`.
182
+ - Без автоматической загрузки нативных весов; порты сегментатора и предложений на стороне вызывающего.
183
+ - Исторические метки и метрики `v0.2` остаются **историческими**; непроверенные рецепты не переклассифицировать как текущий проверенный поток.