martin-loop 0.1.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/README.md +89 -0
- package/dist/bin/martin-loop.d.ts +2 -0
- package/dist/bin/martin-loop.js +19 -0
- package/dist/bin/martin-loop.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/docs/EXAMPLES.md +96 -0
- package/docs/QUICKSTART.md +127 -0
- package/docs/README.md +89 -0
- package/docs/release/CLAIM-TO-CAPABILITY.md +19 -0
- package/package.json +64 -0
package/README.md
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Martin Loop
|
|
2
|
+
|
|
3
|
+
Governed AI coding runtime with hard budget controls, grounding enforcement, rollback, and a persistent audit trail.
|
|
4
|
+
|
|
5
|
+
## What is validated in this repo
|
|
6
|
+
|
|
7
|
+
- `@martin/core`: runtime controller, policy engine, grounding, leash, rollback
|
|
8
|
+
- `@martin/contracts`: shared types for loop, failure, budget, and grounding
|
|
9
|
+
- `@martin/adapters`: Claude CLI, Codex CLI, and direct-provider adapters
|
|
10
|
+
- `@martin/cli`: repo-local `martin` CLI
|
|
11
|
+
- `@martin/mcp`: MCP server surface
|
|
12
|
+
- `@martin/sdk`: governance, handoff, and migration primitives
|
|
13
|
+
|
|
14
|
+
The workspace packages are validated in this snapshot. Public `martin-loop` packaging remains later release work and should not be treated as the verified install path yet.
|
|
15
|
+
|
|
16
|
+
## Repo-local install
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
git clone https://github.com/martinloop/martin-loop
|
|
20
|
+
cd martin-loop
|
|
21
|
+
pnpm install
|
|
22
|
+
pnpm build
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Quick start
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
pnpm --filter @martin/cli exec martin run \
|
|
29
|
+
--objective "Repair the flaky auth test" \
|
|
30
|
+
--verify "pnpm test"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
pnpm --filter @martin/cli exec martin inspect --file ~/.martin/runs/latest/loop-record.json
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
See [docs/QUICKSTART.md](docs/QUICKSTART.md) for the fuller walkthrough and [docs/EXAMPLES.md](docs/EXAMPLES.md) for more runnable examples.
|
|
38
|
+
|
|
39
|
+
## Programmatic usage
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
import { runMartin } from "@martin/core";
|
|
43
|
+
|
|
44
|
+
const result = await runMartin({
|
|
45
|
+
workspaceId: "ws_local",
|
|
46
|
+
projectId: "proj_auth",
|
|
47
|
+
task: {
|
|
48
|
+
title: "Repair the flaky auth test",
|
|
49
|
+
objective: "Repair the flaky auth test without widening scope.",
|
|
50
|
+
verificationPlan: ["pnpm test"]
|
|
51
|
+
},
|
|
52
|
+
budget: {
|
|
53
|
+
maxUsd: 0.5,
|
|
54
|
+
softLimitUsd: 0.3,
|
|
55
|
+
maxIterations: 4,
|
|
56
|
+
maxTokens: 20_000
|
|
57
|
+
},
|
|
58
|
+
adapter
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
console.log(result.decision.lifecycleState);
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Validation
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
pnpm test
|
|
68
|
+
pnpm build
|
|
69
|
+
pnpm typecheck
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Artifacts
|
|
73
|
+
|
|
74
|
+
```text
|
|
75
|
+
~/.martin/runs/<run-id>/
|
|
76
|
+
contract.json
|
|
77
|
+
state.json
|
|
78
|
+
ledger.jsonl
|
|
79
|
+
artifacts/attempt-001/
|
|
80
|
+
diff.patch
|
|
81
|
+
grounding-scan.json
|
|
82
|
+
leash.json
|
|
83
|
+
patch-decision.json
|
|
84
|
+
rollback-outcome.json
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## License
|
|
88
|
+
|
|
89
|
+
MIT. See [LICENSE](LICENSE).
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { executeCli } from "@martin/cli";
|
|
3
|
+
const args = process.argv.slice(2);
|
|
4
|
+
executeCli(args)
|
|
5
|
+
.then((result) => {
|
|
6
|
+
if (result.stdout) {
|
|
7
|
+
process.stdout.write(`${result.stdout}\n`);
|
|
8
|
+
}
|
|
9
|
+
if (result.stderr) {
|
|
10
|
+
process.stderr.write(`${result.stderr}\n`);
|
|
11
|
+
}
|
|
12
|
+
process.exitCode = result.exitCode;
|
|
13
|
+
})
|
|
14
|
+
.catch((error) => {
|
|
15
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
16
|
+
process.stderr.write(`${message}\n`);
|
|
17
|
+
process.exitCode = 1;
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=martin-loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"martin-loop.js","sourceRoot":"","sources":["../../src/bin/martin-loop.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnC,UAAU,CAAC,IAAI,CAAC;KACb,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;IACf,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACrC,CAAC,CAAC;KACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { runMartin } from "@martin/core";
|
|
2
|
+
export * from "@martin/core";
|
|
3
|
+
export * from "@martin/adapters";
|
|
4
|
+
export * from "@martin/sdk";
|
|
5
|
+
export { executeCli, parseCliArguments, renderCliHelp } from "@martin/cli";
|
|
6
|
+
export declare const MartinLoop: {
|
|
7
|
+
run: typeof runMartin;
|
|
8
|
+
};
|
|
9
|
+
export type MartinLoopFacade = typeof MartinLoop;
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { runMartin } from "@martin/core";
|
|
2
|
+
export * from "@martin/core";
|
|
3
|
+
export * from "@martin/adapters";
|
|
4
|
+
export * from "@martin/sdk";
|
|
5
|
+
export { executeCli, parseCliArguments, renderCliHelp } from "@martin/cli";
|
|
6
|
+
export const MartinLoop = {
|
|
7
|
+
run: runMartin
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE3E,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,GAAG,EAAE,SAAS;CACf,CAAC"}
|
package/docs/EXAMPLES.md
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Examples
|
|
2
|
+
|
|
3
|
+
Runnable examples for the Martin Loop CLI and SDK.
|
|
4
|
+
|
|
5
|
+
## 1. Stub-backed hello world
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm --filter @martin/cli exec martin run \
|
|
9
|
+
--objective "Describe the current Martin run lifecycle" \
|
|
10
|
+
--verify "echo verified"
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## 2. Scoped task with path boundaries
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
pnpm --filter @martin/cli exec martin run \
|
|
17
|
+
--engine claude \
|
|
18
|
+
--objective "Tighten the README wording for the quickstart section" \
|
|
19
|
+
--verify "pnpm --filter @martin/core test" \
|
|
20
|
+
--allow-path README.md \
|
|
21
|
+
--allow-path docs/** \
|
|
22
|
+
--deny-path apps/** \
|
|
23
|
+
--budget-usd 0.25 \
|
|
24
|
+
--accept "Only update documentation files" \
|
|
25
|
+
--accept "Do not modify runtime source code"
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## 3. Leash block
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
pnpm --filter @martin/cli exec martin run \
|
|
32
|
+
--objective "Run a dangerous verifier" \
|
|
33
|
+
--verify "rm -rf ."
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## 4. Budget-constrained live run
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
pnpm --filter @martin/cli exec martin run \
|
|
40
|
+
--engine claude \
|
|
41
|
+
--objective "Refactor the CLI argument parser for clarity" \
|
|
42
|
+
--verify "pnpm --filter @martin/cli test" \
|
|
43
|
+
--budget-usd 1.00 \
|
|
44
|
+
--soft-limit-usd 0.60 \
|
|
45
|
+
--max-iterations 3
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## 5. Multi-adapter fallback chain
|
|
49
|
+
|
|
50
|
+
```ts
|
|
51
|
+
import { runMartin } from "@martin/core";
|
|
52
|
+
|
|
53
|
+
const result = await runMartin({
|
|
54
|
+
workspaceId: "ws_local",
|
|
55
|
+
projectId: "proj_example",
|
|
56
|
+
task: {
|
|
57
|
+
title: "Fix the failing test",
|
|
58
|
+
objective: "Fix the failing test without widening scope.",
|
|
59
|
+
verificationPlan: ["pnpm test"]
|
|
60
|
+
},
|
|
61
|
+
budget: {
|
|
62
|
+
maxUsd: 2,
|
|
63
|
+
softLimitUsd: 1,
|
|
64
|
+
maxIterations: 6,
|
|
65
|
+
maxTokens: 20_000
|
|
66
|
+
},
|
|
67
|
+
adapter,
|
|
68
|
+
fallbackAdapters: [fallbackAdapter]
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
console.log(result.decision.lifecycleState);
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## 6. Inspect a completed run
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
pnpm --filter @martin/cli exec martin inspect --file ~/.martin/runs/<run-id>/loop-record.json
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## 7. MCP invocation
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
{
|
|
84
|
+
"tool": "martin_run",
|
|
85
|
+
"arguments": {
|
|
86
|
+
"objective": "Repair the flaky test in auth.test.ts",
|
|
87
|
+
"workingDirectory": ".",
|
|
88
|
+
"engine": "claude",
|
|
89
|
+
"verificationPlan": ["pnpm test"],
|
|
90
|
+
"maxUsd": 1.0,
|
|
91
|
+
"maxIterations": 4,
|
|
92
|
+
"workspaceId": "ws_local",
|
|
93
|
+
"projectId": "proj_auth"
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
```
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Quickstart
|
|
2
|
+
|
|
3
|
+
Martin Loop runs AI coding agents with hard budget caps, grounding enforcement, and a full audit trail. This guide gets you running in under 5 minutes.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- Node.js 20+
|
|
8
|
+
- `pnpm` 10.x
|
|
9
|
+
- Optional: Claude Code CLI for live Claude runs
|
|
10
|
+
- Optional: OpenAI Codex CLI plus credentials for Codex runs
|
|
11
|
+
|
|
12
|
+
## Install
|
|
13
|
+
|
|
14
|
+
### From source
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
git clone https://github.com/martinloop/martin-loop
|
|
18
|
+
cd martin-loop
|
|
19
|
+
pnpm install
|
|
20
|
+
pnpm build
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
This OSS snapshot is validated through the workspace packages, so the examples below use the repo-local CLI entrypoint.
|
|
24
|
+
|
|
25
|
+
## Your first run (stub mode, no spend)
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
pnpm --filter @martin/cli exec martin run \
|
|
29
|
+
--objective "Summarize the current runtime state" \
|
|
30
|
+
--verify "echo ok"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
This exercises the full loop using a stub adapter, so no model is called. Check what was written:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
pnpm --filter @martin/cli exec martin inspect --file ~/.martin/runs/latest/loop-record.json
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Live run with a budget cap
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
pnpm --filter @martin/cli exec martin run \
|
|
43
|
+
--engine claude \
|
|
44
|
+
--objective "Fix the failing test in packages/core/tests/leash.test.ts" \
|
|
45
|
+
--verify "pnpm --filter @martin/core test" \
|
|
46
|
+
--budget-usd 0.50 \
|
|
47
|
+
--max-iterations 4
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Martin will stop at $0.50 regardless of task completion. Budget is a hard cap, not a soft suggestion.
|
|
51
|
+
|
|
52
|
+
## Safety demo
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
pnpm --filter @martin/cli exec martin run \
|
|
56
|
+
--objective "Run an unsafe verifier" \
|
|
57
|
+
--verify "rm -rf ."
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Expected: the run exits immediately with a leash violation.
|
|
61
|
+
|
|
62
|
+
## Scoped run with path restrictions
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
pnpm --filter @martin/cli exec martin run \
|
|
66
|
+
--engine claude \
|
|
67
|
+
--objective "Improve the README wording" \
|
|
68
|
+
--verify "echo docs-only" \
|
|
69
|
+
--allow-path README.md \
|
|
70
|
+
--allow-path docs/** \
|
|
71
|
+
--deny-path packages/** \
|
|
72
|
+
--budget-usd 0.25
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Config file
|
|
76
|
+
|
|
77
|
+
Martin reads `martin.config.yaml` from the current directory automatically:
|
|
78
|
+
|
|
79
|
+
```yaml
|
|
80
|
+
engine: claude
|
|
81
|
+
budgetUsd: 1.00
|
|
82
|
+
maxIterations: 6
|
|
83
|
+
verificationPlan:
|
|
84
|
+
- pnpm test
|
|
85
|
+
allowedPaths:
|
|
86
|
+
- src/**
|
|
87
|
+
deniedPaths:
|
|
88
|
+
- .env
|
|
89
|
+
- secrets/**
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Then run:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
pnpm --filter @martin/cli exec martin run --objective "Refactor the auth handler"
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## MCP server
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
node packages/mcp/dist/server.js
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Tools exposed: `martin_run`, `martin_inspect`, `martin_status`
|
|
105
|
+
|
|
106
|
+
## What to inspect after a run
|
|
107
|
+
|
|
108
|
+
```text
|
|
109
|
+
~/.martin/runs/<run-id>/
|
|
110
|
+
contract.json
|
|
111
|
+
state.json
|
|
112
|
+
ledger.jsonl
|
|
113
|
+
artifacts/attempt-001/
|
|
114
|
+
diff.patch
|
|
115
|
+
grounding-scan.json
|
|
116
|
+
leash.json
|
|
117
|
+
patch-decision.json
|
|
118
|
+
rollback-outcome.json
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Validation check
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
pnpm test
|
|
125
|
+
pnpm build
|
|
126
|
+
pnpm typecheck
|
|
127
|
+
```
|
package/docs/README.md
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Martin OSS Core
|
|
2
|
+
|
|
3
|
+
Martin Loop is a governed AI coding-loop runtime. The core runtime is real and verified through the Phase 12 certification gate; the repo is now in Phase 13 release-candidate engineering, which means the focus is reproducibility, OSS boundary cleanup, and pilot readiness rather than new feature invention.
|
|
4
|
+
|
|
5
|
+
## What the OSS core includes today
|
|
6
|
+
|
|
7
|
+
- `@martin/contracts`: shared loop, policy, grounding, leash, budget, and rollback types
|
|
8
|
+
- `@martin/core`: the runtime controller, persistence layer, grounding scanner, leash engine, patch-truth scoring, and rollback restoration logic
|
|
9
|
+
- `@martin/adapters`: normalized Claude CLI, Codex CLI, and direct-provider or stub adapter surfaces
|
|
10
|
+
- `@martin/cli`: the local operator CLI for `run`, `inspect`, and `resume`
|
|
11
|
+
- `@martin/mcp`: the MCP server surface for `martin_run`, `martin_inspect`, and `martin_status`
|
|
12
|
+
|
|
13
|
+
## What is still outside the initial OSS promise
|
|
14
|
+
|
|
15
|
+
- The root workspace now exposes the `martin-loop` public package facade, but registry publication is still a later release step.
|
|
16
|
+
- `@martin/contracts`, `@martin/core`, and `@martin/adapters` are still marked `private` in their package manifests.
|
|
17
|
+
- The hosted control-plane and local dashboard remain in the repo, but they are not yet the finalized public OSS boundary.
|
|
18
|
+
- The benchmark harness remains a workspace-only RC surface under `benchmarks/` and is not part of the publishable CLI boundary yet.
|
|
19
|
+
- Final licensing, public package publishing, and managed-product packaging are still gated behind later Phase 13 to Phase 15 work.
|
|
20
|
+
|
|
21
|
+
That means this repo is ready for grounded engineering review and RC validation, but it is not yet claiming a finished public OSS release.
|
|
22
|
+
|
|
23
|
+
## Runtime truth the current core enforces
|
|
24
|
+
|
|
25
|
+
- Explicit policy phases: `GATHER`, `ADMIT`, `PATCH`, `VERIFY`, `RECOVER`, `ESCALATE`, `ABORT`, `HANDOFF`
|
|
26
|
+
- Grounding scans against repo anatomy before success is accepted
|
|
27
|
+
- Blocking leash behavior for unsafe verifier commands, file-scope violations, approval-boundary changes, and secret handling
|
|
28
|
+
- Provenance-aware accounting using `actual`, `estimated`, and `unavailable`
|
|
29
|
+
- Persisted attempt artifacts under `~/.martin/runs/<runId>/artifacts/attempt-XXX/`
|
|
30
|
+
- Patch-truth scoring plus rollback boundary and restore outcome artifacts for discarded or blocked repo-backed attempts
|
|
31
|
+
|
|
32
|
+
## Trust profiles
|
|
33
|
+
|
|
34
|
+
Martin currently exposes these execution profiles:
|
|
35
|
+
|
|
36
|
+
- `strict_local`: safest default for local repo work
|
|
37
|
+
- `ci_safe`: tighter CI-oriented behavior
|
|
38
|
+
- `staging_controlled`: controlled outbound or network allowances with approvals
|
|
39
|
+
- `research_untrusted`: looser network posture for research-oriented runs while still enforcing approval boundaries
|
|
40
|
+
|
|
41
|
+
## Accounting labels
|
|
42
|
+
|
|
43
|
+
Martin keeps cost provenance explicit:
|
|
44
|
+
|
|
45
|
+
- `actual`: reported directly by the provider or adapter settlement
|
|
46
|
+
- `estimated`: derived from pricing logic or modeled usage
|
|
47
|
+
- `unavailable`: the adapter could not produce a trustworthy number
|
|
48
|
+
|
|
49
|
+
Do not collapse those labels when building dashboards, docs, or public claims.
|
|
50
|
+
|
|
51
|
+
## Planned public launch target
|
|
52
|
+
|
|
53
|
+
The current engineering memo keeps these public-launch targets as the intended release shape:
|
|
54
|
+
|
|
55
|
+
- install target: `npm install martin-loop`
|
|
56
|
+
- CLI target: `npx martin-loop ...`
|
|
57
|
+
- SDK target: `import { MartinLoop } from "martin-loop"`
|
|
58
|
+
|
|
59
|
+
Those targets are not the validated operator path for this OSS snapshot yet. In the current repo, the honest workflow is still the repo-local path documented below and in the quickstart, because registry publication and broader release packaging remain later steps.
|
|
60
|
+
|
|
61
|
+
## Reproducibility
|
|
62
|
+
|
|
63
|
+
From the repo root:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
pnpm install
|
|
67
|
+
pnpm test
|
|
68
|
+
pnpm build
|
|
69
|
+
pnpm typecheck
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Those are the commands validated in this workspace today. Earlier RC-only commands such as `pnpm rc:validate` or `pnpm public:smoke` are referenced in older planning notes, but they are not shipped as runnable scripts in this repo snapshot.
|
|
73
|
+
|
|
74
|
+
## RC gate commands
|
|
75
|
+
|
|
76
|
+
The current repo-local validation gate is:
|
|
77
|
+
|
|
78
|
+
- `pnpm test`
|
|
79
|
+
- `pnpm build`
|
|
80
|
+
- `pnpm typecheck`
|
|
81
|
+
|
|
82
|
+
Treat anything broader than those commands as release-planning work that still needs to be reintroduced explicitly before launch.
|
|
83
|
+
|
|
84
|
+
## Where to go next
|
|
85
|
+
|
|
86
|
+
- [`docs/QUICKSTART.md`](./QUICKSTART.md) for clone-to-first-run setup
|
|
87
|
+
- [`docs/EXAMPLES.md`](./EXAMPLES.md) for grounded CLI and MCP examples
|
|
88
|
+
- [`docs/pilot/README.md`](../pilot/README.md) for the pilot-prep package that remains explicitly gated behind Phase 13 completion
|
|
89
|
+
- [`../../README.md`](../../README.md) for the repo-level RC status and workspace map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Claim To Capability
|
|
2
|
+
|
|
3
|
+
This matrix keeps the public story tied to proof. Every public claim category must point either to repo-owned artifacts or to a frozen external reference record. If a row cannot be defended by evidence, the claim must stay softened or out of market copy.
|
|
4
|
+
|
|
5
|
+
| Claim category | Current boundary | Evidence type | Evidence reference | Status |
|
|
6
|
+
|---|---|---|---|---|
|
|
7
|
+
| Runtime and artifact truth | Artifact-backed runtime lifecycle, grounding, accounting, and rollback behavior only | repo | `docs/oss/RELEASE-SURFACE-REPORT.md`, `docs/oss/OSS-BOUNDARY-REPORT.md`, `pnpm rc:validate` | ready |
|
|
8
|
+
| Evidence-backed contradiction detection | Completion claims are accepted only when repo-backed change evidence and verifier truth support them; this is contradiction detection, not semantic intent reading | repo | `packages/core/src/evidence/claim-audit.ts`, `packages/core/tests/runtime.test.ts` | ready |
|
|
9
|
+
| Deterministic supported-path recovery | Recovery is deterministic only across the declared adapter/model matrix the runtime and CLI construct; unsupported paths must be surfaced honestly | repo | `packages/core/tests/runtime.test.ts`, `packages/cli/tests/cli-recovery-topology.test.ts` | ready |
|
|
10
|
+
| Public package install and CLI surface | Public install target stays `martin-loop`; operator truth still starts from the repo until human publish | repo | `pnpm public:smoke`, `pnpm release:package:validate` | ready |
|
|
11
|
+
| Repo-backed safety, rollback, and grounding proof | Repo-backed mutations must remain explainable from artifacts alone | repo | `pnpm repo:smoke`, `docs/pilot/PILOT-GATE-REVIEW.md` | ready |
|
|
12
|
+
| Pilot closeout evidence | Phase 14 claims stay bounded to 2 accepted `disposable_internal`, 2 accepted `low_risk_real`, and gate `GO` | repo | `docs/pilot/PILOT-RUN-TRACKER.md`, `docs/review-packs/2026-04-05-phase14-pilot-04/review.md` | ready |
|
|
13
|
+
| Website copy and positioning | Website copy must not outrun the shipped public surface or the pilot evidence | external reference | `docs/release/external-evidence/WEBSITE-SURFACE-REFERENCE.md` | ready_for_signoff |
|
|
14
|
+
| Pricing and feature gating | Pricing and packaging statements must align with the single-facade `martin-loop` release and the current feature gate truth | external reference | `docs/release/external-evidence/PRICING-SURFACE-REFERENCE.md` | ready_for_signoff |
|
|
15
|
+
| Privacy commitments | Privacy claims must stay inside the shipped operator and data-handling behavior | external reference | `docs/release/external-evidence/PRIVACY-POLICY-REFERENCE.md` | ready_for_signoff |
|
|
16
|
+
| Terms and access control | Terms must reflect the current access model, manual release sequence, and support boundaries | external reference | `docs/release/external-evidence/TERMS-OF-SERVICE-REFERENCE.md` | ready_for_signoff |
|
|
17
|
+
| Product claim matrix | Marketing or launch claims stay frozen to the reviewed matrix until a human owner widens them intentionally | external reference | `docs/release/external-evidence/PRODUCT-CLAIM-MATRIX-REFERENCE.md` | ready_for_signoff |
|
|
18
|
+
| Semantic hallucination detection | Not claimed. The live repo still exposes a structural short-response heuristic, but release language must not present that as semantic truth understanding | repo | `PRODUCTION-READINESS-AUDIT-REPORT.md`, `docs/handoffs/2026-04-08-h2-h3-complete-handoff.md` | not_claimed |
|
|
19
|
+
| Universal autonomous self-recovery | Not claimed. Release language is limited to deterministic recovery across the declared supported adapter/model matrix and explicit single-path disclosures | repo | `PRODUCTION-READINESS-AUDIT-REPORT.md`, `packages/cli/tests/cli-recovery-topology.test.ts` | not_claimed |
|
package/package.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "martin-loop",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"description": "Martin Loop — The world's first truthfully hardened agentic coding loop.",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"bin": {
|
|
10
|
+
"martin-loop": "./dist/bin/martin-loop.js"
|
|
11
|
+
},
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"default": "./dist/index.js"
|
|
16
|
+
},
|
|
17
|
+
"./package.json": "./package.json"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist",
|
|
21
|
+
"README.md",
|
|
22
|
+
"docs"
|
|
23
|
+
],
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"access": "public"
|
|
26
|
+
},
|
|
27
|
+
"workspaces": [
|
|
28
|
+
"packages/*"
|
|
29
|
+
],
|
|
30
|
+
"keywords": [
|
|
31
|
+
"ai",
|
|
32
|
+
"agent",
|
|
33
|
+
"coding-loop",
|
|
34
|
+
"llm",
|
|
35
|
+
"automation",
|
|
36
|
+
"cli"
|
|
37
|
+
],
|
|
38
|
+
"author": "Vakeesan Mahalingam and Gobi Shanthan",
|
|
39
|
+
"license": "MIT",
|
|
40
|
+
"homepage": "https://martinloop.sh",
|
|
41
|
+
"repository": {
|
|
42
|
+
"type": "git",
|
|
43
|
+
"url": "https://github.com/martinloop/martin-loop.git"
|
|
44
|
+
},
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"@martin/adapters": "0.1.0",
|
|
47
|
+
"@martin/sdk": "0.1.0",
|
|
48
|
+
"@martin/cli": "0.1.0",
|
|
49
|
+
"@martin/contracts": "0.1.0",
|
|
50
|
+
"@martin/core": "0.1.0"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@types/node": "^22.13.10",
|
|
54
|
+
"tsx": "^4.19.3",
|
|
55
|
+
"typescript": "^5.8.2",
|
|
56
|
+
"vitest": "^3.0.8"
|
|
57
|
+
},
|
|
58
|
+
"scripts": {
|
|
59
|
+
"build": "pnpm -r build && tsc -p tsconfig.json",
|
|
60
|
+
"test": "pnpm -r test",
|
|
61
|
+
"lint": "pnpm -r lint",
|
|
62
|
+
"typecheck": "pnpm -r exec tsc --noEmit && tsc -p tsconfig.json --noEmit"
|
|
63
|
+
}
|
|
64
|
+
}
|