progmune-runtime 2.1.5 → 3.2.0

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 (356) hide show
  1. package/README.md +108 -468
  2. package/dist/ablation-study.js +144 -0
  3. package/dist/ablation-study.test.js +18 -0
  4. package/dist/action-runtime.js +3 -1
  5. package/dist/active-learning.js +211 -0
  6. package/dist/analytics.js +139 -0
  7. package/dist/asset-factory.js +309 -0
  8. package/dist/asset-growth.js +244 -0
  9. package/dist/asset-promotion.js +382 -0
  10. package/dist/asset-quality.js +550 -0
  11. package/dist/audit/business-translator.js +285 -0
  12. package/dist/audit/cli.js +66 -0
  13. package/dist/audit/formatters/html.js +379 -0
  14. package/dist/audit/formatters/json.js +11 -0
  15. package/dist/audit/formatters/markdown.js +192 -0
  16. package/dist/audit/formatters/terminal.js +189 -0
  17. package/dist/audit/index.js +25 -0
  18. package/dist/audit/report-builder.js +318 -0
  19. package/dist/audit/types.js +8 -0
  20. package/dist/audit.js +3 -3
  21. package/dist/auto-benchmark-generator.js +137 -0
  22. package/dist/auto-benchmark-generator.test.js +45 -0
  23. package/dist/auto-protocol-synthesizer.js +362 -0
  24. package/dist/auto-protocol-synthesizer.test.js +82 -0
  25. package/dist/autonomous-patch.js +175 -0
  26. package/dist/autonomous-patch.test.js +128 -0
  27. package/dist/badge/badge-server.js +98 -0
  28. package/dist/behavior-miner.js +442 -0
  29. package/dist/belief-layer.js +475 -0
  30. package/dist/benchmark-count.js +5 -0
  31. package/dist/benchmark-generator.js +211 -0
  32. package/dist/benchmark-harness.js +201 -0
  33. package/dist/benchmark-pass-rate.js +7 -0
  34. package/dist/benchmark-report.js +8 -3
  35. package/dist/benchmark-save.js +14 -1
  36. package/dist/bootstrap-validation.js +197 -0
  37. package/dist/bootstrap-validation.test.js +51 -0
  38. package/dist/branch-ledger.js +1 -1
  39. package/dist/capability-gap.js +130 -0
  40. package/dist/certify-html.js +351 -0
  41. package/dist/certify.js +326 -0
  42. package/dist/check.js +4 -4
  43. package/dist/compliance-miner.js +447 -0
  44. package/dist/continuous-benchmark.js +194 -0
  45. package/dist/continuous-benchmark.test.js +116 -0
  46. package/dist/corpus-stats.js +173 -0
  47. package/dist/counterfactual-engine.js +288 -0
  48. package/dist/coverage-dashboard.js +109 -0
  49. package/dist/coverage-system.test.js +205 -0
  50. package/dist/cross-repo-precision.js +352 -0
  51. package/dist/cve-benchmark.js +180 -0
  52. package/dist/cve-benchmark.test.js +28 -0
  53. package/dist/cve-collector.js +73 -0
  54. package/dist/data-quality.js +141 -0
  55. package/dist/decision-engine.js +388 -0
  56. package/dist/derive-metadata.js +250 -0
  57. package/dist/difficulty-active.test.js +198 -0
  58. package/dist/difficulty-map.js +244 -0
  59. package/dist/discovery-analytics.js +125 -0
  60. package/dist/discovery-model.js +149 -0
  61. package/dist/discovery-optimize.test.js +199 -0
  62. package/dist/discovery-trace.js +276 -0
  63. package/dist/discovery-trace.test.js +97 -0
  64. package/dist/emitter.js +83 -1
  65. package/dist/enterprise-dashboard.js +405 -0
  66. package/dist/eval-hardening.js +297 -0
  67. package/dist/eval-hardening.test.js +85 -0
  68. package/dist/evaluation-campaign.js +359 -0
  69. package/dist/evaluation-campaign.test.js +181 -0
  70. package/dist/evidence-growth.js +143 -0
  71. package/dist/evidence-repository.js +209 -0
  72. package/dist/evidence-system.js +441 -0
  73. package/dist/execute.js +15 -7
  74. package/dist/experimental/software-physics.js +291 -0
  75. package/dist/experimental/state-inference.js +516 -0
  76. package/dist/experimental/unsupervised-physics.js +230 -0
  77. package/dist/extract-ir-python.js +54 -7
  78. package/dist/extract-ir.js +376 -12
  79. package/dist/failure-collector.js +2 -2
  80. package/dist/failure-corpus.js +322 -9
  81. package/dist/feedback.js +16 -5
  82. package/dist/feedback.test.js +49 -0
  83. package/dist/file-lock.js +1 -1
  84. package/dist/flywheel-batch.js +292 -0
  85. package/dist/frameworks/express-cli.js +237 -0
  86. package/dist/frameworks/express-detector.js +445 -0
  87. package/dist/frameworks/express-detector.test.js +206 -0
  88. package/dist/frameworks/index.js +30 -0
  89. package/dist/frameworks/nestjs-detector.js +302 -0
  90. package/dist/frameworks/trpc-detector.js +161 -0
  91. package/dist/frameworks/version-awareness.js +179 -0
  92. package/dist/function-synonyms.js +164 -0
  93. package/dist/function-synonyms.test.js +68 -0
  94. package/dist/generalization.test.js +352 -0
  95. package/dist/goal-annotator.js +113 -0
  96. package/dist/goal-planner.js +563 -0
  97. package/dist/gold-cve.js +164 -0
  98. package/dist/gold-cve.test.js +104 -0
  99. package/dist/gold-quality.js +206 -0
  100. package/dist/gold-tiers.js +241 -0
  101. package/dist/governance-dashboard.js +327 -0
  102. package/dist/graph-viz.js +240 -0
  103. package/dist/guided-frontier.js +195 -0
  104. package/dist/hierarchical-planner.js +148 -0
  105. package/dist/identifier-parser.js +260 -0
  106. package/dist/immune-metrics.js +93 -0
  107. package/dist/immune-receiver.js +158 -0
  108. package/dist/immune-reporter.js +1 -1
  109. package/dist/improvement-orchestrator.js +206 -0
  110. package/dist/inject-p0-vocabulary.js +300 -0
  111. package/dist/intent-parser.js +218 -0
  112. package/dist/invariant-algebra.js +476 -0
  113. package/dist/invariant-calculus.js +533 -0
  114. package/dist/ir-utils.js +70 -0
  115. package/dist/ir-utils.test.js +50 -0
  116. package/dist/knowledge-api.js +312 -0
  117. package/dist/knowledge-evolution.js +452 -0
  118. package/dist/knowledge-explorer.js +506 -0
  119. package/dist/knowledge-flywheel.js +274 -0
  120. package/dist/knowledge-governance.js +338 -0
  121. package/dist/knowledge-governance.test.js +150 -0
  122. package/dist/knowledge-graph.js +181 -0
  123. package/dist/knowledge-guided-synth.js +246 -0
  124. package/dist/knowledge-loop.test.js +77 -0
  125. package/dist/knowledge-object.js +316 -0
  126. package/dist/knowledge-package.js +98 -0
  127. package/dist/kpi-dashboard.js +561 -0
  128. package/dist/l3-cross-function.js +280 -0
  129. package/dist/learning-ranker.js +148 -0
  130. package/dist/learning-ranker.test.js +291 -0
  131. package/dist/ledger/accountability.js +322 -0
  132. package/dist/ledger/chain-builder.js +185 -0
  133. package/dist/ledger/cli.js +222 -0
  134. package/dist/ledger/index.js +13 -0
  135. package/dist/ledger/signatures.js +193 -0
  136. package/dist/ledger/types.js +9 -0
  137. package/dist/llm.js +74 -3
  138. package/dist/load-benchmarks.js +8 -3
  139. package/dist/logger.js +66 -0
  140. package/dist/logger.test.js +37 -0
  141. package/dist/logistic-reward.js +339 -0
  142. package/dist/logistic-reward.test.js +180 -0
  143. package/dist/macro-graph.js +193 -0
  144. package/dist/macro-repair.js +183 -0
  145. package/dist/mcp-server.mjs +1202 -483
  146. package/dist/memory-layer.js +42 -5
  147. package/dist/multi-repo-precision.js +422 -0
  148. package/dist/name-free-protocol.js +425 -0
  149. package/dist/name-free-protocol.test.js +170 -0
  150. package/dist/name-scrambling.js +138 -0
  151. package/dist/name-scrambling.test.js +16 -0
  152. package/dist/p3-observability.test.js +281 -0
  153. package/dist/p5-orchestrator.test.js +225 -0
  154. package/dist/pairwise-preference.js +294 -0
  155. package/dist/pairwise-preference.test.js +140 -0
  156. package/dist/planner-constraints.js +104 -0
  157. package/dist/planner-prompts.js +155 -0
  158. package/dist/planner-telemetry.js +415 -0
  159. package/dist/planner-trace.js +214 -0
  160. package/dist/planner.js +162 -167
  161. package/dist/plsb/artifact.js +116 -0
  162. package/dist/plsb/cli.js +71 -0
  163. package/dist/plsb/index.js +19 -0
  164. package/dist/plsb/leaderboard.js +249 -0
  165. package/dist/plsb/report-md.js +156 -0
  166. package/dist/plsb/schema.js +179 -0
  167. package/dist/plsb-benchmark.js +284 -0
  168. package/dist/plsb-benchmark.test.js +119 -0
  169. package/dist/policy/cli.js +134 -0
  170. package/dist/policy/engine.js +333 -0
  171. package/dist/policy/index.js +12 -0
  172. package/dist/policy/types.js +59 -0
  173. package/dist/policy-miner.js +505 -0
  174. package/dist/precision-analyze.js +229 -0
  175. package/dist/precision-benchmark.js +147 -0
  176. package/dist/precision-label-c.js +134 -0
  177. package/dist/precision-label.js +193 -0
  178. package/dist/precision-report-c.js +149 -0
  179. package/dist/precision-report.js +246 -0
  180. package/dist/progmune-status.js +108 -0
  181. package/dist/proof-engine.js +479 -0
  182. package/dist/proof-provenance.js +315 -0
  183. package/dist/protocol-coverage.js +294 -0
  184. package/dist/protocol-detector.js +1189 -0
  185. package/dist/protocol-embedding-expanded.js +297 -0
  186. package/dist/protocol-embedding-expanded.test.js +97 -0
  187. package/dist/protocol-embedding.js +195 -0
  188. package/dist/protocol-embedding.test.js +82 -0
  189. package/dist/protocol-extractor-v2.js +354 -0
  190. package/dist/protocol-extractor-v2.test.js +140 -0
  191. package/dist/protocol-extractor.js +310 -0
  192. package/dist/protocol-extractor.test.js +113 -0
  193. package/dist/protocol-foundation.js +322 -0
  194. package/dist/protocol-foundation.test.js +163 -0
  195. package/dist/protocol-frontier.js +243 -0
  196. package/dist/protocol-frontier.test.js +92 -0
  197. package/dist/protocol-gap-analyzer.js +228 -0
  198. package/dist/protocol-gap-analyzer.test.js +49 -0
  199. package/dist/protocol-invariants.js +276 -0
  200. package/dist/protocol-invariants.test.js +111 -0
  201. package/dist/protocol-knowledge.js +464 -0
  202. package/dist/protocol-miner.js +343 -0
  203. package/dist/protocol-mining.js +207 -0
  204. package/dist/protocol-mining.test.js +37 -0
  205. package/dist/protocol-registry.js +1 -1
  206. package/dist/protocol-security-benchmark.js +222 -0
  207. package/dist/protocol-vulnerability.js +257 -0
  208. package/dist/protocol-vulnerability.test.js +60 -0
  209. package/dist/python-benchmark.js +120 -0
  210. package/dist/python-emitter.js +163 -45
  211. package/dist/python-protocol-extractor.js +187 -0
  212. package/dist/python-protocol-extractor.test.js +116 -0
  213. package/dist/realworld-benchmark.js +646 -0
  214. package/dist/realworld-benchmark.test.js +36 -0
  215. package/dist/repair-arch.test.js +411 -0
  216. package/dist/repair-evolution.test.js +454 -0
  217. package/dist/repair-executor.js +719 -0
  218. package/dist/repair-proposal.js +4 -4
  219. package/dist/repair-ranker.js +141 -0
  220. package/dist/repair-strategies.js +419 -0
  221. package/dist/repair-taxonomy.js +234 -0
  222. package/dist/repair-types.js +12 -0
  223. package/dist/repo-evaluator.js +250 -0
  224. package/dist/repo-evaluator.test.js +128 -0
  225. package/dist/resource-abstraction.js +242 -0
  226. package/dist/resource-detector.js +211 -0
  227. package/dist/result.test.js +43 -0
  228. package/dist/reward-system.js +411 -0
  229. package/dist/reward-system.test.js +175 -0
  230. package/dist/risk-model.js +215 -0
  231. package/dist/rule-miner.js +234 -7
  232. package/dist/rule-specificity.js +254 -0
  233. package/dist/runtime-types.js +27 -0
  234. package/dist/scaffold.js +208 -0
  235. package/dist/scale-collector.test.js +101 -0
  236. package/dist/scale-trajectory-collector.js +128 -0
  237. package/dist/sdk.js +250 -0
  238. package/dist/search-planner.js +4 -41
  239. package/dist/semantic-snapshot.js +1 -1
  240. package/dist/semantic-topology.js +121 -0
  241. package/dist/semantic-trace.js +310 -317
  242. package/dist/sequence-extractor.js +343 -0
  243. package/dist/skill-library.js +245 -0
  244. package/dist/skill-planner.test.js +189 -0
  245. package/dist/software-physics.js +291 -0
  246. package/dist/software-physics.test.js +81 -0
  247. package/dist/ssg-precision.js +478 -0
  248. package/dist/ssg-validator.js +71 -21
  249. package/dist/state-inference-doubleblind.test.js +160 -0
  250. package/dist/state-inference.js +516 -0
  251. package/dist/state-inference.test.js +115 -0
  252. package/dist/state-machine-fingerprint.js +345 -0
  253. package/dist/state-machine-fingerprint.test.js +120 -0
  254. package/dist/state-miner.js +386 -0
  255. package/dist/state-name-inference.js +213 -0
  256. package/dist/state-name-inference.test.js +69 -0
  257. package/dist/strategy-planner.js +326 -59
  258. package/dist/strategy-planner.test.js +135 -0
  259. package/dist/telemetry-analytics.test.js +402 -0
  260. package/dist/terminal-format.js +68 -0
  261. package/dist/terminal-format.test.js +83 -0
  262. package/dist/topology-factory.js +196 -0
  263. package/dist/topology-representation.js +242 -0
  264. package/dist/topology-representation.test.js +27 -0
  265. package/dist/trajectory-augmentation.js +254 -0
  266. package/dist/trajectory-augmentation.test.js +63 -0
  267. package/dist/trajectory-corpus.js +440 -0
  268. package/dist/trajectory-corpus.test.js +32 -0
  269. package/dist/trajectory-feedback.test.js +116 -0
  270. package/dist/transition-synthesizer.js +286 -0
  271. package/dist/transition-synthesizer.test.js +123 -0
  272. package/dist/trust/api-semantic-mapper.js +809 -0
  273. package/dist/trust/call-graph-propagator.js +225 -0
  274. package/dist/trust/cli.js +122 -0
  275. package/dist/trust/compliance-scorer.js +283 -0
  276. package/dist/trust/confidence-calculator.js +261 -0
  277. package/dist/trust/engine.js +1145 -0
  278. package/dist/trust/explainability.js +85 -0
  279. package/dist/trust/formatters/ci.js +42 -0
  280. package/dist/trust/formatters/json.js +11 -0
  281. package/dist/trust/formatters/terminal.js +152 -0
  282. package/dist/trust/index.js +39 -0
  283. package/dist/trust/phase1-verify.js +171 -0
  284. package/dist/trust/protocol-domain-validator.js +697 -0
  285. package/dist/trust/score-calculator.js +282 -0
  286. package/dist/trust/ssg-bridge.js +641 -0
  287. package/dist/trust/ssg-bridge.test.js +269 -0
  288. package/dist/trust/types.js +67 -0
  289. package/dist/trust/violation-trace.js +335 -0
  290. package/dist/trust-api.js +179 -0
  291. package/dist/trust-calibration.js +279 -0
  292. package/dist/unknown-protocol-discovery.js +339 -0
  293. package/dist/unknown-protocol-discovery.test.js +102 -0
  294. package/dist/unsupervised-physics.js +230 -0
  295. package/dist/unsupervised-physics.test.js +95 -0
  296. package/dist/utils.test.js +37 -0
  297. package/dist/validator.js +187 -10
  298. package/dist/verification-intelligence.js +475 -0
  299. package/dist/verify-api.js +432 -0
  300. package/dist/vi-impact-report.js +293 -0
  301. package/dist/wl-fingerprint.js +162 -0
  302. package/dist/wl-fingerprint.test.js +130 -0
  303. package/dist/zeroshot-strategy.js +139 -0
  304. package/docs/Progmune_/346/212/225/350/265/204/344/272/272/347/231/275/347/232/256/344/271/246_v2.0.html +576 -0
  305. package/docs/Progmune_/351/241/271/347/233/256/345/205/250/350/247/243.html +710 -0
  306. package/package.json +74 -7
  307. package/protocols.json +1956 -50
  308. package/.dockerignore +0 -14
  309. package/.mcp.json +0 -11
  310. package/.progmune_allowlist +0 -50
  311. package/.test_report/test_report.md +0 -87
  312. package/Dockerfile +0 -9
  313. package/FAQ.md +0 -167
  314. package/WHITEPAPER.md +0 -540
  315. package/demo-project/auth.ts +0 -55
  316. package/demo-project/tsconfig.json +0 -8
  317. package/dist/acl-breakdown.js +0 -13
  318. package/dist/all-sessions.js +0 -11
  319. package/dist/antibody-stats.js +0 -11
  320. package/dist/branch-tree-count.js +0 -14
  321. package/dist/common-fixpath.js +0 -12
  322. package/dist/constraint-types.js +0 -12
  323. package/dist/exec-metrics.js +0 -11
  324. package/dist/failure-report.js +0 -11
  325. package/dist/fast-path-hits.js +0 -13
  326. package/dist/fingerprint-list.js +0 -15
  327. package/dist/gen-history-log.js +0 -13
  328. package/dist/heatmap-data.js +0 -11
  329. package/dist/recent-session.js +0 -12
  330. package/dist/svl-distribution.js +0 -11
  331. package/dist/terminal-status.js +0 -11
  332. package/dist/token-savings.js +0 -11
  333. package/dist/total-repairs.js +0 -12
  334. package/dist/unresolved-count.js +0 -12
  335. package/dist/valid-fingerprints.js +0 -13
  336. package/dist/verify-ledgers.js +0 -11
  337. package/docs/whitepaper-style.css +0 -77
  338. package/docs/whitepaper-v2.1.md +0 -609
  339. package/docs/whitepaper-v2.2.md +0 -1064
  340. package/docs/whitepaper-v2.2.pdf +0 -0
  341. package/fly.toml +0 -31
  342. package/public/dashboard.html +0 -119
  343. package/server/hub.js +0 -116
  344. package/test/replay-golden/sess_1780063202050_mgeld.json +0 -9
  345. package/test/replay-golden/sess_1780064032560_gocld.json +0 -354
  346. package/test/replay-golden/sess_1780064413331_s2709.json +0 -606
  347. package/test/replay-golden/sess_1780064792710_y3avo.json +0 -614
  348. package/test/replay-golden.ts +0 -84
  349. package/test_benchmark.js +0 -165
  350. package/test_comprehensive.mjs +0 -638
  351. package/test_concurrency.js +0 -129
  352. package/test_ir_robustness.js +0 -85
  353. package/test_semantic_contracts.js +0 -269
  354. package/test_ssg_stress.js +0 -156
  355. package/test_svl3.js +0 -58
  356. package/tsconfig.json +0 -17
@@ -0,0 +1,440 @@
1
+ "use strict";
2
+ /**
3
+ * P6.10: Expanded Trajectory Corpus
4
+ *
5
+ * 50+ hand-crafted call sequences from 10 Python libraries
6
+ * across diverse domains. Each sequence is a verified protocol pattern.
7
+ *
8
+ * Domains: File I/O, Database, Network, Concurrency, HTTP, Cache, Logging
9
+ *
10
+ * Target: expand corpus from ~60 to ~110 sequences,
11
+ * pushing bootstrap function overlap from 12% → 40%+.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.EXPANDED_TRAJECTORIES = void 0;
15
+ exports.collectExpandedTrajectories = collectExpandedTrajectories;
16
+ exports.runCorpusExpansion = runCorpusExpansion;
17
+ exports.printExpansionReport = printExpansionReport;
18
+ const auto_protocol_synthesizer_1 = require("./auto-protocol-synthesizer");
19
+ const bootstrap_validation_1 = require("./bootstrap-validation");
20
+ // ═══════════════════════════════════════════════════════════════
21
+ // 10 Libraries × 5 Scenarios = 50 Trajectories
22
+ // ═══════════════════════════════════════════════════════════════
23
+ exports.EXPANDED_TRAJECTORIES = [
24
+ // ── 1. tempfile (Filesystem) ──
25
+ { library: "tempfile", domain: "Filesystem", sequences: [
26
+ ["NamedTemporaryFile", "write", "close"],
27
+ ["TemporaryFile", "write", "close"],
28
+ ["mkstemp", "write", "close"],
29
+ ["mkdtemp", "cleanup"],
30
+ ["SpooledTemporaryFile", "write", "seek", "read", "close"],
31
+ ] },
32
+ // ── 2. sqlite3 (Database) ──
33
+ { library: "sqlite3", domain: "Database", sequences: [
34
+ ["connect", "cursor", "execute", "commit", "close"],
35
+ ["connect", "cursor", "execute", "fetchall", "close"],
36
+ ["connect", "cursor", "executemany", "commit", "close"],
37
+ ["connect", "execute", "commit", "close"],
38
+ ["connect", "cursor", "execute", "rollback", "close"],
39
+ ] },
40
+ // ── 3. requests (HTTP) ──
41
+ { library: "requests", domain: "Network", sequences: [
42
+ ["Session", "get", "close"],
43
+ ["Session", "post", "close"],
44
+ ["get", "raise_for_status"],
45
+ ["Session", "put", "close"],
46
+ ["Session", "get", "iter_content", "close"],
47
+ ] },
48
+ // ── 4. asyncio (Concurrency) ──
49
+ { library: "asyncio", domain: "Concurrency", sequences: [
50
+ ["get_event_loop", "run_until_complete", "close"],
51
+ ["Lock", "acquire", "release"],
52
+ ["Semaphore", "acquire", "release"],
53
+ ["Queue", "put", "get", "join"],
54
+ ["create_task", "gather", "run"],
55
+ ] },
56
+ // ── 5. threading (Concurrency) ──
57
+ { library: "threading", domain: "Concurrency", sequences: [
58
+ ["Thread", "start", "join"],
59
+ ["Lock", "acquire", "release"],
60
+ ["RLock", "acquire", "release"],
61
+ ["Condition", "acquire", "wait", "notify", "release"],
62
+ ["Event", "set", "wait", "clear"],
63
+ ] },
64
+ // ── 6. socket (Network) ──
65
+ { library: "socket", domain: "Network", sequences: [
66
+ ["socket", "bind", "listen", "accept", "close"],
67
+ ["socket", "connect", "send", "recv", "close"],
68
+ ["socket", "connect", "sendall", "close"],
69
+ ["create_connection", "send", "recv", "close"],
70
+ ["socketpair", "send", "recv", "close"],
71
+ ] },
72
+ // ── 7. redis-py (Cache) ──
73
+ { library: "redis", domain: "Cache", sequences: [
74
+ ["Redis", "set", "get", "close"],
75
+ ["Redis", "hset", "hget", "close"],
76
+ ["Redis", "lpush", "lrange", "close"],
77
+ ["Redis", "pipeline", "execute", "close"],
78
+ ["ConnectionPool", "get_connection", "release"],
79
+ ] },
80
+ // ── 8. pymongo (Database) ──
81
+ { library: "pymongo", domain: "Database", sequences: [
82
+ ["MongoClient", "get_database", "get_collection", "insert_one", "close"],
83
+ ["MongoClient", "get_database", "get_collection", "find", "close"],
84
+ ["MongoClient", "get_database", "get_collection", "update_one", "close"],
85
+ ["MongoClient", "get_database", "get_collection", "delete_one", "close"],
86
+ ["MongoClient", "start_session", "with_transaction", "end_session", "close"],
87
+ ] },
88
+ // ── 9. logging (Logging) ──
89
+ { library: "logging", domain: "Logging", sequences: [
90
+ ["getLogger", "setLevel", "addHandler", "info", "removeHandler"],
91
+ ["getLogger", "addFilter", "debug", "removeFilter"],
92
+ ["FileHandler", "setFormatter", "emit", "close"],
93
+ ["getLogger", "info", "warning", "error", "critical"],
94
+ ["basicConfig", "getLogger", "info", "shutdown"],
95
+ ] },
96
+ // ── 10. atexit (Lifecycle) ──
97
+ { library: "atexit", domain: "Lifecycle", sequences: [
98
+ ["register", "cleanup", "unregister"],
99
+ ["register", "shutdown"],
100
+ ["register", "close_file"],
101
+ ["register", "disconnect_db"],
102
+ ["register", "release_lock"],
103
+ ] },
104
+ // ═══════════════════════════════════════════════════════════════
105
+ // P7.3: 5 New Protocol Types — breaking the corpus ceiling
106
+ // Adding 60 sequences across 8 new libraries for:
107
+ // stateless, transaction, conditional, loop, cross-protocol
108
+ // ═══════════════════════════════════════════════════════════════
109
+ // ── 11. hashlib (Cryptography — stateless) ──
110
+ { library: "hashlib", domain: "Cryptography", sequences: [
111
+ ["compute_hash", "verify_checksum"],
112
+ ["compute_hash", "encode_payload"],
113
+ ["compute_hash", "compute_hash", "verify_checksum"],
114
+ ["compute_hash", "encode_payload", "decode_payload"],
115
+ ["compute_hash", "compress_buffer", "verify_checksum"],
116
+ ["encode_payload", "compress_buffer", "decode_payload"],
117
+ ["compute_hash", "encode_payload", "compress_buffer"],
118
+ ["compute_hash", "encode_payload", "decode_payload", "verify_checksum"],
119
+ ] },
120
+ // ── 12. validators (Validation — stateless) ──
121
+ { library: "validators", domain: "Validation", sequences: [
122
+ ["sanitize_input", "validate_schema"],
123
+ ["validate_schema", "sanitize_input"],
124
+ ["sanitize_input", "validate_schema", "encode_payload"],
125
+ ["validate_schema", "sanitize_input", "verify_checksum"],
126
+ ["sanitize_input", "compute_hash", "validate_schema"],
127
+ ["sanitize_input", "encode_payload", "validate_schema"],
128
+ ] },
129
+ // ── 13. sqlalchemy (Transaction — savepoint/commit/rollback) ──
130
+ { library: "sqlalchemy", domain: "Transaction", sequences: [
131
+ ["begin_tx", "insert_record", "commit_tx"],
132
+ ["begin_tx", "update_record", "commit_tx"],
133
+ ["begin_tx", "delete_record", "rollback_tx"],
134
+ ["begin_tx", "insert_record", "update_record", "commit_tx"],
135
+ ["begin_tx", "savepoint_create", "update_record", "savepoint_release", "commit_tx"],
136
+ ["begin_tx", "savepoint_create", "delete_record", "rollback_to_savepoint", "commit_tx"],
137
+ ["begin_tx", "insert_record", "delete_record", "rollback_tx"],
138
+ ["begin_tx", "insert_record", "savepoint_create", "update_record", "rollback_to_savepoint", "commit_tx"],
139
+ ] },
140
+ // ── 14. psycopg2 (Transaction — two-phase & batch) ──
141
+ { library: "psycopg2", domain: "Transaction", sequences: [
142
+ ["begin_tx", "insert_record", "prep_two_phase"],
143
+ ["begin_tx", "update_record", "update_record", "commit_tx"],
144
+ ["begin_tx", "insert_record", "insert_record", "commit_tx"],
145
+ ["begin_tx", "delete_record", "commit_tx"],
146
+ ["begin_tx", "update_record", "rollback_tx"],
147
+ ["begin_tx", "insert_record", "update_record", "delete_record", "commit_tx"],
148
+ ] },
149
+ // ── 15. tenacity (Retry — loop) ──
150
+ { library: "tenacity", domain: "Retry", sequences: [
151
+ ["init_fetch_loop", "fetch_batch", "has_more_data", "process_item", "next_iteration", "fetch_batch", "has_more_data", "process_item", "exit_loop"],
152
+ ["init_fetch_loop", "fetch_batch", "has_more_data", "process_item", "exit_loop"],
153
+ ["init_fetch_loop", "fetch_batch", "retry_batch", "fetch_batch", "has_more_data", "process_item", "exit_loop"],
154
+ ["init_fetch_loop", "fetch_batch", "has_more_data", "process_item", "process_item", "next_iteration", "fetch_batch", "has_more_data", "process_item", "exit_loop"],
155
+ ["init_fetch_loop", "fetch_batch", "has_more_data", "process_item", "poll_status", "next_iteration", "fetch_batch", "has_more_data", "process_item", "exit_loop"],
156
+ ["init_fetch_loop", "fetch_batch", "retry_batch", "fetch_batch", "retry_batch", "fetch_batch", "has_more_data", "process_item", "exit_loop"],
157
+ ["init_fetch_loop", "fetch_batch", "has_more_data", "timeout_exit"],
158
+ ["init_fetch_loop", "fetch_batch", "has_more_data", "process_item", "process_item", "process_item", "exit_loop"],
159
+ ] },
160
+ // ── 16. casbin (Authorization — conditional) ──
161
+ { library: "casbin", domain: "Authorization", sequences: [
162
+ ["evaluate_access", "grant_access", "log_granted"],
163
+ ["evaluate_access", "deny_access", "log_denied"],
164
+ ["evaluate_access", "grant_access", "log_granted"],
165
+ ["evaluate_access", "deny_access", "escalate_access", "log_granted"],
166
+ ["evaluate_access", "bypass_condition"],
167
+ ["evaluate_access", "retry_evaluation", "evaluate_access", "grant_access", "log_granted"],
168
+ ["evaluate_access", "deny_access", "log_denied"],
169
+ ["evaluate_access", "grant_access", "audit_condition"],
170
+ ] },
171
+ // ── 17. watchdog (Filesystem-Events — loop/poll) ──
172
+ { library: "watchdog", domain: "Filesystem-Events", sequences: [
173
+ ["init_fetch_loop", "fetch_batch", "has_more_data", "process_item", "next_iteration", "fetch_batch", "has_more_data", "process_item", "exit_loop"],
174
+ ["init_fetch_loop", "fetch_batch", "has_more_data", "process_item", "poll_status", "exit_loop"],
175
+ ["init_fetch_loop", "fetch_batch", "has_more_data", "process_item", "next_iteration", "fetch_batch", "has_more_data", "timeout_exit"],
176
+ ["init_fetch_loop", "fetch_batch", "retry_batch", "fetch_batch", "has_more_data", "process_item", "exit_loop"],
177
+ ["init_fetch_loop", "fetch_batch", "has_more_data", "process_item", "poll_status", "process_item", "exit_loop"],
178
+ ["init_fetch_loop", "fetch_batch", "has_more_data", "process_item", "next_iteration", "fetch_batch", "has_more_data", "process_item", "next_iteration", "fetch_batch", "has_more_data", "process_item", "exit_loop"],
179
+ ] },
180
+ // ── 18. cross (Cross-Protocol — mixed namespace sequences) ──
181
+ { library: "cross", domain: "Cross-Protocol", sequences: [
182
+ ["verify_password", "open_file", "read_file", "close_file", "logout"],
183
+ ["verify_password", "create_session", "open_file", "write_file", "close_file", "logout"],
184
+ ["connect_db", "query_db", "disconnect_db", "open_file", "read_file", "close_file"],
185
+ ["open_file", "read_file", "connect_db", "query_db", "disconnect_db", "close_file"],
186
+ ["verify_password", "connect_db", "query_db", "disconnect_db", "logout"],
187
+ ["verify_password", "create_session", "open_file", "read_file", "connect_db", "query_db", "close_file", "disconnect_db", "logout"],
188
+ ["open_file", "connect_db", "read_file", "query_db", "close_file", "disconnect_db"],
189
+ ["verify_password", "open_file", "connect_db", "read_file", "query_db", "close_file", "disconnect_db", "logout"],
190
+ ["verify_password", "generate_jwt", "open_file", "write_file", "close_file"],
191
+ ["verify_password", "open_file", "read_file", "connect_db", "query_db", "close_file", "disconnect_db", "logout"],
192
+ ] },
193
+ // ═══════════════════════════════════════════════════════════════
194
+ // P0 Rule Vocabulary Injection — payment + session_mgmt
195
+ // Target: register 12 new namespace transitions in corpus,
196
+ // breaking the "coverage deadlock" where 69.1% of protocol
197
+ // transitions have zero rule vocabulary.
198
+ // ═══════════════════════════════════════════════════════════════
199
+ // ── 19. payment (Payment Processing — payment namespace) ──
200
+ // Covers 5 base transitions + 5 new P0 transitions:
201
+ // ORDER_CREATED→PAYMENT_INITIATED→PAYMENT_CALLBACK_RECEIVED→PAYMENT_CONFIRMED
202
+ // + refund, cancel, retry, verify_signature, reconcile
203
+ { library: "payment", domain: "Payment", sequences: [
204
+ // Happy path: order → pay → callback → confirm
205
+ ["initiate_payment", "receive_payment_callback", "confirm_payment"],
206
+ // Happy path with signature verification
207
+ ["initiate_payment", "receive_payment_callback", "verify_payment_signature", "confirm_payment"],
208
+ // Early cancel before payment
209
+ ["cancel_payment"],
210
+ // Cancel after initiate (before callback)
211
+ ["initiate_payment", "cancel_payment"],
212
+ // Failure from initiated (timeout)
213
+ ["initiate_payment", "fail_payment"],
214
+ // Failure from callback (invalid signature)
215
+ ["initiate_payment", "receive_payment_callback", "fail_payment"],
216
+ // Retry after failure
217
+ ["initiate_payment", "fail_payment", "retry_payment", "receive_payment_callback", "confirm_payment"],
218
+ // Refund after confirmation
219
+ ["initiate_payment", "receive_payment_callback", "confirm_payment", "refund_payment"],
220
+ // Reconciliation loop
221
+ ["initiate_payment", "receive_payment_callback", "confirm_payment", "reconcile_payment"],
222
+ // Full lifecycle: retry → confirm → refund
223
+ ["initiate_payment", "fail_payment", "retry_payment", "receive_payment_callback", "verify_payment_signature", "confirm_payment", "refund_payment"],
224
+ // Multi-attempt retry
225
+ ["initiate_payment", "fail_payment", "retry_payment", "fail_payment", "retry_payment", "receive_payment_callback", "confirm_payment"],
226
+ // Cancel order before payment started
227
+ ["cancel_payment"],
228
+ ] },
229
+ // ── 20. session_mgmt (Session Lifecycle — session_mgmt namespace) ──
230
+ // Covers 7 base transitions + 6 new P0 transitions:
231
+ // ACCOUNT_ACTIVATED→SESSION_CREATED→SESSION_REFRESHED
232
+ // + validate, extend, renew_from_expired, revoke_all, cleanup, rotate
233
+ { library: "session", domain: "Session-Management", sequences: [
234
+ // Basic session lifecycle
235
+ ["create_user_session", "validate_session", "refresh_session"],
236
+ // Session validation middleware (every request)
237
+ ["create_user_session", "validate_session", "validate_session", "validate_session", "refresh_session"],
238
+ // Extend on activity
239
+ ["create_user_session", "validate_session", "extend_session"],
240
+ // Timeout → renew via refresh token
241
+ ["create_user_session", "timeout_session", "renew_session_from_expired", "validate_session"],
242
+ // Revoke single session
243
+ ["create_user_session", "validate_session", "revoke_session"],
244
+ // Revoke all sessions (password change — multiple sessions then bulk revoke)
245
+ ["create_user_session", "validate_session", "refresh_session", "revoke_all_sessions"],
246
+ // Cleanup expired/revoked
247
+ ["create_user_session", "timeout_session", "cleanup_expired_sessions"],
248
+ ["create_user_session", "revoke_session", "cleanup_expired_sessions"],
249
+ // Token rotation (prevent fixation)
250
+ ["create_user_session", "rotate_session_token", "validate_session", "rotate_session_token"],
251
+ // Full lifecycle with extend and timeout
252
+ ["create_user_session", "extend_session", "validate_session", "refresh_session", "timeout_session", "renew_session_from_expired"],
253
+ // Session with cross-namespace auth dependency
254
+ ["create_user_session", "validate_session", "refresh_session", "revoke_session"],
255
+ // Batch revoke + cleanup cycle
256
+ ["create_user_session", "refresh_session", "revoke_session", "cleanup_expired_sessions"],
257
+ ] },
258
+ // ═══════════════════════════════════════════════════════════════
259
+ // P0 Round 2: registration + file_upload + resource
260
+ // Target: eliminate 3 more zero-coverage namespaces
261
+ // ═══════════════════════════════════════════════════════════════
262
+ // ── 21. registration (User Registration — registration namespace) ──
263
+ { library: "registration", domain: "User-Registration", sequences: [
264
+ // Basic flow
265
+ ["register_user", "send_verification_code", "verify_code", "activate_account"],
266
+ // Resend code
267
+ ["register_user", "send_verification_code", "resend_verification_code", "verify_code", "activate_account"],
268
+ // Expired code → resend
269
+ ["register_user", "send_verification_code", "expire_verification", "send_verification_code", "verify_code", "activate_account"],
270
+ // Reject after registration
271
+ ["register_user", "reject_registration"],
272
+ // Reject after code sent
273
+ ["register_user", "send_verification_code", "reject_registration"],
274
+ // Double resend
275
+ ["register_user", "send_verification_code", "resend_verification_code", "expire_verification", "send_verification_code", "verify_code", "activate_account"],
276
+ // Quick verify (no resend needed)
277
+ ["register_user", "send_verification_code", "verify_code", "activate_account"],
278
+ ] },
279
+ // ── 22. file_upload (File Upload — file_upload namespace) ──
280
+ { library: "file-upload", domain: "File-Upload", sequences: [
281
+ // Basic upload flow
282
+ ["receive_upload", "validate_file", "store_file", "reference_file"],
283
+ // With virus scan
284
+ ["receive_upload", "virus_scan_file", "validate_file", "store_file", "reference_file"],
285
+ // Invalid file → reject
286
+ ["receive_upload", "validate_file", "reject_file"],
287
+ // Early reject (before validation)
288
+ ["receive_upload", "reject_file"],
289
+ // Virus scan fails → reject
290
+ ["receive_upload", "virus_scan_file", "reject_file"],
291
+ // Store then delete
292
+ ["receive_upload", "validate_file", "store_file", "delete_file"],
293
+ // Full lifecycle: upload → reference → delete
294
+ ["receive_upload", "virus_scan_file", "validate_file", "store_file", "reference_file", "delete_file"],
295
+ ] },
296
+ // ── 23. resource (Input Validation — resource namespace) ──
297
+ { library: "resource", domain: "Input-Validation", sequences: [
298
+ // Full validation chain
299
+ ["sanitize", "validate_type", "validate_range"],
300
+ // Sanitize only
301
+ ["sanitize", "validate_type"],
302
+ // With escape
303
+ ["sanitize", "validate_type", "validate_range", "escape_output"],
304
+ // Rate limit before processing
305
+ ["rate_limit_resource", "sanitize", "validate_type", "validate_range"],
306
+ // Multiple inputs
307
+ ["rate_limit_resource", "sanitize", "validate_type", "validate_range", "escape_output"],
308
+ // Short path
309
+ ["sanitize", "escape_output"],
310
+ ] },
311
+ // ═══════════════════════════════════════════════════════════════
312
+ // P0 Round 3: api_gateway + notification + supplier + tls
313
+ // + data_integrity + dev_pipeline
314
+ // + printlab_order + printlab_print
315
+ // Target: eliminate final 8 zero-coverage namespaces
316
+ // ═══════════════════════════════════════════════════════════════
317
+ // ── 24. api-gateway (Rate Limiting — api_gateway namespace) ──
318
+ { library: "api-gateway", domain: "API-Gateway", sequences: [
319
+ ["check_rate_limit", "pass_rate_check"],
320
+ ["check_rate_limit", "throttle_request"],
321
+ ["check_rate_limit", "circuit_break"],
322
+ ["check_rate_limit", "pass_rate_check", "check_rate_limit", "throttle_request"],
323
+ ["check_rate_limit", "pass_rate_check", "check_rate_limit", "pass_rate_check"],
324
+ ["check_rate_limit", "throttle_request", "check_rate_limit", "pass_rate_check"],
325
+ ] },
326
+ // ── 25. notification (Notification Delivery — notification namespace) ──
327
+ { library: "notification", domain: "Notification", sequences: [
328
+ ["compose_notification", "send_notification", "confirm_delivery"],
329
+ ["compose_notification", "send_notification", "retry_notification", "confirm_delivery"],
330
+ ["compose_notification", "fail_notification"],
331
+ ["compose_notification", "send_notification", "fail_notification"],
332
+ ["compose_notification", "send_notification", "retry_notification", "retry_notification", "confirm_delivery"],
333
+ ["compose_notification", "send_notification", "confirm_delivery"],
334
+ ] },
335
+ // ── 26. supplier (Supplier Lifecycle — supplier namespace) ──
336
+ { library: "supplier", domain: "Supplier-Management", sequences: [
337
+ ["register_supplier", "verify_supplier", "enable_supplier", "assign_product_to_supplier"],
338
+ ["register_supplier", "verify_supplier", "enable_supplier"],
339
+ ["register_supplier", "verify_supplier", "disable_supplier"],
340
+ ["register_supplier", "deregister_supplier"],
341
+ ["register_supplier", "verify_supplier", "enable_supplier", "disable_supplier", "enable_supplier"],
342
+ ["register_supplier", "verify_supplier", "deregister_supplier"],
343
+ ] },
344
+ // ── 27. tls (TLS Configuration — tls namespace) ──
345
+ { library: "tls", domain: "TLS-Config", sequences: [
346
+ ["load_tls_config", "http_create_server"],
347
+ ["load_tls_config", "renew_tls_certificate", "http_create_server"],
348
+ ["load_tls_config", "http_create_server", "renew_tls_certificate"],
349
+ ["load_tls_config", "renew_tls_certificate"],
350
+ ] },
351
+ // ── 28. data-integrity (Data Integrity — data_integrity namespace) ──
352
+ { library: "data-integrity", domain: "Data-Integrity", sequences: [
353
+ ["check_exists", "create_reference"],
354
+ ["validate_business_rule", "check_exists", "create_reference", "validate_order_integrity"],
355
+ ["check_exists", "create_reference", "audit_mutation"],
356
+ ["validate_business_rule", "audit_mutation"],
357
+ ["check_exists", "create_reference", "validate_order_integrity", "audit_mutation"],
358
+ ["validate_business_rule", "check_exists", "create_reference"],
359
+ ] },
360
+ // ── 29. dev-pipeline (Dev Pipeline — dev_pipeline namespace) ──
361
+ { library: "dev-pipeline", domain: "Dev-Pipeline", sequences: [
362
+ ["extractIR", "validateAction", "validateActionSequence", "emitCode", "recordSession"],
363
+ ["extractIR", "validateAction", "rollback_ir"],
364
+ ["extractIR", "rollback_ir", "extractIR", "validateAction", "validateActionSequence", "emitCode", "recordSession"],
365
+ ["extractIR", "validateAction", "validateActionSequence", "rollback_ir"],
366
+ ["extractIR", "validateAction", "validateActionSequence", "emitCode", "recordSession"],
367
+ ] },
368
+ // ── 30. printlab-order (3D Print Order — printlab_order namespace) ──
369
+ { library: "printlab-order", domain: "PrintLab-Order", sequences: [
370
+ ["upload_stl", "slice_model", "generate_gcode", "estimate_cost", "create_order"],
371
+ ["upload_stl", "slice_model", "generate_gcode", "estimate_cost", "create_order", "queue_order"],
372
+ ["upload_stl", "slice_model", "generate_gcode", "estimate_cost", "create_order", "queue_order", "ship_order", "deliver_order"],
373
+ ["upload_stl", "slice_model", "generate_gcode", "estimate_cost", "cancel_order"],
374
+ ["upload_stl", "slice_model", "generate_gcode", "estimate_cost", "create_order", "cancel_order"],
375
+ ["upload_stl", "slice_model", "generate_gcode", "estimate_cost", "create_order", "queue_order", "cancel_order"],
376
+ ["upload_stl", "slice_model", "generate_gcode", "estimate_cost", "create_order", "queue_order", "ship_order", "deliver_order"],
377
+ ] },
378
+ // ── 31. printlab-print (3D Print Execution — printlab_print namespace) ──
379
+ { library: "printlab-print", domain: "PrintLab-Print", sequences: [
380
+ ["start_print", "complete_print"],
381
+ ["start_print", "fail_print"],
382
+ ["start_print", "fail_print", "start_print", "complete_print"],
383
+ ["start_print", "complete_print"],
384
+ ] },
385
+ ];
386
+ // ═══════════════════════════════════════════════════════════════
387
+ // Integration
388
+ // ═══════════════════════════════════════════════════════════════
389
+ /** Collect all expanded trajectories into a flat sequence list. */
390
+ function collectExpandedTrajectories() {
391
+ const all = [];
392
+ for (const lib of exports.EXPANDED_TRAJECTORIES) {
393
+ for (const seq of lib.sequences) {
394
+ if (seq.length >= 2)
395
+ all.push(seq);
396
+ }
397
+ }
398
+ return all;
399
+ }
400
+ /**
401
+ * Run corpus expansion and measure bootstrap improvement.
402
+ */
403
+ async function runCorpusExpansion() {
404
+ // Baseline
405
+ const baseline = await (0, bootstrap_validation_1.runBootstrapValidation)();
406
+ // Collect expanded trajectories
407
+ const expanded = collectExpandedTrajectories();
408
+ // Re-synthesize with expanded corpus (trajectories are used via CROSS_REPO_SEQUENCES)
409
+ // The expanded trajectories feed into the synthesis pipeline through the global corpus
410
+ const synthesized = (0, auto_protocol_synthesizer_1.synthesizeProtocols)(expanded);
411
+ // Re-run bootstrap
412
+ const after = await (0, bootstrap_validation_1.runBootstrapValidation)();
413
+ // Count rules
414
+ let rulesCount = 0;
415
+ for (const sp of synthesized) {
416
+ rulesCount += sp.rules.length;
417
+ }
418
+ return {
419
+ originalCount: 50, // original CROSS_REPO_SEQUENCES count
420
+ expandedCount: expanded.length,
421
+ totalSequences: expanded.length + 50,
422
+ clustersFound: synthesized.length,
423
+ rulesSynthesized: rulesCount,
424
+ bootstrapOverlapBefore: baseline.functionOverlap,
425
+ bootstrapOverlapAfter: after.functionOverlap,
426
+ improvement: after.functionOverlap - baseline.functionOverlap,
427
+ };
428
+ }
429
+ function printExpansionReport(report) {
430
+ console.log("\n─── P6.10 Trajectory Corpus Expansion ───");
431
+ console.log(` Original Sequences: ${report.originalCount}`);
432
+ console.log(` Expanded Sequences: ${report.expandedCount}`);
433
+ console.log(` Total Corpus: ${report.totalSequences}`);
434
+ console.log(` Clusters Found: ${report.clustersFound}`);
435
+ console.log(` Rules Synthesized: ${report.rulesSynthesized}`);
436
+ console.log(` Bootstrap Before: ${(report.bootstrapOverlapBefore * 100).toFixed(0)}%`);
437
+ console.log(` Bootstrap After: ${(report.bootstrapOverlapAfter * 100).toFixed(0)}%`);
438
+ console.log(` Improvement: ${(report.improvement > 0 ? "+" : "")}${(report.improvement * 100).toFixed(0)}%`);
439
+ console.log();
440
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ /**
3
+ * P6.10: Trajectory Corpus Expansion Tests
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const vitest_1 = require("vitest");
7
+ const trajectory_corpus_1 = require("./trajectory-corpus");
8
+ const auto_protocol_synthesizer_1 = require("./auto-protocol-synthesizer");
9
+ (0, vitest_1.describe)("P6.10 Trajectory Corpus Expansion", () => {
10
+ (0, vitest_1.it)("contains 110+ sequences across 18 libraries", () => {
11
+ (0, vitest_1.expect)(trajectory_corpus_1.EXPANDED_TRAJECTORIES.length).toBe(18);
12
+ const all = (0, trajectory_corpus_1.collectExpandedTrajectories)();
13
+ (0, vitest_1.expect)(all.length).toBeGreaterThanOrEqual(100);
14
+ const libraries = new Set(trajectory_corpus_1.EXPANDED_TRAJECTORIES.map(l => l.library));
15
+ (0, vitest_1.expect)(libraries.size).toBe(18);
16
+ const domains = new Set(trajectory_corpus_1.EXPANDED_TRAJECTORIES.map(l => l.domain));
17
+ (0, vitest_1.expect)(domains.size).toBeGreaterThanOrEqual(5);
18
+ });
19
+ (0, vitest_1.it)("synthesizes protocols from expanded corpus", () => {
20
+ const expanded = (0, trajectory_corpus_1.collectExpandedTrajectories)();
21
+ const protocols = (0, auto_protocol_synthesizer_1.synthesizeProtocols)(expanded);
22
+ (0, vitest_1.expect)(protocols.length).toBeGreaterThan(0);
23
+ // With 50+ expanded sequences, should find more clusters than the original 5
24
+ (0, vitest_1.expect)(protocols.length).toBeGreaterThanOrEqual(3);
25
+ });
26
+ (0, vitest_1.it)("runs corpus expansion and measures bootstrap improvement", async () => {
27
+ const report = await (0, trajectory_corpus_1.runCorpusExpansion)();
28
+ (0, vitest_1.expect)(report.expandedCount).toBeGreaterThanOrEqual(50);
29
+ (0, vitest_1.expect)(report.rulesSynthesized).toBeGreaterThan(0);
30
+ (0, trajectory_corpus_1.printExpansionReport)(report);
31
+ }, 60000);
32
+ });
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ /**
3
+ * P2: Trajectory Feedback Tests — pre-burial for P4 Reward Model
4
+ *
5
+ * These tests verify that feedback and cost fields survive
6
+ * write→read roundtrips through the trajectory corpus.
7
+ *
8
+ * IMPORTANT: process.env.PROGMUNE_PROJECT_DIR must be set BEFORE
9
+ * importing from failure-corpus, because module-level path constants
10
+ * are computed at import time. This file sets the env var FIRST.
11
+ */
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || (function () {
29
+ var ownKeys = function(o) {
30
+ ownKeys = Object.getOwnPropertyNames || function (o) {
31
+ var ar = [];
32
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
+ return ar;
34
+ };
35
+ return ownKeys(o);
36
+ };
37
+ return function (mod) {
38
+ if (mod && mod.__esModule) return mod;
39
+ var result = {};
40
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
+ __setModuleDefault(result, mod);
42
+ return result;
43
+ };
44
+ })();
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ // ═══ MUST be set before any import from failure-corpus ═══
47
+ const fs = __importStar(require("fs"));
48
+ const path = __importStar(require("path"));
49
+ const FEEDBACK_TEST_DIR = path.resolve(__dirname, "..", "test-corpus-feedback");
50
+ process.env.PROGMUNE_PROJECT_DIR = FEEDBACK_TEST_DIR;
51
+ // Ensure directories exist before module loads
52
+ fs.mkdirSync(FEEDBACK_TEST_DIR, { recursive: true });
53
+ fs.mkdirSync(path.join(FEEDBACK_TEST_DIR, ".progmune_corpus"), { recursive: true });
54
+ fs.mkdirSync(path.join(FEEDBACK_TEST_DIR, ".progmune_corpus", "trajectories"), { recursive: true });
55
+ // ═══ Now safe to import ═══
56
+ const vitest_1 = require("vitest");
57
+ const failure_corpus_1 = require("./failure-corpus");
58
+ (0, vitest_1.describe)("P2: Trajectory feedback", () => {
59
+ (0, vitest_1.it)("stores accepted repair feedback on TrajectoryRecord", () => {
60
+ (0, failure_corpus_1.recordTrajectory)({
61
+ protocol: "FileProtocol",
62
+ initialState: ["FILE_OPEN"],
63
+ finalState: [],
64
+ trajectory: ["open_file", "write_file", "close_file"],
65
+ result: "repair",
66
+ violationType: "resource_leak",
67
+ violationDesc: "File not closed",
68
+ fixPath: ["close_file"],
69
+ successRate: 1.0,
70
+ source: "planner",
71
+ feedback: { accepted: true, rejected: false },
72
+ cost: { latency: 12, actions: 3 },
73
+ });
74
+ const trajectories = (0, failure_corpus_1.loadTrajectories)();
75
+ const accepted = trajectories.filter(t => t.result === "repair" && t.feedback?.accepted === true);
76
+ (0, vitest_1.expect)(accepted.length).toBeGreaterThanOrEqual(1);
77
+ const withCost = trajectories.filter(t => t.cost?.latency !== undefined);
78
+ (0, vitest_1.expect)(withCost.length).toBeGreaterThanOrEqual(1);
79
+ });
80
+ (0, vitest_1.it)("stores rejected repair feedback", () => {
81
+ (0, failure_corpus_1.recordTrajectory)({
82
+ protocol: "FileProtocol",
83
+ initialState: ["FILE_OPEN"],
84
+ finalState: ["FILE_OPEN"],
85
+ trajectory: ["open_file", "write_file"],
86
+ result: "repair",
87
+ violationType: "resource_leak",
88
+ violationDesc: "Attempted fix but still leaking",
89
+ fixPath: ["close_file"],
90
+ successRate: 0.0,
91
+ source: "planner",
92
+ feedback: { accepted: false, rejected: true },
93
+ cost: { latency: 8, actions: 2 },
94
+ });
95
+ const trajectories = (0, failure_corpus_1.loadTrajectories)();
96
+ const rejected = trajectories.filter(t => t.result === "repair" && t.feedback?.rejected === true);
97
+ (0, vitest_1.expect)(rejected.length).toBeGreaterThanOrEqual(1);
98
+ });
99
+ (0, vitest_1.it)("accumulates feedback statistics for future reward model", () => {
100
+ const all = (0, failure_corpus_1.loadTrajectories)().filter(t => t.result === "repair");
101
+ const accepted = all.filter(t => t.feedback?.accepted === true).length;
102
+ const rejected = all.filter(t => t.feedback?.rejected === true).length;
103
+ const total = accepted + rejected;
104
+ (0, vitest_1.expect)(total).toBeGreaterThanOrEqual(2);
105
+ const acceptanceRate = accepted / total;
106
+ (0, vitest_1.expect)(acceptanceRate).toBeGreaterThanOrEqual(0);
107
+ (0, vitest_1.expect)(acceptanceRate).toBeLessThanOrEqual(1);
108
+ // Cost summary for P4 reward model
109
+ const costs = all
110
+ .map(t => t.cost?.latency)
111
+ .filter((l) => l !== undefined);
112
+ (0, vitest_1.expect)(costs.length).toBeGreaterThanOrEqual(1);
113
+ const avgLatency = costs.reduce((s, l) => s + l, 0) / costs.length;
114
+ (0, vitest_1.expect)(avgLatency).toBeGreaterThan(0);
115
+ });
116
+ });