@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,78 @@
1
+ # DepVerdict architecture overview
2
+
3
+ DepVerdict `0.6.0-alpha.1` is a decision-first, artifact-oriented CLI for
4
+ evidence-bounded dependency upgrade analysis. It separates deterministic repository
5
+ facts and policy from provider-assisted interpretation.
6
+
7
+ ## Product workflow
8
+
9
+ ```text
10
+ Project discovery
11
+ → knowledge and evidence research
12
+ → version analysis
13
+ → source usage and coverage
14
+ → repository impact and evidence
15
+ → deterministic Upgrade Decision
16
+ → product completion/report
17
+ → optional experimental Migration Checklist
18
+ ```
19
+
20
+ Each stage validates its inputs and publishes versioned artifacts under
21
+ `.depverdict/` by default. A missing installed baseline, target, evidence source,
22
+ comparable version, or supported analyzer coverage remains explicit and fails
23
+ closed; it is not converted into a positive safety conclusion.
24
+
25
+ ## Ownership boundaries
26
+
27
+ | Layer | Authority |
28
+ | --- | --- |
29
+ | Project Manifest | Dependency occurrence identity, declaration, project shape, and installed baseline when resolvable. |
30
+ | Knowledge artifacts | Registry target candidates, official/publisher sources, snapshots, and provenance. |
31
+ | Version Analysis | Schema-validated target-scoped findings and bounded AI-assisted interpretation. |
32
+ | Usage and Impact | Supported source occurrences, analyzer coverage, and evidence-backed impact. |
33
+ | Upgrade Decision | Deterministic decision, structured recommendation driver, and reason codes. |
34
+ | Product completion | User-facing completion state, next action, summary, and exit code. |
35
+ | Migration Checklist | Experimental, opt-in, evidence-bounded handoff requiring human review. |
36
+
37
+ Registry latest is discovery data, not caller intent and not a recommendation. An
38
+ explicit target is structured caller intent but still requires adequate evidence,
39
+ coverage, and deterministic policy. AI prose cannot create an urgency driver,
40
+ approve work, select repository paths, execute commands, or modify source.
41
+
42
+ ## Identity and compatibility
43
+
44
+ The canonical identities are `@thomasminh1995/depverdict`, `depverdict`,
45
+ `.depverdict/`, and `DEPVERDICT_*`. During one `0.6.x` preview compatibility
46
+ window, `upgradelens`, `.upgradelens/` input fallback, and `UPGRADELENS_*`
47
+ fallback remain available with bounded warnings.
48
+
49
+ Persisted schema names, `generator.name: "UpgradeLens"`, task IDs, reason codes,
50
+ provider qualification identities, and public exports are compatibility protocols,
51
+ not current product presentation. They remain stable until a separately versioned
52
+ contract changes them.
53
+
54
+ ## Safety and side effects
55
+
56
+ DepVerdict reads repository manifests, lockfiles, and supported source files and
57
+ writes only its artifacts or explicit caller-selected output paths. It does not:
58
+
59
+ - modify manifests or source;
60
+ - install or upgrade dependencies;
61
+ - execute suggested verification commands;
62
+ - authorize a developer or Coding Agent to patch code;
63
+ - synthesize proof that a migration is safe or complete.
64
+
65
+ Provider/model qualification is bound to exact runtime, dataset, prompt, schema,
66
+ policy, and presentation identity. Offline operation prevents registry and
67
+ evidence-source research but may still require a configured or injected AI runtime
68
+ for Version Analysis; absent evidence stays absent.
69
+
70
+ ## Versioned records
71
+
72
+ Older MVP, IA, MP, RR, OSS, validation, and release documents record the
73
+ UpgradeLens identity, commands, artifact roots, and results that were true for
74
+ their milestone. They are retained as historical or versioned architecture records
75
+ and are not current command documentation. Use the root README and this overview
76
+ for the current DepVerdict interface, then consult a versioned record for the
77
+ design rationale of that specific contract.
78
+
@@ -0,0 +1,111 @@
1
+ # CLI progress contract
2
+
3
+ `depverdict analyze <repository>` exposes one presentation-only progress
4
+ stream for the complete sequential pipeline.
5
+
6
+ The deprecated `upgradelens` executable reaches the same runtime during the
7
+ `0.6.x` preview window and adds only its bounded compatibility warning.
8
+
9
+ ## Modes
10
+
11
+ - `--progress auto`: interactive when `stderr.isTTY` is true, plain otherwise.
12
+ - `--progress interactive`: append-only interactive lines even when redirected.
13
+ - `--progress plain`: stable grep-friendly lines even on a TTY.
14
+
15
+ Neither renderer uses cursor movement, carriage-return rewriting, a hidden
16
+ cursor, or spinner animation. `NO_COLOR` replaces interactive glyph semantics
17
+ with text labels such as `START`, `WORKING`, `WAITING`, and `DONE`.
18
+
19
+ ## Lifecycle and ownership
20
+
21
+ ```text
22
+ pipeline scheduler
23
+
24
+ stage lifecycle
25
+
26
+ bounded activity updates
27
+
28
+ progress event normalization
29
+
30
+ interactive renderer | plain renderer
31
+
32
+ final summary / failure output
33
+ ```
34
+
35
+ The pipeline owns stage order, state, terminal outcome, monotonic start time,
36
+ elapsed duration, and heartbeat scheduling. A stage adapter may only supply a
37
+ constrained activity kind, a sanitized subject, and a `completed/total` pair
38
+ when both values are deterministic and already known. Renderers do not infer
39
+ business state from display text.
40
+
41
+ Every scheduled stage terminates as `COMPLETED`, `FAILED`, `SKIPPED`, or
42
+ `CANCELLED`. Stop-on-first-failure and cancellation produce deterministic
43
+ `SKIPPED` events for remaining stages; the plain renderer suppresses those
44
+ individual lines to avoid noise and prints the run terminal summary instead.
45
+
46
+ Events use contract version `1.0.0`, a monotonic sequence, an injected wall
47
+ timestamp, monotonic elapsed milliseconds, a strict field allowlist, and
48
+ immutable objects. Progress events are transient and are never persisted in
49
+ Project, Knowledge, Version, Usage, Impact, Evidence, Migration Checklist, or
50
+ report artifacts.
51
+
52
+ ## Heartbeat
53
+
54
+ A stage emits a heartbeat only after five seconds without a lifecycle or
55
+ activity update. Activity resets the quiet interval. Each timer is `unref`'d
56
+ and is removed on completion, failure, cancellation, and runtime disposal.
57
+ Tests use an injected manual clock and scheduler; production does not use fake
58
+ time.
59
+
60
+ Heartbeat reports the latest safe activity and real stage elapsed time. It
61
+ does not produce a percentage, ETA, token stream, retry claim, or model
62
+ “thinking” state. A known count is displayed as `(completed/total)` without
63
+ converting it to a percentage.
64
+
65
+ Project Discovery and Repository Usage Discovery cooperatively yield to the
66
+ Node.js event loop after 64 completed scan units or 50 milliseconds of
67
+ completed-unit work, whichever occurs first. The operation-local scheduler
68
+ uses `setImmediate`; it does not sleep, parallelize scanning, change traversal
69
+ order, or emit heartbeat events itself. Yield points occur only after a
70
+ directory entry, manifest group, or source file has completed, so timers and
71
+ cancellation can run without exposing partially constructed records.
72
+
73
+ ## Cancellation and output failures
74
+
75
+ The first `SIGINT` aborts the active analysis signal, marks the current stage
76
+ `CANCELLED`, skips remaining stages, clears heartbeat timers, omits success
77
+ output, and returns exit code 130. Because rendering is append-only there is
78
+ no hidden cursor or in-place frame to restore. The one-shot handler is removed
79
+ after the first interrupt; a second interrupt follows the platform's normal
80
+ immediate behavior.
81
+
82
+ OpenAI-compatible and generic HTTP provider calls receive the caller signal.
83
+ Other stage adapters check the signal at safe boundaries and before artifact
84
+ publication. Discovery and Usage check it at every completed unit and again
85
+ after each actual cooperative yield. Artifact writers remain validate-first
86
+ and atomic, including temporary-file cleanup on write failure.
87
+
88
+ Progress callbacks and renderer writes are isolated. Throwing observers,
89
+ invalid activity updates, or renderer exceptions do not change stage results,
90
+ provider call count, artifacts, scheduling, or qualification decisions.
91
+
92
+ ## Privacy and limitations
93
+
94
+ Activity subjects are chosen from bounded stage-owned labels, normalized to
95
+ one line, stripped of control characters, escaped for plain output, and
96
+ limited to 120 characters. Adapters never provide raw prompts, evidence
97
+ bodies, repository source snippets, provider payloads, authorization headers,
98
+ private endpoints, or raw error bodies.
99
+
100
+ Research currently reports a meaningful stage activity but not package
101
+ `N/M`, because its existing concurrent orchestrator does not expose a stable
102
+ per-package callback. No count is invented. Migration Checklist remains
103
+ experimental, opt-in, and mandatory-human-review; progress does not change its
104
+ persisted qualification decision.
105
+
106
+ JavaScript parsing is synchronous within one source file. Cooperative
107
+ scheduling can therefore observe cancellation and run a due heartbeat only
108
+ after that file finishes parsing; it cannot interrupt a single parser call.
109
+ Current supported validation fixtures do not contain one file whose parse
110
+ alone exceeds the five-second quiet threshold. A real supported fixture that
111
+ does so would require a separate incremental-parser or isolation experiment.