loopforge 3.9.2 → 4.0.7

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 (285) hide show
  1. package/README.md +236 -112
  2. package/dist/audit.d.ts +73 -15
  3. package/dist/audit.d.ts.map +1 -1
  4. package/dist/audit.js +131 -61
  5. package/dist/audit.js.map +1 -1
  6. package/dist/canonical-state.d.ts +152 -40
  7. package/dist/canonical-state.d.ts.map +1 -1
  8. package/dist/canonical-state.js +382 -206
  9. package/dist/canonical-state.js.map +1 -1
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +41 -12
  12. package/dist/cli.js.map +1 -1
  13. package/dist/cognitive-governance.d.ts +0 -2
  14. package/dist/cognitive-governance.d.ts.map +1 -1
  15. package/dist/cognitive-governance.js +0 -4
  16. package/dist/cognitive-governance.js.map +1 -1
  17. package/dist/committed-round.d.ts +105 -141
  18. package/dist/committed-round.d.ts.map +1 -1
  19. package/dist/committed-round.js +249 -372
  20. package/dist/committed-round.js.map +1 -1
  21. package/dist/constraint-lifecycle.d.ts +73 -0
  22. package/dist/constraint-lifecycle.d.ts.map +1 -0
  23. package/dist/constraint-lifecycle.js +174 -0
  24. package/dist/constraint-lifecycle.js.map +1 -0
  25. package/dist/context-boundary.d.ts +83 -0
  26. package/dist/context-boundary.d.ts.map +1 -0
  27. package/dist/context-boundary.js +101 -0
  28. package/dist/context-boundary.js.map +1 -0
  29. package/dist/contract-items.d.ts +12 -8
  30. package/dist/contract-items.d.ts.map +1 -1
  31. package/dist/contract-items.js +31 -26
  32. package/dist/contract-items.js.map +1 -1
  33. package/dist/contract-requirement.d.ts +47 -0
  34. package/dist/contract-requirement.d.ts.map +1 -0
  35. package/dist/contract-requirement.js +51 -0
  36. package/dist/contract-requirement.js.map +1 -0
  37. package/dist/criterion-status.d.ts +35 -0
  38. package/dist/criterion-status.d.ts.map +1 -0
  39. package/dist/criterion-status.js +89 -0
  40. package/dist/criterion-status.js.map +1 -0
  41. package/dist/enforcement-gate.d.ts +32 -67
  42. package/dist/enforcement-gate.d.ts.map +1 -1
  43. package/dist/enforcement-gate.js +203 -439
  44. package/dist/enforcement-gate.js.map +1 -1
  45. package/dist/engine.d.ts +9 -103
  46. package/dist/engine.d.ts.map +1 -1
  47. package/dist/engine.js +28 -887
  48. package/dist/engine.js.map +1 -1
  49. package/dist/errors.d.ts +41 -0
  50. package/dist/errors.d.ts.map +1 -0
  51. package/dist/errors.js +69 -0
  52. package/dist/errors.js.map +1 -0
  53. package/dist/evidence-claims.d.ts +33 -31
  54. package/dist/evidence-claims.d.ts.map +1 -1
  55. package/dist/evidence-claims.js +58 -72
  56. package/dist/evidence-claims.js.map +1 -1
  57. package/dist/evidence-posture-view.d.ts +19 -0
  58. package/dist/evidence-posture-view.d.ts.map +1 -0
  59. package/dist/evidence-posture-view.js +116 -0
  60. package/dist/evidence-posture-view.js.map +1 -0
  61. package/dist/evidence-posture.d.ts +73 -0
  62. package/dist/evidence-posture.d.ts.map +1 -0
  63. package/dist/evidence-posture.js +281 -0
  64. package/dist/evidence-posture.js.map +1 -0
  65. package/dist/evidence-provider.d.ts +55 -37
  66. package/dist/evidence-provider.d.ts.map +1 -1
  67. package/dist/evidence-provider.js +182 -332
  68. package/dist/evidence-provider.js.map +1 -1
  69. package/dist/explain.d.ts +167 -27
  70. package/dist/explain.d.ts.map +1 -1
  71. package/dist/explain.js +373 -58
  72. package/dist/explain.js.map +1 -1
  73. package/dist/field-accounting.d.ts.map +1 -1
  74. package/dist/field-accounting.js +3 -22
  75. package/dist/field-accounting.js.map +1 -1
  76. package/dist/generate-schema.js +13 -8
  77. package/dist/generate-schema.js.map +1 -1
  78. package/dist/git-boundary.d.ts +128 -0
  79. package/dist/git-boundary.d.ts.map +1 -0
  80. package/dist/git-boundary.js +625 -0
  81. package/dist/git-boundary.js.map +1 -0
  82. package/dist/git-facts.d.ts +22 -0
  83. package/dist/git-facts.d.ts.map +1 -0
  84. package/dist/git-facts.js +29 -0
  85. package/dist/git-facts.js.map +1 -0
  86. package/dist/git-motion.d.ts +37 -0
  87. package/dist/git-motion.d.ts.map +1 -0
  88. package/dist/git-motion.js +59 -0
  89. package/dist/git-motion.js.map +1 -0
  90. package/dist/history.d.ts +44 -0
  91. package/dist/history.d.ts.map +1 -0
  92. package/dist/history.js +77 -0
  93. package/dist/history.js.map +1 -0
  94. package/dist/index.d.ts +19 -9
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +12 -4
  97. package/dist/index.js.map +1 -1
  98. package/dist/init.d.ts +16 -0
  99. package/dist/init.d.ts.map +1 -1
  100. package/dist/init.js +80 -14
  101. package/dist/init.js.map +1 -1
  102. package/dist/loop-compiler.d.ts +51 -19
  103. package/dist/loop-compiler.d.ts.map +1 -1
  104. package/dist/loop-compiler.js +423 -507
  105. package/dist/loop-compiler.js.map +1 -1
  106. package/dist/loop-store.d.ts +6 -5
  107. package/dist/loop-store.d.ts.map +1 -1
  108. package/dist/loop-store.js +153 -35
  109. package/dist/loop-store.js.map +1 -1
  110. package/dist/mcp/round-lifecycle.d.ts +285 -81
  111. package/dist/mcp/round-lifecycle.d.ts.map +1 -1
  112. package/dist/mcp/round-lifecycle.js +1629 -574
  113. package/dist/mcp/round-lifecycle.js.map +1 -1
  114. package/dist/mcp/server.d.ts +5 -0
  115. package/dist/mcp/server.d.ts.map +1 -1
  116. package/dist/mcp/server.js +61 -19
  117. package/dist/mcp/server.js.map +1 -1
  118. package/dist/mcp/session.d.ts +81 -39
  119. package/dist/mcp/session.d.ts.map +1 -1
  120. package/dist/mcp/session.js +963 -271
  121. package/dist/mcp/session.js.map +1 -1
  122. package/dist/mcp/submission-boundary.d.ts +23 -31
  123. package/dist/mcp/submission-boundary.d.ts.map +1 -1
  124. package/dist/mcp/submission-boundary.js +242 -82
  125. package/dist/mcp/submission-boundary.js.map +1 -1
  126. package/dist/mcp/submission-handle.d.ts +66 -0
  127. package/dist/mcp/submission-handle.d.ts.map +1 -0
  128. package/dist/mcp/submission-handle.js +173 -0
  129. package/dist/mcp/submission-handle.js.map +1 -0
  130. package/dist/mcp/tools.d.ts +17 -7
  131. package/dist/mcp/tools.d.ts.map +1 -1
  132. package/dist/mcp/tools.js +763 -244
  133. package/dist/mcp/tools.js.map +1 -1
  134. package/dist/open-question.d.ts +7 -0
  135. package/dist/open-question.d.ts.map +1 -0
  136. package/dist/open-question.js +14 -0
  137. package/dist/open-question.js.map +1 -0
  138. package/dist/policy-metrics.d.ts +31 -21
  139. package/dist/policy-metrics.d.ts.map +1 -1
  140. package/dist/policy-metrics.js +117 -64
  141. package/dist/policy-metrics.js.map +1 -1
  142. package/dist/policy.d.ts +15 -40
  143. package/dist/policy.d.ts.map +1 -1
  144. package/dist/policy.js +13 -13
  145. package/dist/policy.js.map +1 -1
  146. package/dist/progress.d.ts +45 -0
  147. package/dist/progress.d.ts.map +1 -0
  148. package/dist/progress.js +136 -0
  149. package/dist/progress.js.map +1 -0
  150. package/dist/prompt-assembler.d.ts +28 -9
  151. package/dist/prompt-assembler.d.ts.map +1 -1
  152. package/dist/prompt-assembler.js +592 -603
  153. package/dist/prompt-assembler.js.map +1 -1
  154. package/dist/prompt-coverage.d.ts +39 -0
  155. package/dist/prompt-coverage.d.ts.map +1 -0
  156. package/dist/prompt-coverage.js +80 -0
  157. package/dist/prompt-coverage.js.map +1 -0
  158. package/dist/prompt-freshness.d.ts +25 -0
  159. package/dist/prompt-freshness.d.ts.map +1 -0
  160. package/dist/prompt-freshness.js +88 -0
  161. package/dist/prompt-freshness.js.map +1 -0
  162. package/dist/prompt-policy.d.ts +14 -4
  163. package/dist/prompt-policy.d.ts.map +1 -1
  164. package/dist/prompt-policy.js +29 -10
  165. package/dist/prompt-policy.js.map +1 -1
  166. package/dist/protocol.d.ts +875 -419
  167. package/dist/protocol.d.ts.map +1 -1
  168. package/dist/protocol.js +73 -99
  169. package/dist/protocol.js.map +1 -1
  170. package/dist/recovery-guidance.d.ts +13 -0
  171. package/dist/recovery-guidance.d.ts.map +1 -0
  172. package/dist/recovery-guidance.js +15 -0
  173. package/dist/recovery-guidance.js.map +1 -0
  174. package/dist/recovery.d.ts +68 -0
  175. package/dist/recovery.d.ts.map +1 -0
  176. package/dist/recovery.js +234 -0
  177. package/dist/recovery.js.map +1 -0
  178. package/dist/replay.d.ts +42 -8
  179. package/dist/replay.d.ts.map +1 -1
  180. package/dist/replay.js +311 -84
  181. package/dist/replay.js.map +1 -1
  182. package/dist/result-facts.d.ts +45 -0
  183. package/dist/result-facts.d.ts.map +1 -0
  184. package/dist/result-facts.js +86 -0
  185. package/dist/result-facts.js.map +1 -0
  186. package/dist/round-contract.d.ts +38 -8
  187. package/dist/round-contract.d.ts.map +1 -1
  188. package/dist/round-contract.js +71 -31
  189. package/dist/round-contract.js.map +1 -1
  190. package/dist/round-coordinator.d.ts +45 -91
  191. package/dist/round-coordinator.d.ts.map +1 -1
  192. package/dist/round-coordinator.js +254 -271
  193. package/dist/round-coordinator.js.map +1 -1
  194. package/dist/round-driver.d.ts +56 -16
  195. package/dist/round-driver.d.ts.map +1 -1
  196. package/dist/round-driver.js +225 -39
  197. package/dist/round-driver.js.map +1 -1
  198. package/dist/round-facts.d.ts +33 -52
  199. package/dist/round-facts.d.ts.map +1 -1
  200. package/dist/round-facts.js +54 -157
  201. package/dist/round-facts.js.map +1 -1
  202. package/dist/round-guidance.d.ts +56 -0
  203. package/dist/round-guidance.d.ts.map +1 -0
  204. package/dist/round-guidance.js +161 -0
  205. package/dist/round-guidance.js.map +1 -0
  206. package/dist/round-outcome.d.ts +21 -0
  207. package/dist/round-outcome.d.ts.map +1 -0
  208. package/dist/round-outcome.js +31 -0
  209. package/dist/round-outcome.js.map +1 -0
  210. package/dist/round-transaction.d.ts +168 -21
  211. package/dist/round-transaction.d.ts.map +1 -1
  212. package/dist/round-transaction.js +856 -39
  213. package/dist/round-transaction.js.map +1 -1
  214. package/dist/self-eval.d.ts +40 -60
  215. package/dist/self-eval.d.ts.map +1 -1
  216. package/dist/self-eval.js +455 -384
  217. package/dist/self-eval.js.map +1 -1
  218. package/dist/storage.d.ts +16 -0
  219. package/dist/storage.d.ts.map +1 -1
  220. package/dist/storage.js +54 -4
  221. package/dist/storage.js.map +1 -1
  222. package/dist/subgoal-state.d.ts +2 -3
  223. package/dist/subgoal-state.d.ts.map +1 -1
  224. package/dist/subgoal-state.js +2 -3
  225. package/dist/subgoal-state.js.map +1 -1
  226. package/dist/submission-guidance.d.ts +43 -21
  227. package/dist/submission-guidance.d.ts.map +1 -1
  228. package/dist/submission-guidance.js +368 -262
  229. package/dist/submission-guidance.js.map +1 -1
  230. package/dist/submission-receipt.d.ts +16 -8
  231. package/dist/submission-receipt.d.ts.map +1 -1
  232. package/dist/submission-receipt.js +146 -51
  233. package/dist/submission-receipt.js.map +1 -1
  234. package/dist/token-utils.d.ts +47 -7
  235. package/dist/token-utils.d.ts.map +1 -1
  236. package/dist/token-utils.js +66 -15
  237. package/dist/token-utils.js.map +1 -1
  238. package/dist/transaction-identity.d.ts +9 -0
  239. package/dist/transaction-identity.d.ts.map +1 -0
  240. package/dist/transaction-identity.js +69 -0
  241. package/dist/transaction-identity.js.map +1 -0
  242. package/dist/verification-actions.d.ts +13 -0
  243. package/dist/verification-actions.d.ts.map +1 -0
  244. package/dist/verification-actions.js +44 -0
  245. package/dist/verification-actions.js.map +1 -0
  246. package/dist/verification-gate.d.ts +26 -46
  247. package/dist/verification-gate.d.ts.map +1 -1
  248. package/dist/verification-gate.js +218 -427
  249. package/dist/verification-gate.js.map +1 -1
  250. package/dist/version.d.ts +1 -1
  251. package/dist/version.js +1 -1
  252. package/dist/working-memory.d.ts +187 -0
  253. package/dist/working-memory.d.ts.map +1 -0
  254. package/dist/working-memory.js +767 -0
  255. package/dist/working-memory.js.map +1 -0
  256. package/dist/workspace-checkpoint.d.ts +88 -0
  257. package/dist/workspace-checkpoint.d.ts.map +1 -0
  258. package/dist/workspace-checkpoint.js +326 -0
  259. package/dist/workspace-checkpoint.js.map +1 -0
  260. package/dist/workspace-restore.d.ts +68 -0
  261. package/dist/workspace-restore.d.ts.map +1 -0
  262. package/dist/workspace-restore.js +604 -0
  263. package/dist/workspace-restore.js.map +1 -0
  264. package/dist/workspace.d.ts +0 -9
  265. package/dist/workspace.d.ts.map +1 -1
  266. package/dist/workspace.js +0 -17
  267. package/dist/workspace.js.map +1 -1
  268. package/loop_policy.json +5 -19
  269. package/package.json +2 -2
  270. package/skills/forge/SKILL.md +212 -0
  271. package/skills/forge/references/evidence-and-contracts.md +204 -0
  272. package/skills/forge/references/recovery-and-views.md +188 -0
  273. package/dist/cognitive-facts.d.ts +0 -30
  274. package/dist/cognitive-facts.d.ts.map +0 -1
  275. package/dist/cognitive-facts.js +0 -113
  276. package/dist/cognitive-facts.js.map +0 -1
  277. package/dist/loop-extras-parser.d.ts +0 -81
  278. package/dist/loop-extras-parser.d.ts.map +0 -1
  279. package/dist/loop-extras-parser.js +0 -213
  280. package/dist/loop-extras-parser.js.map +0 -1
  281. package/dist/loop-projection.d.ts +0 -6
  282. package/dist/loop-projection.d.ts.map +0 -1
  283. package/dist/loop-projection.js +0 -28
  284. package/dist/loop-projection.js.map +0 -1
  285. package/skills/perception/SKILL.md +0 -370
@@ -1,4 +1,10 @@
1
1
  /** Round Contract derivation — the ACTIVE contract a round executes under.
2
+ *
3
+ * v3.9.5 semantics: `work_item` is the bounded deliverable this slice
4
+ * produces (an outcome, not an activity); `items[]` are acceptance
5
+ * conditions inside that slice; each item binds its own `verify_with`
6
+ * commands. The contract is verified only when every item is verified, so
7
+ * there is no work_item-level claim. A command may back several conditions.
2
8
  *
3
9
  * A submission's `round_contract` is a PROPOSAL for the next round. It
4
10
  * becomes ACTIVE only after the declaring round commits; the active contract
@@ -9,10 +15,11 @@
9
15
  *
10
16
  * v3.8 identity: `rc-` / `rci-` are derived from CONTENT ONLY (loop id +
11
17
  * canonical proposal), so restating an unchanged contract keeps the same
12
- * identity and the item ids the agent already cited. This is deliberately
18
+ * identity and the item ids the agent already cited. `rci-` is deliberately
19
+ * independent of `work_item`/`scope`, which stay slice-level labels. This is
13
20
  * the opposite of a SubGoal, whose id includes its declaration round.
14
21
  */
15
- import type { ContractItemProposal, ExecutionReport, RoundContractProposal } from "./protocol.js";
22
+ import type { ContractItemProposal, ContractSupersede, ExecutionReport, RoundContractProposal } from "./protocol.js";
16
23
  import type { ObservationDelta } from "./evidence-provider.js";
17
24
  import type { CommittedRoundView } from "./committed-round.js";
18
25
  import type { CommandEvidencePolicy } from "./policy.js";
@@ -27,7 +34,11 @@ export interface ActiveContractView {
27
34
  /** The round that declared the proposal that became active (a fact, not
28
35
  * part of the identity hash). */
29
36
  declared_at_round: number;
37
+ /** The bounded deliverable label. Optional only for legacy committed
38
+ * contracts; new declarations require it at the strict boundary. */
30
39
  work_item?: string;
40
+ /** Report-only intended files/directories for this slice. It grants no
41
+ * permission and is never enforced; drift is an info fact. */
31
42
  scope: string[];
32
43
  items: ActiveContractItem[];
33
44
  /** The command configuration in force at declaration (machine-stamped at
@@ -43,10 +54,31 @@ export declare function activateContract(proposal: RoundContractProposal, declar
43
54
  * contract. Never compare by id (8 hex = 32 bits; a collision must not merge
44
55
  * two different contracts). */
45
56
  export declare function sameContract(left: RoundContractProposal, right: RoundContractProposal): boolean;
57
+ /** v3.9.9 / v4.0.6: the ONE current-round fact bundle for contract
58
+ * derivations. Every caller passes report/deltas/blocked/redirect together,
59
+ * so a consumer can no longer forget the round's blocked declaration or its
60
+ * explicit redirect while another consumer sees them. */
61
+ export interface CurrentRoundFacts {
62
+ report: ExecutionReport | null;
63
+ deltas: ReadonlyArray<ObservationDelta>;
64
+ /** The round's ONE blocked declaration (`outcome: "blocked"`). */
65
+ blocked: boolean;
66
+ /** The round's explicit contract redirect, if it declared one
67
+ * (`round_contract.supersedes`). */
68
+ redirect: ContractSupersede | null;
69
+ }
70
+ export declare const NO_CURRENT_ROUND_FACTS: CurrentRoundFacts;
71
+ /** Read a committed view's current-round facts. Read views (audit/explain/
72
+ * receipt/round-facts) use this instead of hand-building `outcome`-only
73
+ * blocked flags. */
74
+ export declare function committedRoundFacts(view: CommittedRoundView): CurrentRoundFacts;
75
+ /** v4.0.6: The successor's acceptance CONTENT must actually change. A new
76
+ * work_item or scope label alone is not a new slice. Exported because the
77
+ * verification gate's `contract_successor_unchanged` check uses the SAME
78
+ * content identity. */
79
+ export declare function acceptanceItemsDiffer(proposal: RoundContractProposal, active: ActiveContractView): boolean;
46
80
  /** v3.8: The active contract after replaying committed rounds in order. */
47
81
  export declare function deriveActiveRoundContract(rounds: ReadonlyArray<CommittedRoundView>, commands?: ReadonlyArray<CommandEvidencePolicy>): ActiveContractView | null;
48
- /** v3.8: Every criterion id referenced by the contract's items. */
49
- export declare function contractCriterionIds(contract: ActiveContractView): string[];
50
82
  /** v3.8: The contract a round EXECUTED under, plus every item's status as of
51
83
  * that round — the ONE derivation the live coordinator, explain and audit
52
84
  * share, so the three can never disagree about what a round ran under.
@@ -65,10 +97,8 @@ export declare function deriveRoundContractView(input: {
65
97
  /** Committed rounds (rollback-excluded), ascending. */
66
98
  rounds: ReadonlyArray<CommittedRoundView>;
67
99
  round: number;
68
- report: ExecutionReport | null;
69
- deltas: ReadonlyArray<ObservationDelta>;
70
- /** The round's committed/effective outcome — `blocked` closes its contract. */
71
- outcome: string | null;
100
+ /** The single bundle for the round being evaluated. */
101
+ current: CurrentRoundFacts;
72
102
  commands: ReadonlyArray<CommandEvidencePolicy>;
73
103
  }): {
74
104
  contract: ActiveContractView | null;
@@ -1 +1 @@
1
- {"version":3,"file":"round-contract.d.ts","sourceRoot":"","sources":["../src/round-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EACf,qBAAqB,EACtB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAOzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAGlE,MAAM,WAAW,kBAAmB,SAAQ,oBAAoB;IAC9D,0DAA0D;IAC1D,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,EAAE,EAAE,MAAM,CAAC;IACX;sCACkC;IAClC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B;yCACqC;IACrC,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChD;AAED;6DAC6D;AAC7D,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,qBAAqB,EAC/B,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE;IAAE,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,EAClE,MAAM,EAAE,MAAM,GACb,kBAAkB,CAgBpB;AAED;;gCAEgC;AAChC,wBAAgB,YAAY,CAC1B,IAAI,EAAE,qBAAqB,EAC3B,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAET;AAED,2EAA2E;AAC3E,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,aAAa,CAAC,kBAAkB,CAAC,EACzC,QAAQ,GAAE,aAAa,CAAC,qBAAqB,CAAuC,GACnF,kBAAkB,GAAG,IAAI,CAmC3B;AAED,mEAAmE;AACnE,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAQ3E;AAED;;;;;;;;;;;;;mDAamD;AACnD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,uDAAuD;IACvD,MAAM,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACxC,+EAA+E;IAC/E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;CAChD,GAAG;IAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,sBAAsB,CAAA;CAAE,CAe5E"}
1
+ {"version":3,"file":"round-contract.d.ts","sourceRoot":"","sources":["../src/round-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACtB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAQzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAIlE,MAAM,WAAW,kBAAmB,SAAQ,oBAAoB;IAC9D,0DAA0D;IAC1D,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,EAAE,EAAE,MAAM,CAAC;IACX;sCACkC;IAClC,iBAAiB,EAAE,MAAM,CAAC;IAC1B;yEACqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;mEAC+D;IAC/D,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B;yCACqC;IACrC,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChD;AAED;6DAC6D;AAC7D,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,qBAAqB,EAC/B,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE;IAAE,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,EAClE,MAAM,EAAE,MAAM,GACb,kBAAkB,CAepB;AAED;;gCAEgC;AAChC,wBAAgB,YAAY,CAC1B,IAAI,EAAE,qBAAqB,EAC3B,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAET;AAED;;;0DAG0D;AAC1D,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACxC,kEAAkE;IAClE,OAAO,EAAE,OAAO,CAAC;IACjB;yCACqC;IACrC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACpC;AAED,eAAO,MAAM,sBAAsB,EAAE,iBAKpC,CAAC;AAEF;;qBAEqB;AACrB,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,GAAG,iBAAiB,CAS/E;AAED;;;wBAGwB;AACxB,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,qBAAqB,EAC/B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAUT;AAED,2EAA2E;AAC3E,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,aAAa,CAAC,kBAAkB,CAAC,EACzC,QAAQ,GAAE,aAAa,CAAC,qBAAqB,CAAuC,GACnF,kBAAkB,GAAG,IAAI,CA4C3B;AAED;;;;;;;;;;;;;mDAamD;AACnD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,uDAAuD;IACvD,MAAM,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,OAAO,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;CAChD,GAAG;IAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,sBAAsB,CAAA;CAAE,CAgB5E"}
@@ -1,4 +1,10 @@
1
1
  /** Round Contract derivation — the ACTIVE contract a round executes under.
2
+ *
3
+ * v3.9.5 semantics: `work_item` is the bounded deliverable this slice
4
+ * produces (an outcome, not an activity); `items[]` are acceptance
5
+ * conditions inside that slice; each item binds its own `verify_with`
6
+ * commands. The contract is verified only when every item is verified, so
7
+ * there is no work_item-level claim. A command may back several conditions.
2
8
  *
3
9
  * A submission's `round_contract` is a PROPOSAL for the next round. It
4
10
  * becomes ACTIVE only after the declaring round commits; the active contract
@@ -9,12 +15,14 @@
9
15
  *
10
16
  * v3.8 identity: `rc-` / `rci-` are derived from CONTENT ONLY (loop id +
11
17
  * canonical proposal), so restating an unchanged contract keeps the same
12
- * identity and the item ids the agent already cited. This is deliberately
18
+ * identity and the item ids the agent already cited. `rci-` is deliberately
19
+ * independent of `work_item`/`scope`, which stay slice-level labels. This is
13
20
  * the opposite of a SubGoal, whose id includes its declaration round.
14
21
  */
15
- import { canonicalContractText, deriveContractId, deriveContractItemIds, } from "./token-utils.js";
22
+ import { canonicalContractItemText, canonicalContractText, deriveContractId, deriveContractItemIds, } from "./token-utils.js";
16
23
  import { deriveContractItemStatuses } from "./contract-items.js";
17
24
  import { getPolicy } from "./policy.js";
25
+ import { declaresBlocked } from "./round-outcome.js";
18
26
  /** v3.8: Build the derived active contract from a committed proposal plus the
19
27
  * binding the runtime stamped when that round committed. */
20
28
  export function activateContract(proposal, declaredAtRound, binding, loopId) {
@@ -23,11 +31,10 @@ export function activateContract(proposal, declaredAtRound, binding, loopId) {
23
31
  id: deriveContractId(loopId, proposal),
24
32
  declared_at_round: declaredAtRound,
25
33
  work_item: proposal.work_item,
26
- scope: [...proposal.scope],
34
+ scope: [...(proposal.scope ?? [])],
27
35
  items: proposal.items.map((item, index) => ({
28
36
  description: item.description,
29
- criterion_refs: [...item.criterion_refs],
30
- subgoal_refs: [...item.subgoal_refs],
37
+ criterion_refs: [...(item.criterion_refs ?? [])],
31
38
  verify_with: [...item.verify_with],
32
39
  id: itemIds[index],
33
40
  })),
@@ -40,6 +47,40 @@ export function activateContract(proposal, declaredAtRound, binding, loopId) {
40
47
  export function sameContract(left, right) {
41
48
  return canonicalContractText(left) === canonicalContractText(right);
42
49
  }
50
+ export const NO_CURRENT_ROUND_FACTS = {
51
+ report: null,
52
+ deltas: [],
53
+ blocked: false,
54
+ redirect: null,
55
+ };
56
+ /** Read a committed view's current-round facts. Read views (audit/explain/
57
+ * receipt/round-facts) use this instead of hand-building `outcome`-only
58
+ * blocked flags. */
59
+ export function committedRoundFacts(view) {
60
+ return {
61
+ report: view.executionReport,
62
+ deltas: view.observationDelta,
63
+ blocked: view.evaluation
64
+ ? declaresBlocked(view.evaluation)
65
+ : view.agentOutcome === "blocked",
66
+ redirect: view.contractRedirect,
67
+ };
68
+ }
69
+ /** v4.0.6: The successor's acceptance CONTENT must actually change. A new
70
+ * work_item or scope label alone is not a new slice. Exported because the
71
+ * verification gate's `contract_successor_unchanged` check uses the SAME
72
+ * content identity. */
73
+ export function acceptanceItemsDiffer(proposal, active) {
74
+ const next = new Set(proposal.items.map((item) => canonicalContractItemText(item)));
75
+ const current = new Set(active.items.map((item) => canonicalContractItemText(item)));
76
+ if (next.size !== current.size)
77
+ return true;
78
+ for (const identity of next) {
79
+ if (!current.has(identity))
80
+ return true;
81
+ }
82
+ return false;
83
+ }
43
84
  /** v3.8: The active contract after replaying committed rounds in order. */
44
85
  export function deriveActiveRoundContract(rounds, commands = getPolicy().evidence.commands ?? []) {
45
86
  let active = null;
@@ -53,40 +94,38 @@ export function deriveActiveRoundContract(rounds, commands = getPolicy().evidenc
53
94
  active = activate();
54
95
  continue;
55
96
  }
56
- // A blocked round closes the active contract (existing semantics), and a
57
- // fully verified one does too. Order matters: blocked is checked first,
58
- // mirroring the historical walker.
59
- if (round.outcome === "blocked") {
60
- active = activate();
61
- continue;
62
- }
97
+ // The round's item closure under the same reducer every other consumer
98
+ // uses. The current slice is this committed round's own facts, so a
99
+ // blocked/superseded closure is attributed to the round that caused it.
63
100
  const statuses = deriveContractItemStatuses({
64
101
  contract: active,
65
- rounds: rounds.slice(0, index + 1),
66
- currentRound: round.round + 1,
67
- currentReport: null,
68
- currentDeltas: [],
102
+ rounds: rounds.slice(0, index),
103
+ currentRound: round.round,
104
+ currentReport: round.executionReport,
105
+ currentDeltas: round.observationDelta,
106
+ currentBlocked: round.evaluation
107
+ ? declaresBlocked(round.evaluation)
108
+ : round.agentOutcome === "blocked",
109
+ currentRedirect: round.contractRedirect,
69
110
  commands,
70
111
  });
71
- if (statuses.closure === "verified") {
112
+ if (statuses.closure === "blocked" || statuses.closure === "verified") {
72
113
  active = activate();
73
114
  continue;
74
115
  }
116
+ if (statuses.closure === "superseded") {
117
+ // The reducer already matched the transition target to THIS contract.
118
+ // Activate only a real successor with different acceptance content;
119
+ // abnormal data keeps the original active contract rather than losing it.
120
+ if (proposal && acceptanceItemsDiffer(proposal, active)) {
121
+ active = activate();
122
+ }
123
+ continue;
124
+ }
75
125
  // Otherwise the active contract stays; a different proposal is ignored.
76
126
  }
77
127
  return active;
78
128
  }
79
- /** v3.8: Every criterion id referenced by the contract's items. */
80
- export function contractCriterionIds(contract) {
81
- const ids = new Set();
82
- for (const item of contract.items) {
83
- for (const ref of item.criterion_refs) {
84
- if (/^cr-[a-f0-9]{8}$/.test(ref))
85
- ids.add(ref);
86
- }
87
- }
88
- return [...ids];
89
- }
90
129
  /** v3.8: The contract a round EXECUTED under, plus every item's status as of
91
130
  * that round — the ONE derivation the live coordinator, explain and audit
92
131
  * share, so the three can never disagree about what a round ran under.
@@ -110,9 +149,10 @@ export function deriveRoundContractView(input) {
110
149
  contract,
111
150
  rounds: prior,
112
151
  currentRound: input.round,
113
- currentReport: input.report,
114
- currentDeltas: input.deltas,
115
- currentOutcome: input.outcome,
152
+ currentReport: input.current.report,
153
+ currentDeltas: input.current.deltas,
154
+ currentBlocked: input.current.blocked,
155
+ currentRedirect: input.current.redirect,
116
156
  commands: input.commands,
117
157
  }),
118
158
  };
@@ -1 +1 @@
1
- {"version":3,"file":"round-contract.js","sourceRoot":"","sources":["../src/round-contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"round-contract.js","sourceRoot":"","sources":["../src/round-contract.ts"],"names":[],"mappings":"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"}
@@ -17,21 +17,23 @@
17
17
  * Persistence is owned by round-transaction.ts so reject paths remain
18
18
  * side-effect free and accepted decisions can be replayed idempotently.
19
19
  */
20
- import type { LoopStore, VaultEntry } from "./loop-store.js";
20
+ import type { LoopStore } from "./loop-store.js";
21
+ import { type CommittedHistory } from "./history.js";
21
22
  import type { MachineObservation } from "./protocol.js";
22
23
  import type { ObservationDelta } from "./evidence-provider.js";
23
- import type { SelfEvaluation, RoundVerificationStatus, StopReason, VerificationFlag } from "./protocol.js";
24
- import { type ContractItemStatusView } from "./contract-items.js";
24
+ import type { CheckpointRef, ContractSupersede, EvidencePosture, RoundOutcome, SelfEvaluation, StopReason, VerificationFlag, WorkspaceCheckpointManifest } from "./protocol.js";
25
+ import type { ContractItemStatusView } from "./contract-items.js";
25
26
  /** Input to a single round processing step. */
26
27
  export interface RoundProcessInput {
27
28
  loopId: string;
28
29
  task: string;
29
30
  currentRound: number;
30
31
  maxRounds: number;
32
+ /** v4.0.1: the pre-commit history loaded once by the advance path. When
33
+ * absent, this coordinator loads it itself (direct/library callers). */
34
+ history?: CommittedHistory;
31
35
  /** The agent's self-evaluation for this round. */
32
36
  selfEval: SelfEvaluation;
33
- /** The previous round's validated SelfEvaluation (null for round 1). */
34
- lastSelfEval?: SelfEvaluation;
35
37
  /** How many consecutive rounds have been rejected by enforcement. */
36
38
  consecutiveRejections: number;
37
39
  /** L4 (v3.7.x): which check rejected the previous round — lets uniform
@@ -41,94 +43,68 @@ export interface RoundProcessInput {
41
43
  evidenceDeltas?: ObservationDelta[];
42
44
  /** Full round-start observations for post-backtrack restore validation. */
43
45
  beforeEvidence?: MachineObservation[];
44
- /** Success values from already committed rounds. */
45
- successTrajectory?: boolean[];
46
- /** v2.13: Files from skipped backtrack rounds. Passed to verification
47
- * gate for post-backtrack workspace restore check. */
48
- backtrackSkippedFiles?: string[];
49
- /** M3 (v3.7.x): git fingerprint of each skipped file as recorded at its
50
- * failed round — machine proof of "untouched since the rollback" for
51
- * the restore check. */
52
- backtrackSkippedFingerprints?: Record<string, string>;
53
- /** v2.12: Git HEAD of the backtrack restore point. The verification gate
54
- * checks the workspace returns to this commit before accepting work. */
55
- backtrackTargetGitHead?: string;
56
- /** v3.9: files already dirty at that restore point (undefined = never
57
- * observed, so only HEAD can be judged). */
58
- backtrackTargetDirty?: string[];
46
+ /** The current in-flight transaction's automatic before-image (machine
47
+ * backtrack target mapping only; never a cognitive input). */
48
+ beforeCheckpoint?: CheckpointRef;
49
+ /** This submission's after observations, used to derive abandoned-file
50
+ * report facts. */
51
+ afterEvidence?: MachineObservation[];
52
+ /** Reads the target checkpoint manifest for machine backtrack target
53
+ * eligibility and skipped-file derivation. Provided by the transaction
54
+ * layer's checkpoint store. */
55
+ resolveCheckpointManifest?: (ref: CheckpointRef) => WorkspaceCheckpointManifest | null;
59
56
  /** v3.8.3: the trusted round-start fingerprint of every configured
60
57
  * command's entrypoint files, captured when this round was prepared. Only
61
58
  * the in-flight round has one — a round whose preparation predates the
62
59
  * baseline (or whose session lost it) simply runs without the absolute
63
60
  * arm and falls back to the git-delta rule. */
64
61
  entrypointTrust?: Record<string, string>;
62
+ /** v3.9.4: the persisted submitted-field manifest. The files-reconciliation
63
+ * gate uses the same `execution_report.files_changed` attempt basis as the
64
+ * receipt; undefined keeps the legacy "report exists" fallback. */
65
+ submittedFields?: string[];
65
66
  }
66
67
  /** Result of processing a round through the coordinator. */
67
68
  export interface RoundProcessResult {
68
69
  /** What the caller should do next. */
69
- action: "continue" | "stop" | "reject" | "terminate" | "backtrack";
70
+ action: "continue" | "stop" | "reject" | "terminate" | "backtrack" | "recovery";
71
+ /** v3.9.6: who produced the disposition. Evaluations are ordinary work;
72
+ * machine/agent recoveries are rollback directives. */
73
+ origin?: "evaluation" | "machine" | "agent";
74
+ /** v3.9.6: machine failure reason or agent recovery reason. */
75
+ reason?: string;
76
+ /** v3.9.6: committed rollback directive facts. */
77
+ recovery?: import("./protocol.js").RecoveryDirective;
70
78
  /** Reason for stop (set when action is "stop" or "terminate"). */
71
79
  stopReason?: StopReason;
72
80
  /** Rejection prompt (set when action is "reject"). */
73
81
  rejectionPrompt?: string;
74
- /** v2.10: Backtrack prompt (set when action is "backtrack"). */
75
- backtrackPrompt?: string;
76
- /** v2.10: Round to restore state from (set when action is "backtrack"). */
77
- backtrackTarget?: number;
78
- /** v2.10: Discovered constraints from skipped rounds to preserve. */
79
- backtrackSkippedDiscoveries?: string[];
80
- /** v2.10: Which enforcement rule triggered the backtrack. */
81
- backtrackTriggerRule?: string;
82
- /** v3.7.1: Rounds rolled back (exclusive range above the restore point).
83
- * Derived from committed facts + the in-flight attempt — rejected
84
- * payloads are not durable history and never become a source. */
85
- backtrackFailedRounds?: number[];
86
- /** v3.7.1: One approach per failed round (committed output_summary or the
87
- * in-flight attempt's), truncated — what must NOT be repeated. */
88
- backtrackApproaches?: string[];
89
- /** v3.7.1: Falsified assumptions from the failed rounds. */
90
- backtrackWrongAssumptions?: string[];
91
- /** M3 (v3.7.x): per-file git fingerprint at the failed round — lets the
92
- * restore check prove a skipped file was never touched since the rollback. */
93
- backtrackSkippedFingerprints?: Record<string, string>;
94
82
  /** Verification flags from this round (for injection into next prompt). */
95
83
  verificationFlags: VerificationFlag[];
96
84
  /** Enforcement action for observability. */
97
- enforcementAction?: "accept" | "reject" | "terminate" | "backtrack";
85
+ enforcementAction?: "accept" | "reject" | "terminate" | "backtrack" | "recovery";
98
86
  /** Enforcement reason (set when rejected or terminated). */
99
87
  enforcementReason?: string;
100
- /** Whether this round was successful (from selfEval.success). */
101
- roundSuccess: boolean;
88
+ /** v4.0.3/v4.0.6: the Agent's success claim — a derived projection of
89
+ * `outcome === "success"`, never a machine verdict and never an input
90
+ * field. */
91
+ agentSuccessClaim: boolean;
92
+ /** v4.0.6: the Agent-declared outcome; null only for a rollback directive. */
93
+ agentOutcome: RoundOutcome | null;
102
94
  /** Whether the verification gate returned "contradicted". */
103
95
  gateContradicted: boolean;
104
- /** v3.8: The round-level verification posture, derived from the ACTIVE
105
- * contract's item statuses and this round's claims: `trusted` (everything
106
- * claimed is machine-backed), `insufficient` (claims unbacked, nothing
107
- * contradicted), `contradicted` (a machine fact denies a claim). */
108
- verificationStatus: RoundVerificationStatus;
96
+ /** v4.0.3: the ONE evidence posture, derived once per round and persisted
97
+ * with the accepted transaction. Rejected/terminated attempts carry a
98
+ * transient posture that never enters the Vault. */
99
+ evidencePosture: EvidencePosture;
109
100
  /** Updated consecutiveRejections count — caller must persist. */
110
101
  newConsecutiveRejections: number;
111
102
  /** Which enforcement check fired (set when action is "reject" or "terminate").
112
103
  * Used by callers to track per-rule rejection counters. */
113
104
  rejectionCheck?: string;
114
- /** The selfEval to store as lastSelfEval for the next round
115
- * (undefined when action is "reject" — caller should NOT update). */
116
- newLastSelfEval?: SelfEvaluation;
117
- /** Whether the caller should push roundSuccess onto the success trajectory.
105
+ /** Whether the caller should push agentSuccessClaim onto the success trajectory.
118
106
  * false when gateContradicted or when action is "reject". */
119
107
  shouldPushSuccessTrajectory: boolean;
120
- /** v2.13: Git HEAD commit hash of the backtrack target round.
121
- * Set when action is "backtrack". The verification gate uses this
122
- * to check that the agent restored the workspace before working. */
123
- backtrackTargetGitHead?: string;
124
- /** v3.9: Files already dirty at the backtrack target round. The restore
125
- * check requires the workspace's dirty set to be a subset of this
126
- * baseline — unrelated work in progress is not a failed restore. */
127
- backtrackTargetDirty?: string[];
128
- /** v2.13: Files changed in skipped rounds during backtrack.
129
- * The next round's verification gate checks that these files are
130
- * not still dirty (agent must restore workspace first). */
131
- backtrackSkippedFiles?: string[];
132
108
  }
133
109
  /** v3.8.3: Completion truth as a guard, not a convention.
134
110
  *
@@ -153,35 +129,13 @@ export interface RoundProcessResult {
153
129
  export declare function finalizeStopReason(
154
130
  /** `undefined` when the disposition named no terminal reason at all (the
155
131
  * callers fall back to their own default) — there is nothing to guard. */
156
- reason: StopReason | undefined, selfEval: SelfEvaluation, contractStatuses?: ContractItemStatusView | null): {
132
+ reason: StopReason | undefined, selfEval: SelfEvaluation, contractStatuses?: ContractItemStatusView | null,
133
+ /** v3.9.9/v4.0.6: the current round's redirect. A committed redirect can
134
+ * never produce `completed` even if the old items were all verified. */
135
+ redirect?: ContractSupersede | null): {
157
136
  reason: StopReason | undefined;
158
137
  flags: VerificationFlag[];
159
138
  };
160
- /** v3.8.1: The rolled-back branch's facts — the ONE derivation of which rounds
161
- * failed, which approaches must not be repeated, which assumptions were
162
- * falsified, and which files (with their failed-round git fingerprints) the
163
- * agent must restore.
164
- *
165
- * Sources are COMMITTED rounds above the restore point; rejected attempts are
166
- * not durable history and never become a source. The in-flight attempt that
167
- * triggered the rollback is the one exception — its evaluation lives in this
168
- * process, not in committed history.
169
- *
170
- * Extracted from the coordinator's inline walk so it is unit-testable without
171
- * driving a whole rollback, and so the prompt, the state file and the
172
- * committed decision all describe one event. */
173
- export declare function deriveBacktrackRecoveryFacts(input: {
174
- currentRound: number;
175
- restoreRound: number;
176
- vaultEntries: VaultEntry[];
177
- selfEval: SelfEvaluation;
178
- }): {
179
- skippedFiles: string[];
180
- skippedFingerprints: Record<string, string>;
181
- failedRounds: number[];
182
- approaches: string[];
183
- wrongAssumptions: string[];
184
- };
185
139
  export declare class RoundCoordinator {
186
140
  private store;
187
141
  constructor(store?: LoopStore);
@@ -1 +1 @@
1
- {"version":3,"file":"round-coordinator.d.ts","sourceRoot":"","sources":["../src/round-coordinator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"round-coordinator.d.ts","sourceRoot":"","sources":["../src/round-coordinator.ts"],"names":[],"mappings":"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"}