martin-loop 0.1.5 → 1.3.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.
- package/CODE_OF_CONDUCT.md +32 -0
- package/LICENSE +21 -21
- package/README.md +307 -398
- package/demo/seeded-workspace/README.md +35 -35
- package/demo/seeded-workspace/TASKS.md +29 -29
- package/demo/seeded-workspace/martin.config.yaml +11 -11
- package/demo/seeded-workspace/package.json +8 -8
- package/demo/seeded-workspace/src/invoice-summary.js +11 -11
- package/demo/seeded-workspace/test/invoice-summary.test.js +20 -20
- package/dist/bin/martin-loop.js +0 -0
- package/dist/vendor/adapters/counter.d.ts +1 -0
- package/dist/vendor/adapters/counter.js +4 -0
- package/dist/vendor/adapters/git-baseline.d.ts +50 -0
- package/dist/vendor/adapters/git-baseline.js +233 -0
- package/dist/vendor/adapters/openrouter-adapter.d.ts +15 -0
- package/dist/vendor/adapters/openrouter-adapter.js +302 -0
- package/dist/vendor/adapters/usage.d.ts +48 -0
- package/dist/vendor/adapters/usage.js +66 -0
- package/dist/vendor/cli/bin/exit.d.ts +12 -0
- package/dist/vendor/cli/bin/exit.js +28 -0
- package/dist/vendor/cli/commands/analyze.d.ts +5 -0
- package/dist/vendor/cli/commands/analyze.js +58 -0
- package/dist/vendor/cli/commands/audit-log-verify.d.ts +34 -0
- package/dist/vendor/cli/commands/audit-log-verify.js +99 -0
- package/dist/vendor/cli/commands/audit.d.ts +8 -0
- package/dist/vendor/cli/commands/audit.js +199 -0
- package/dist/vendor/cli/commands/corpus.d.ts +5 -0
- package/dist/vendor/cli/commands/corpus.js +60 -0
- package/dist/vendor/cli/commands/doctor.d.ts +8 -0
- package/dist/vendor/cli/commands/doctor.js +219 -0
- package/dist/vendor/cli/commands/explain.d.ts +17 -0
- package/dist/vendor/cli/commands/explain.js +176 -0
- package/dist/vendor/cli/commands/export.d.ts +5 -0
- package/dist/vendor/cli/commands/export.js +60 -0
- package/dist/vendor/cli/commands/governance.d.ts +8 -0
- package/dist/vendor/cli/commands/governance.js +95 -0
- package/dist/vendor/cli/commands/improve.d.ts +18 -0
- package/dist/vendor/cli/commands/improve.js +396 -0
- package/dist/vendor/cli/commands/init.d.ts +8 -0
- package/dist/vendor/cli/commands/init.js +281 -0
- package/dist/vendor/cli/commands/migration.d.ts +8 -0
- package/dist/vendor/cli/commands/migration.js +67 -0
- package/dist/vendor/cli/commands/prior.d.ts +23 -0
- package/dist/vendor/cli/commands/prior.js +145 -0
- package/dist/vendor/cli/commands/resume.d.ts +21 -0
- package/dist/vendor/cli/commands/resume.js +73 -0
- package/dist/vendor/cli/commands/verify.d.ts +6 -0
- package/dist/vendor/cli/commands/verify.js +43 -0
- package/dist/vendor/cli/research/public-corpus.d.ts +43 -0
- package/dist/vendor/cli/research/public-corpus.js +151 -0
- package/dist/vendor/cli/ui/error-card.d.ts +38 -0
- package/dist/vendor/cli/ui/error-card.js +103 -0
- package/dist/vendor/cli/ui/mission-brief.d.ts +41 -0
- package/dist/vendor/cli/ui/mission-brief.js +173 -0
- package/dist/vendor/cli/ui/summary-card.d.ts +34 -0
- package/dist/vendor/cli/ui/summary-card.js +102 -0
- package/dist/vendor/contracts/audit.d.ts +46 -0
- package/dist/vendor/contracts/audit.js +360 -0
- package/dist/vendor/contracts/post-phase15.d.ts +240 -0
- package/dist/vendor/contracts/post-phase15.js +166 -0
- package/dist/vendor/core/agent/mandates.d.ts +46 -0
- package/dist/vendor/core/agent/mandates.js +178 -0
- package/dist/vendor/core/agent/receipts.d.ts +38 -0
- package/dist/vendor/core/agent/receipts.js +131 -0
- package/dist/vendor/core/agent/signing.d.ts +17 -0
- package/dist/vendor/core/agent/signing.js +91 -0
- package/dist/vendor/core/attestation/sign.d.ts +25 -0
- package/dist/vendor/core/attestation/sign.js +216 -0
- package/dist/vendor/core/autonomy/autonomous-promotion.d.ts +120 -0
- package/dist/vendor/core/autonomy/autonomous-promotion.js +346 -0
- package/dist/vendor/core/autonomy/envelope-v2.d.ts +29 -0
- package/dist/vendor/core/autonomy/envelope-v2.js +60 -0
- package/dist/vendor/core/autonomy/envelope.d.ts +17 -0
- package/dist/vendor/core/autonomy/envelope.js +27 -0
- package/dist/vendor/core/autonomy/escalation-ledger.d.ts +20 -0
- package/dist/vendor/core/autonomy/escalation-ledger.js +18 -0
- package/dist/vendor/core/autonomy/resume.d.ts +15 -0
- package/dist/vendor/core/autonomy/resume.js +23 -0
- package/dist/vendor/core/circuit/circuit-breaker.d.ts +60 -0
- package/dist/vendor/core/circuit/circuit-breaker.js +143 -0
- package/dist/vendor/core/context-distillation.d.ts +3 -0
- package/dist/vendor/core/context-distillation.js +44 -0
- package/dist/vendor/core/context-flow/compile-context.d.ts +8 -0
- package/dist/vendor/core/context-flow/compile-context.js +111 -0
- package/dist/vendor/core/context-flow/entities.d.ts +2 -0
- package/dist/vendor/core/context-flow/entities.js +44 -0
- package/dist/vendor/core/context-flow/evaluate-policy.d.ts +2 -0
- package/dist/vendor/core/context-flow/evaluate-policy.js +42 -0
- package/dist/vendor/core/context-flow/index.d.ts +11 -0
- package/dist/vendor/core/context-flow/index.js +24 -0
- package/dist/vendor/core/context-flow/labels.d.ts +3 -0
- package/dist/vendor/core/context-flow/labels.js +17 -0
- package/dist/vendor/core/context-flow/normalizer.d.ts +9 -0
- package/dist/vendor/core/context-flow/normalizer.js +69 -0
- package/dist/vendor/core/context-flow/profiles.d.ts +33 -0
- package/dist/vendor/core/context-flow/profiles.js +36 -0
- package/dist/vendor/core/context-flow/redaction.d.ts +1 -0
- package/dist/vendor/core/context-flow/redaction.js +6 -0
- package/dist/vendor/core/context-flow/sensitivity.d.ts +2 -0
- package/dist/vendor/core/context-flow/sensitivity.js +27 -0
- package/dist/vendor/core/context-flow/sync-preview.d.ts +2 -0
- package/dist/vendor/core/context-flow/sync-preview.js +22 -0
- package/dist/vendor/core/context-flow/token-estimator.d.ts +3 -0
- package/dist/vendor/core/context-flow/token-estimator.js +13 -0
- package/dist/vendor/core/context-flow/types.d.ts +91 -0
- package/dist/vendor/core/context-flow/types.js +2 -0
- package/dist/vendor/core/context-utility.d.ts +47 -0
- package/dist/vendor/core/context-utility.js +405 -0
- package/dist/vendor/core/cost/pipeline.d.ts +92 -0
- package/dist/vendor/core/cost/pipeline.js +141 -0
- package/dist/vendor/core/cost/tagged-cost.d.ts +27 -0
- package/dist/vendor/core/cost/tagged-cost.js +55 -0
- package/dist/vendor/core/cost-governor.d.ts +2 -0
- package/dist/vendor/core/cost-governor.js +50 -0
- package/dist/vendor/core/cve/cve-check.d.ts +80 -0
- package/dist/vendor/core/cve/cve-check.js +172 -0
- package/dist/vendor/core/digital-twin/index.d.ts +27 -0
- package/dist/vendor/core/digital-twin/index.js +90 -0
- package/dist/vendor/core/drift/drift-graph.d.ts +47 -0
- package/dist/vendor/core/drift/drift-graph.js +100 -0
- package/dist/vendor/core/drift/objective-lock.d.ts +69 -0
- package/dist/vendor/core/drift/objective-lock.js +88 -0
- package/dist/vendor/core/drift/scope.d.ts +46 -0
- package/dist/vendor/core/drift/scope.js +102 -0
- package/dist/vendor/core/drift/signature-lock.d.ts +48 -0
- package/dist/vendor/core/drift/signature-lock.js +202 -0
- package/dist/vendor/core/drift/stale-proof-gate.d.ts +21 -0
- package/dist/vendor/core/drift/stale-proof-gate.js +19 -0
- package/dist/vendor/core/eval/known-bad-world-runner.d.ts +24 -0
- package/dist/vendor/core/eval/known-bad-world-runner.js +256 -0
- package/dist/vendor/core/evidence/claim-audit.d.ts +18 -0
- package/dist/vendor/core/evidence/claim-audit.js +89 -0
- package/dist/vendor/core/exit-intelligence.d.ts +2 -0
- package/dist/vendor/core/exit-intelligence.js +58 -0
- package/dist/vendor/core/explain/formatter.d.ts +42 -0
- package/dist/vendor/core/explain/formatter.js +171 -0
- package/dist/vendor/core/explain/timeline.d.ts +29 -0
- package/dist/vendor/core/explain/timeline.js +213 -0
- package/dist/vendor/core/failure-taxonomy.d.ts +2 -0
- package/dist/vendor/core/failure-taxonomy.js +76 -0
- package/dist/vendor/core/gateway/index.d.ts +10 -0
- package/dist/vendor/core/gateway/index.js +12 -0
- package/dist/vendor/core/gateway/registry.d.ts +40 -0
- package/dist/vendor/core/gateway/registry.js +97 -0
- package/dist/vendor/core/gateway/transport.d.ts +31 -0
- package/dist/vendor/core/gateway/transport.js +82 -0
- package/dist/vendor/core/gateway/vault.d.ts +19 -0
- package/dist/vendor/core/gateway/vault.js +29 -0
- package/dist/vendor/core/graph/adapters.d.ts +43 -0
- package/dist/vendor/core/graph/adapters.js +91 -0
- package/dist/vendor/core/graph/hotspots.d.ts +22 -0
- package/dist/vendor/core/graph/hotspots.js +30 -0
- package/dist/vendor/core/graph/index.d.ts +1 -0
- package/dist/vendor/core/graph/index.js +2 -0
- package/dist/vendor/core/honey/honey-tokens.d.ts +32 -0
- package/dist/vendor/core/honey/honey-tokens.js +44 -0
- package/dist/vendor/core/index.d.ts +2 -2
- package/dist/vendor/core/index.js +38 -12
- package/dist/vendor/core/learning/bayesian-update.d.ts +31 -0
- package/dist/vendor/core/learning/bayesian-update.js +60 -0
- package/dist/vendor/core/learning/prior-sets.d.ts +42 -0
- package/dist/vendor/core/learning/prior-sets.js +111 -0
- package/dist/vendor/core/learning/promotion-gate.d.ts +17 -0
- package/dist/vendor/core/learning/promotion-gate.js +23 -0
- package/dist/vendor/core/leash/blast-radius.d.ts +42 -0
- package/dist/vendor/core/leash/blast-radius.js +156 -0
- package/dist/vendor/core/leash/policy-leash.d.ts +31 -0
- package/dist/vendor/core/leash/policy-leash.js +117 -0
- package/dist/vendor/core/memo/memo.d.ts +63 -0
- package/dist/vendor/core/memo/memo.js +97 -0
- package/dist/vendor/core/memory/learning-pipeline.d.ts +154 -0
- package/dist/vendor/core/memory/learning-pipeline.js +391 -0
- package/dist/vendor/core/memory/palace.d.ts +84 -0
- package/dist/vendor/core/memory/palace.js +379 -0
- package/dist/vendor/core/merge/ast-merge.d.ts +22 -0
- package/dist/vendor/core/merge/ast-merge.js +350 -0
- package/dist/vendor/core/merge/text-merge.d.ts +12 -0
- package/dist/vendor/core/merge/text-merge.js +182 -0
- package/dist/vendor/core/otel/tracer.d.ts +45 -0
- package/dist/vendor/core/otel/tracer.js +116 -0
- package/dist/vendor/core/parallel/parallel-attempts.d.ts +28 -0
- package/dist/vendor/core/parallel/parallel-attempts.js +41 -0
- package/dist/vendor/core/parallel/scorer.d.ts +24 -0
- package/dist/vendor/core/parallel/scorer.js +65 -0
- package/dist/vendor/core/pattern-detection.d.ts +64 -0
- package/dist/vendor/core/pattern-detection.js +108 -0
- package/dist/vendor/core/persistence/checkpoint.d.ts +44 -0
- package/dist/vendor/core/persistence/checkpoint.js +156 -0
- package/dist/vendor/core/persistence/cleanup.d.ts +22 -0
- package/dist/vendor/core/persistence/cleanup.js +131 -0
- package/dist/vendor/core/persistence/index.d.ts +2 -0
- package/dist/vendor/core/persistence/index.js +1 -0
- package/dist/vendor/core/persistence/runs-reader.d.ts +52 -0
- package/dist/vendor/core/persistence/runs-reader.js +84 -0
- package/dist/vendor/core/persistence/store.d.ts +6 -1
- package/dist/vendor/core/persistence/store.js +5 -0
- package/dist/vendor/core/policy/file-touch-quota.d.ts +60 -0
- package/dist/vendor/core/policy/file-touch-quota.js +105 -0
- package/dist/vendor/core/policy/policy-loader.d.ts +30 -0
- package/dist/vendor/core/policy/policy-loader.js +170 -0
- package/dist/vendor/core/policy/policy-schema.d.ts +55 -0
- package/dist/vendor/core/policy/policy-schema.js +78 -0
- package/dist/vendor/core/probe/probe.d.ts +49 -0
- package/dist/vendor/core/probe/probe.js +115 -0
- package/dist/vendor/core/proof/patch-proof.d.ts +58 -0
- package/dist/vendor/core/proof/patch-proof.js +84 -0
- package/dist/vendor/core/proof/semantic-probe.d.ts +25 -0
- package/dist/vendor/core/proof/semantic-probe.js +82 -0
- package/dist/vendor/core/recovery/failure-mode-runner.d.ts +29 -0
- package/dist/vendor/core/recovery/failure-mode-runner.js +39 -0
- package/dist/vendor/core/red-blue/red-phase.d.ts +64 -0
- package/dist/vendor/core/red-blue/red-phase.js +141 -0
- package/dist/vendor/core/red-blue/risk-tiers.d.ts +22 -0
- package/dist/vendor/core/red-blue/risk-tiers.js +33 -0
- package/dist/vendor/core/replay/replay.d.ts +85 -0
- package/dist/vendor/core/replay/replay.js +109 -0
- package/dist/vendor/core/router/engine.d.ts +54 -0
- package/dist/vendor/core/router/engine.js +131 -0
- package/dist/vendor/core/router/index.d.ts +1 -0
- package/dist/vendor/core/router/index.js +2 -0
- package/dist/vendor/core/router/trust-calibration.d.ts +57 -0
- package/dist/vendor/core/router/trust-calibration.js +127 -0
- package/dist/vendor/core/run-martin.d.ts +2 -0
- package/dist/vendor/core/run-martin.js +287 -0
- package/dist/vendor/core/security/cve-scanner.d.ts +62 -0
- package/dist/vendor/core/security/cve-scanner.js +178 -0
- package/dist/vendor/core/sentinel/efficiency-sentinel.d.ts +29 -0
- package/dist/vendor/core/sentinel/efficiency-sentinel.js +30 -0
- package/dist/vendor/core/sentinel/progress-guard.d.ts +35 -0
- package/dist/vendor/core/sentinel/progress-guard.js +46 -0
- package/dist/vendor/core/siem/siem-emitter.d.ts +49 -0
- package/dist/vendor/core/siem/siem-emitter.js +157 -0
- package/dist/vendor/core/strategy/attempt-brief.d.ts +22 -0
- package/dist/vendor/core/strategy/attempt-brief.js +89 -0
- package/dist/vendor/core/summarize/diff-summary.d.ts +35 -0
- package/dist/vendor/core/summarize/diff-summary.js +204 -0
- package/dist/vendor/core/surface-signals.d.ts +21 -0
- package/dist/vendor/core/surface-signals.js +139 -0
- package/dist/vendor/core/truth/truth-wall.d.ts +51 -0
- package/dist/vendor/core/truth/truth-wall.js +69 -0
- package/dist/vendor/core/truth-spine.d.ts +26 -0
- package/dist/vendor/core/truth-spine.js +62 -0
- package/dist/vendor/core/types.d.ts +115 -0
- package/dist/vendor/core/types.js +2 -0
- package/dist/vendor/core/verification/tiered-verify.d.ts +17 -0
- package/dist/vendor/core/verification/tiered-verify.js +29 -0
- package/dist/vendor/core/verifier-pyramid.d.ts +32 -0
- package/dist/vendor/core/verifier-pyramid.js +111 -0
- package/dist/vendor/core/workflow-artifacts.d.ts +99 -0
- package/dist/vendor/core/workflow-artifacts.js +668 -0
- package/dist/vendor/core/wrap/supervised-run.d.ts +96 -0
- package/dist/vendor/core/wrap/supervised-run.js +178 -0
- package/docs/assets/cli-animated.svg +139 -0
- package/docs/assets/cli-static.svg +34 -0
- package/docs/assets/github-hero-v2.svg +23 -0
- package/docs/assets/martin-raplph.png.jpg +0 -0
- package/docs/assets/martinloop-logo.png +0 -0
- package/docs/assets/nvidia-inception-program-light.png +0 -0
- package/docs/assets/nvidia-inception-program.png +0 -0
- package/docs/assets/phase3c-sidesidebyside-demo.html +228 -0
- package/docs/assets/side-by-side.svg +134 -0
- package/docs/oss/CLAUDE-CODE-WALKTHROUGH.md +142 -142
- package/docs/oss/EXAMPLES.md +134 -134
- package/docs/oss/OSS-BOUNDARY-REPORT.json +1 -1
- package/docs/oss/OSS-BOUNDARY-REPORT.md +1 -1
- package/docs/oss/QUICKSTART.md +170 -165
- package/docs/oss/RALPH-LOOP-SAFETY.md +113 -113
- package/docs/oss/README.md +96 -96
- package/docs/oss/RELEASE-SURFACE-REPORT.json +2 -1
- package/docs/oss/RELEASE-SURFACE-REPORT.md +2 -1
- package/package.json +130 -58
- package/docs/distribution/DIRECTORY-SUBMISSIONS.md +0 -89
- package/docs/distribution/INTEGRATION-OUTREACH.md +0 -61
- package/docs/distribution/UNDER-3-CHALLENGE.md +0 -65
package/README.md
CHANGED
|
@@ -1,398 +1,307 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
|
58
|
-
|
|
59
|
-
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
-
|
|
84
|
-
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
pnpm --filter @
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
npm install
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
--
|
|
203
|
-
--
|
|
204
|
-
--
|
|
205
|
-
--
|
|
206
|
-
--
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
| `@martin/contracts` | Shared types for loops, policy, governance, budget, telemetry, and rollback. |
|
|
309
|
-
| `@martin/core` | Runtime controller, policy engine, safety leash, grounding, persistence, and rollback logic. |
|
|
310
|
-
| `@martin/adapters` | Claude CLI, Codex CLI, direct-provider, and stub adapter surfaces. |
|
|
311
|
-
| `@martin/cli` | Local CLI implementation for `run`, `inspect`, `resume`, and the benchmark redirect. |
|
|
312
|
-
| `@martinloop/mcp` | MCP server tools: `martin_run`, `martin_inspect`, and `martin_status`. |
|
|
313
|
-
| `benchmarks/` | Workspace-only deterministic benchmark and RC validation harness. |
|
|
314
|
-
| `apps/control-plane/` | Hosted control-plane workstream, outside the initial npm package surface. |
|
|
315
|
-
| `apps/local-dashboard/` | Local dashboard/read-model viewer, not currently packaged as public npm API. |
|
|
316
|
-
|
|
317
|
-
The `@martin/core`, `@martin/adapters`, and `@martin/contracts` package manifests are still private workspace packages. The public runtime install target is the root `martin-loop` facade, while `@martinloop/mcp` is packaged as a standalone MCP server with vendored internal runtime dependencies for registry publication.
|
|
318
|
-
|
|
319
|
-
---
|
|
320
|
-
## Development
|
|
321
|
-
|
|
322
|
-
Requirements:
|
|
323
|
-
|
|
324
|
-
- Node 20+
|
|
325
|
-
- pnpm 10.x
|
|
326
|
-
|
|
327
|
-
```bash
|
|
328
|
-
git clone https://github.com/Keesan12/martin-loop.git
|
|
329
|
-
cd martin-loop
|
|
330
|
-
pnpm install
|
|
331
|
-
|
|
332
|
-
pnpm test
|
|
333
|
-
pnpm lint
|
|
334
|
-
pnpm build
|
|
335
|
-
|
|
336
|
-
```
|
|
337
|
-
|
|
338
|
-
Current RC gate commands:
|
|
339
|
-
|
|
340
|
-
```sh
|
|
341
|
-
pnpm oss:validate
|
|
342
|
-
pnpm public:smoke
|
|
343
|
-
pnpm repo:smoke
|
|
344
|
-
pnpm rc:validate
|
|
345
|
-
pnpm pilot:prep:validate
|
|
346
|
-
pnpm release:matrix:local
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
> **Caution:** This package is live on npm. Treat registry publication as a guarded release step — verify the RC gate commands, confirm semantic versioning, and document breaking changes before publishing.
|
|
350
|
-
|
|
351
|
-
The repository is organized as a dual-track workspace: the OSS runtime and package facade are present and published, while the hosted control-plane, local dashboard, and benchmark harness remain gated in private workspace for future release rather than the primary npm package API.
|
|
352
|
-
|
|
353
|
-
Helpful docs:
|
|
354
|
-
|
|
355
|
-
- [OSS quickstart](./docs/oss/QUICKSTART.md)
|
|
356
|
-
- [OSS examples](./docs/oss/EXAMPLES.md)
|
|
357
|
-
- [Under-$3 benchmark challenge](./docs/distribution/UNDER-3-CHALLENGE.md)
|
|
358
|
-
- [Directory submission pack](./docs/distribution/DIRECTORY-SUBMISSIONS.md)
|
|
359
|
-
- [Integration outreach pack](./docs/distribution/INTEGRATION-OUTREACH.md)
|
|
360
|
-
- [Claude Code walkthrough](./docs/oss/CLAUDE-CODE-WALKTHROUGH.md)
|
|
361
|
-
- [Ralph-style loop safety guide](./docs/oss/RALPH-LOOP-SAFETY.md)
|
|
362
|
-
- [OSS boundary report](./docs/oss/OSS-BOUNDARY-REPORT.md)
|
|
363
|
-
- [Release surface report](./docs/oss/RELEASE-SURFACE-REPORT.md)
|
|
364
|
-
|
|
365
|
-
---
|
|
366
|
-
|
|
367
|
-
## Contributing
|
|
368
|
-
|
|
369
|
-
```sh
|
|
370
|
-
git checkout -b feat/your-feature
|
|
371
|
-
pnpm lint
|
|
372
|
-
pnpm test
|
|
373
|
-
git commit -m "feat: describe what you built"
|
|
374
|
-
git push -u origin feat/your-feature
|
|
375
|
-
```
|
|
376
|
-
|
|
377
|
-
Conventional commit prefixes: `feat:`, `fix:`, `chore:`, `docs:`, `refactor:`, and `test:`.
|
|
378
|
-
|
|
379
|
-
---
|
|
380
|
-
|
|
381
|
-
<div align="center">
|
|
382
|
-
|
|
383
|
-
**⭐Give the repo a star⭐** if you think AI coding needs budgets, brakes, and receipts.
|
|
384
|
-
|
|
385
|
-
**MIT Licensed** · [martinloop.com](https://martinloop.com) · [keesan@martinloop.com](mailto:keesan@martinloop.com)
|
|
386
|
-
|
|
387
|
-
*"AI coding accountability: completes good work, refuses unsafe work, stops uneconomical work."*
|
|
388
|
-
|
|
389
|
-
</div>
|
|
390
|
-
|
|
391
|
-
<div align="center">
|
|
392
|
-
<br>
|
|
393
|
-
<picture>
|
|
394
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/Keesan12/martin-loop/main/docs/assets/nvidia-inception-program.png">
|
|
395
|
-
<img src="https://raw.githubusercontent.com/Keesan12/martin-loop/main/docs/assets/nvidia-inception-program-light.png" alt="NVIDIA Inception Program logo" width="280">
|
|
396
|
-
</picture>
|
|
397
|
-
<br>
|
|
398
|
-
</div>
|
|
1
|
+
# Martin Loop
|
|
2
|
+
|
|
3
|
+
Governed runtime for AI coding agents with budgets, policy gates, rollback evidence, and auditable run records.
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
<picture>
|
|
8
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/Keesan12/martin-loop/main/docs/assets/nvidia-inception-program.png" />
|
|
9
|
+
<img src="https://raw.githubusercontent.com/Keesan12/martin-loop/main/docs/assets/nvidia-inception-program-light.png" alt="NVIDIA Inception Program logo" width="280" />
|
|
10
|
+
</picture>
|
|
11
|
+
|
|
12
|
+
Martin Loop has been accepted into the NVIDIA Inception program.
|
|
13
|
+
|
|
14
|
+
[](./LICENSE)
|
|
15
|
+
[](./tsconfig.base.json)
|
|
16
|
+
[](./package.json)
|
|
17
|
+
|
|
18
|
+
AI coding agents can write files, run commands, spend provider budget, and leave behind hard-to-review state. Martin Loop wraps those actions in a runtime that answers five questions before you trust the result:
|
|
19
|
+
|
|
20
|
+
- What is the task allowed to touch?
|
|
21
|
+
- What is the hard budget?
|
|
22
|
+
- Which safety and policy gates ran?
|
|
23
|
+
- Did the verifier actually execute?
|
|
24
|
+
- Where is the evidence if the result needs review, rollback, or resume?
|
|
25
|
+
|
|
26
|
+
Current public wording should describe Martin Loop as a **bounded governed AI-coding runtime**, not as a hands-off unrestricted production developer or broadly self-updating system. Trace-autonomy certification exists as a gate, but public trace-autonomy wording remains blocked until the signed evidence pack and external audit signoff pass.
|
|
27
|
+
|
|
28
|
+
## Release State
|
|
29
|
+
|
|
30
|
+
- Phase 14 staged pilot: closed
|
|
31
|
+
- Phase 15 public release: active
|
|
32
|
+
- Phase 15 adds release-specific truth, packaging, and final-gate checks on top of this baseline.
|
|
33
|
+
|
|
34
|
+
## Why It Exists
|
|
35
|
+
|
|
36
|
+
| Risk in agentic coding loops | Martin Loop control |
|
|
37
|
+
|---|---|
|
|
38
|
+
| Retry loops can spend without a hard stop | Budget admission checks, soft limits, hard USD caps, iteration caps, and token caps |
|
|
39
|
+
| Agents can mutate the wrong surface | Task contracts, allowed paths, denied paths, policy leashes, and rollback evidence |
|
|
40
|
+
| "Verifier passed" can hide that no verifier ran | Verifier lifecycle state, failure taxonomy, and machine-readable exit reasons |
|
|
41
|
+
| Failure evidence is easy to lose | Canonical run records, ledger events, receipts, and handoff artifacts |
|
|
42
|
+
| Operators need proof before widening claims | Claim linting, release gates, audit packs, and signed autonomy certification artifacts |
|
|
43
|
+
|
|
44
|
+
Martin Loop does not replace Claude, Codex, or other coding agents. It gives those agents an operating envelope.
|
|
45
|
+
|
|
46
|
+

|
|
47
|
+
|
|
48
|
+
## What It Does Today
|
|
49
|
+
|
|
50
|
+
| Capability | Current behavior |
|
|
51
|
+
|---|---|
|
|
52
|
+
| Budget governance | Enforces `maxUsd`, `softLimitUsd`, `maxIterations`, and `maxTokens`; rejects attempts projected to exceed remaining budget. |
|
|
53
|
+
| Safety leash | Blocks unsafe verifier commands, out-of-scope writes, secret-like task text, and policy-restricted surfaces before accepting work. |
|
|
54
|
+
| Adapter execution | Normalizes Claude CLI, Codex CLI, direct-provider, and stub execution into one runtime result contract. |
|
|
55
|
+
| Verification gate | A run reaches `completed` only when adapter execution and verifier state both support the result. |
|
|
56
|
+
| Rollback evidence | Captures rollback boundaries and restore outcomes for repo-backed attempts when persistence is configured. |
|
|
57
|
+
| Trace intelligence | Reads run ledgers and reports loop patterns such as recovery exhaustion, verifier blind spots, oscillation, and budget pressure. |
|
|
58
|
+
| Guarded improvement | Emits improvement evidence and promotion artifacts; trusted-surface promotion remains policy-gated and claim-safe. |
|
|
59
|
+
| MCP package | Provides a standalone `@martinloop/mcp` server with `martin_run`, `martin_inspect`, and `martin_status`. |
|
|
60
|
+
|
|
61
|
+
## Quick Start
|
|
62
|
+
|
|
63
|
+
Install the public package:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
npm install martin-loop
|
|
67
|
+
npx martin-loop --help
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Run a provider-free stub loop first:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
MARTIN_LIVE=false MARTIN_NO_BRIEF=1 npx martin-loop run --objective "Summarize this repository" --yes
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Run a governed task with budget and verifier controls:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npx martin-loop run \
|
|
80
|
+
--objective "Fix the auth regression" \
|
|
81
|
+
--budget 3.00 \
|
|
82
|
+
--verify "pnpm test" \
|
|
83
|
+
--allow-path "src/**" \
|
|
84
|
+
--deny-path ".env*"
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Inspect a persisted run record:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
npx martin-loop inspect --file ~/.martin/runs/<workspaceId>.jsonl
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## MCP Server
|
|
94
|
+
|
|
95
|
+
Use the standalone MCP package when an MCP host needs to invoke Martin Loop:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
npx @martinloop/mcp
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Claude Code examples:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
claude mcp add --scope user martin-loop -- npx @martinloop/mcp
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Windows PowerShell or cmd:
|
|
108
|
+
|
|
109
|
+
```powershell
|
|
110
|
+
claude mcp add --scope user martin-loop cmd /c "npx @martinloop/mcp"
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
The standalone MCP package is intentionally narrow. It exposes:
|
|
114
|
+
|
|
115
|
+
- `martin_run`
|
|
116
|
+
- `martin_inspect`
|
|
117
|
+
- `martin_status`
|
|
118
|
+
|
|
119
|
+
Official registry publication is a guarded release step. The local package gate is:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
pnpm --filter @martinloop/mcp test
|
|
123
|
+
pnpm --filter @martinloop/mcp build
|
|
124
|
+
pnpm --filter @martinloop/mcp smoke:pack
|
|
125
|
+
pnpm --filter @martinloop/mcp smoke:published
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Public Package Surface
|
|
129
|
+
|
|
130
|
+
Frozen public install targets:
|
|
131
|
+
|
|
132
|
+
- Install: `npm install martin-loop`
|
|
133
|
+
- CLI: `npx martin-loop`
|
|
134
|
+
- SDK: `import { MartinLoop } from "martin-loop"`
|
|
135
|
+
- MCP: `npx @martinloop/mcp`
|
|
136
|
+
|
|
137
|
+
The root package facade vendors the runtime, adapters, CLI, SDK, contracts, policy, audit exporter, and HeadlessOS core into `dist/`. Internal workspace package names such as `@martin/core` and `@martin/adapters` are implementation details unless separately published.
|
|
138
|
+
|
|
139
|
+
## TypeScript SDK
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
import {
|
|
143
|
+
MartinLoop,
|
|
144
|
+
createClaudeCliAdapter,
|
|
145
|
+
createCodexCliAdapter,
|
|
146
|
+
runMartin
|
|
147
|
+
} from "martin-loop";
|
|
148
|
+
|
|
149
|
+
const loop = new MartinLoop({
|
|
150
|
+
adapter: createClaudeCliAdapter({ workingDirectory: process.cwd() }),
|
|
151
|
+
defaults: {
|
|
152
|
+
workspaceId: "my-workspace",
|
|
153
|
+
projectId: "my-project",
|
|
154
|
+
budget: {
|
|
155
|
+
maxUsd: 3.00,
|
|
156
|
+
softLimitUsd: 2.25,
|
|
157
|
+
maxIterations: 3,
|
|
158
|
+
maxTokens: 20000
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
const result = await loop.run({
|
|
164
|
+
task: {
|
|
165
|
+
title: "Fix auth regression",
|
|
166
|
+
objective: "Fix the failing auth regression tests",
|
|
167
|
+
verificationPlan: ["pnpm test"],
|
|
168
|
+
repoRoot: process.cwd()
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
console.log(result.decision.status);
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Use Codex instead of Claude by swapping adapters:
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
const loop = new MartinLoop({
|
|
179
|
+
adapter: createCodexCliAdapter({ workingDirectory: process.cwd() })
|
|
180
|
+
});
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
`runMartin` is also exported for callers that want to assemble runtime input directly.
|
|
184
|
+
|
|
185
|
+
## CLI Reference
|
|
186
|
+
|
|
187
|
+
```text
|
|
188
|
+
martin-loop run <objective> [options]
|
|
189
|
+
|
|
190
|
+
--objective <text> Task to accomplish, or pass it as the first positional arg
|
|
191
|
+
--budget <n> Hard cost cap in USD
|
|
192
|
+
--budget-usd <n> Alias for --budget
|
|
193
|
+
--soft-limit-usd <n> Soft budget threshold in USD
|
|
194
|
+
--verify <cmd> Verifier command after each attempt
|
|
195
|
+
--max-iterations <n> Maximum number of attempts
|
|
196
|
+
--max-tokens <n> Maximum total token budget
|
|
197
|
+
--engine <name> Adapter to use: claude or codex
|
|
198
|
+
--model <name> Adapter model override
|
|
199
|
+
--cwd <path> Repo root for the run
|
|
200
|
+
--allow-path <glob> Restrict agent writes to this path pattern; repeatable
|
|
201
|
+
--deny-path <glob> Block this path pattern; repeatable
|
|
202
|
+
--accept <criterion> Acceptance criterion; repeatable
|
|
203
|
+
--config <path> Path to martin.config.yaml
|
|
204
|
+
--workspace <id> Workspace ID for the run record
|
|
205
|
+
--project <id> Project ID for the run record
|
|
206
|
+
--metadata <key=value> Attach metadata to the run record; repeatable
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
The public CLI also includes `inspect`, `resume`, and a `bench` redirect that points reviewers to the workspace benchmark harness.
|
|
210
|
+
|
|
211
|
+
## Configuration
|
|
212
|
+
|
|
213
|
+
Drop a `martin.config.yaml` in the repo root to set governance defaults:
|
|
214
|
+
|
|
215
|
+
```yaml
|
|
216
|
+
budget:
|
|
217
|
+
maxUsd: 5.00
|
|
218
|
+
softLimitUsd: 3.75
|
|
219
|
+
maxIterations: 5
|
|
220
|
+
maxTokens: 40000
|
|
221
|
+
|
|
222
|
+
governance:
|
|
223
|
+
destructiveActionPolicy: approval
|
|
224
|
+
telemetryDestination: local-only
|
|
225
|
+
verifierRules:
|
|
226
|
+
- pnpm test
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
CLI flags override config values when provided.
|
|
230
|
+
|
|
231
|
+
## Claim Boundaries
|
|
232
|
+
|
|
233
|
+
Martin Loop has implemented guarded learning, signed promotion artifacts, trace-autonomy certification tooling, and fail-closed claim gates. That is not the same as an unrestricted self-modifying production system.
|
|
234
|
+
|
|
235
|
+
Do not use unqualified public wording for full hands-off operation, unrestricted system writes, any-part self-updates, fully self-learning behavior, or improvement claims without scope and evidence qualifiers.
|
|
236
|
+
|
|
237
|
+
The bounded future trace-intelligence claim is allowed only after the trace-autonomy certification gate, signed bundle, required live evidence, and external audit signoff pass.
|
|
238
|
+
|
|
239
|
+
## Development
|
|
240
|
+
|
|
241
|
+
Requirements:
|
|
242
|
+
|
|
243
|
+
- Node 20+
|
|
244
|
+
- pnpm 10.x
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
git clone https://github.com/Keesan12/martin-loop.git
|
|
248
|
+
cd martin-loop
|
|
249
|
+
pnpm install
|
|
250
|
+
pnpm build
|
|
251
|
+
pnpm test
|
|
252
|
+
pnpm lint
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
Release and claim gates:
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
pnpm oss:validate
|
|
259
|
+
pnpm release:surface:validate
|
|
260
|
+
pnpm public:smoke
|
|
261
|
+
pnpm mcp:published:smoke
|
|
262
|
+
pnpm repo:smoke
|
|
263
|
+
pnpm rc:validate
|
|
264
|
+
pnpm pilot:prep:validate
|
|
265
|
+
pnpm claims:lint
|
|
266
|
+
pnpm release:gate:review
|
|
267
|
+
pnpm release:matrix:local
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
Useful evidence docs:
|
|
271
|
+
|
|
272
|
+
- [OSS quickstart](./docs/oss/QUICKSTART.md)
|
|
273
|
+
- [OSS examples](./docs/oss/EXAMPLES.md)
|
|
274
|
+
- [OSS boundary report](./docs/oss/OSS-BOUNDARY-REPORT.md)
|
|
275
|
+
- [Release surface report](./docs/oss/RELEASE-SURFACE-REPORT.md)
|
|
276
|
+
- [Release gate review](./docs/release/RELEASE-GATE-REVIEW.md)
|
|
277
|
+
- [Phase 3 autonomy handoff](./docs/handoffs/2026-05-07-phase3-autonomy-implementation-handoff.md)
|
|
278
|
+
|
|
279
|
+
## Workspace Map
|
|
280
|
+
|
|
281
|
+
| Package or app | Role |
|
|
282
|
+
|---|---|
|
|
283
|
+
| `martin-loop` | Root public npm facade that vendors the runtime, CLI, adapters, SDK, contracts, and policy into `dist/`. |
|
|
284
|
+
| `@martin/core` | Runtime controller, policy engine, safety leash, grounding, persistence, rollback, and autonomy primitives. |
|
|
285
|
+
| `@martin/adapters` | Claude CLI, Codex CLI, direct-provider, and stub adapter surfaces. |
|
|
286
|
+
| `@martin/cli` | Local CLI implementation for `run`, `inspect`, `resume`, `verify`, `audit`, `doctor`, `explain`, and improvement flows. |
|
|
287
|
+
| `@martin/trace-intelligence` | Run-ledger analysis, trace pattern detection, improvement tasks, and trace-autonomy certification. |
|
|
288
|
+
| `@martinloop/mcp` | Standalone MCP server package for `martin_run`, `martin_inspect`, and `martin_status`. |
|
|
289
|
+
| `apps/control-plane` | Hosted/operator control-plane workstream, outside the initial npm package surface. |
|
|
290
|
+
| `apps/local-dashboard` | Local read-model viewer, not currently packaged as public npm API. |
|
|
291
|
+
| `benchmarks` | Workspace-only deterministic benchmark and RC validation harness. |
|
|
292
|
+
|
|
293
|
+
## Contributing
|
|
294
|
+
|
|
295
|
+
```bash
|
|
296
|
+
git checkout -b feat/your-feature
|
|
297
|
+
pnpm lint
|
|
298
|
+
pnpm test
|
|
299
|
+
git commit -m "feat: describe what you built"
|
|
300
|
+
git push -u origin feat/your-feature
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
Use conventional commit prefixes such as `feat:`, `fix:`, `docs:`, `test:`, `refactor:`, and `chore:`.
|
|
304
|
+
|
|
305
|
+
## License
|
|
306
|
+
|
|
307
|
+
MIT. See [LICENSE](./LICENSE).
|