@jeger-ai/opengantry 2.3.0 → 2.4.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 +61 -59
- package/dist/cli/commands/arch.d.ts +9 -0
- package/dist/cli/commands/arch.d.ts.map +1 -1
- package/dist/cli/commands/arch.js +65 -0
- package/dist/cli/commands/arch.js.map +1 -1
- package/dist/cli/commands/context-request.d.ts +2 -2
- package/dist/cli/commands/context-request.d.ts.map +1 -1
- package/dist/cli/commands/context-request.js +13 -13
- package/dist/cli/commands/context-request.js.map +1 -1
- package/dist/cli/commands/init.js +2 -2
- package/dist/cli/commands/onboarding.js +4 -4
- package/dist/cli/commands/onboarding.js.map +1 -1
- package/dist/cli/commands/planner.d.ts +11 -0
- package/dist/cli/commands/{teacher.d.ts.map → planner.d.ts.map} +1 -1
- package/dist/cli/commands/{teacher.js → planner.js} +11 -11
- package/dist/cli/commands/{teacher.js.map → planner.js.map} +1 -1
- package/dist/cli/commands/runtime.d.ts +1 -1
- package/dist/cli/commands/runtime.d.ts.map +1 -1
- package/dist/cli/commands/runtime.js +4 -4
- package/dist/cli/commands/runtime.js.map +1 -1
- package/dist/cli/lib/arch-override.d.ts +4 -0
- package/dist/cli/lib/arch-override.d.ts.map +1 -0
- package/dist/cli/lib/arch-override.js +8 -0
- package/dist/cli/lib/arch-override.js.map +1 -0
- package/dist/cli/lib/architecture-fetch.d.ts +24 -0
- package/dist/cli/lib/architecture-fetch.d.ts.map +1 -0
- package/dist/cli/lib/architecture-fetch.js +88 -0
- package/dist/cli/lib/architecture-fetch.js.map +1 -0
- package/dist/cli/lib/audience-output.d.ts +1 -1
- package/dist/cli/lib/audience-output.d.ts.map +1 -1
- package/dist/cli/lib/audience-output.js +16 -16
- package/dist/cli/lib/audience-output.js.map +1 -1
- package/dist/cli/lib/break-glass.js +1 -1
- package/dist/cli/lib/command-reporter.d.ts +1 -0
- package/dist/cli/lib/command-reporter.d.ts.map +1 -1
- package/dist/cli/lib/command-reporter.js +10 -5
- package/dist/cli/lib/command-reporter.js.map +1 -1
- package/dist/cli/lib/config-namespace.d.ts +2 -2
- package/dist/cli/lib/config-namespace.js +2 -2
- package/dist/cli/lib/constants.d.ts +8 -8
- package/dist/cli/lib/constants.d.ts.map +1 -1
- package/dist/cli/lib/constants.js +8 -8
- package/dist/cli/lib/constants.js.map +1 -1
- package/dist/cli/lib/context-request.d.ts +4 -4
- package/dist/cli/lib/context-request.d.ts.map +1 -1
- package/dist/cli/lib/context-request.js +11 -11
- package/dist/cli/lib/context-request.js.map +1 -1
- package/dist/cli/lib/doctor-core.d.ts.map +1 -1
- package/dist/cli/lib/doctor-core.js +49 -22
- package/dist/cli/lib/doctor-core.js.map +1 -1
- package/dist/cli/lib/doctor-types.d.ts +2 -2
- package/dist/cli/lib/errors.js +6 -6
- package/dist/cli/lib/errors.js.map +1 -1
- package/dist/cli/lib/executor-log-integrity.d.ts +4 -0
- package/dist/cli/lib/executor-log-integrity.d.ts.map +1 -0
- package/dist/cli/lib/{worker-log-integrity.js → executor-log-integrity.js} +8 -8
- package/dist/cli/lib/executor-log-integrity.js.map +1 -0
- package/dist/cli/lib/{worker-log-line-map.d.ts → executor-log-line-map.d.ts} +4 -4
- package/dist/cli/lib/executor-log-line-map.d.ts.map +1 -0
- package/dist/cli/lib/{worker-log-line-map.js → executor-log-line-map.js} +4 -4
- package/dist/cli/lib/executor-log-line-map.js.map +1 -0
- package/dist/cli/lib/file-merge-gxt.js +1 -1
- package/dist/cli/lib/file-merge-gxt.js.map +1 -1
- package/dist/cli/lib/fix-hints.d.ts +6 -6
- package/dist/cli/lib/fix-hints.d.ts.map +1 -1
- package/dist/cli/lib/fix-hints.js +36 -30
- package/dist/cli/lib/fix-hints.js.map +1 -1
- package/dist/cli/lib/git-metrics.js +10 -10
- package/dist/cli/lib/git-metrics.js.map +1 -1
- package/dist/cli/lib/git-proof.d.ts +7 -5
- package/dist/cli/lib/git-proof.d.ts.map +1 -1
- package/dist/cli/lib/git-proof.js +48 -19
- package/dist/cli/lib/git-proof.js.map +1 -1
- package/dist/cli/lib/gxt-config.d.ts +9 -0
- package/dist/cli/lib/gxt-config.d.ts.map +1 -0
- package/dist/cli/lib/gxt-config.js +20 -0
- package/dist/cli/lib/gxt-config.js.map +1 -0
- package/dist/cli/lib/gxt-error-codes.d.ts +3 -0
- package/dist/cli/lib/gxt-error-codes.d.ts.map +1 -1
- package/dist/cli/lib/gxt-error-codes.js +8 -3
- package/dist/cli/lib/gxt-error-codes.js.map +1 -1
- package/dist/cli/lib/init-compose.js +1 -1
- package/dist/cli/lib/init-interactive.js +1 -1
- package/dist/cli/lib/init-interactive.js.map +1 -1
- package/dist/cli/lib/init-tutorial.js +14 -14
- package/dist/cli/lib/init-tutorial.js.map +1 -1
- package/dist/cli/lib/kpi-engine.d.ts +1 -1
- package/dist/cli/lib/kpi-engine.d.ts.map +1 -1
- package/dist/cli/lib/kpi-engine.js +17 -11
- package/dist/cli/lib/kpi-engine.js.map +1 -1
- package/dist/cli/lib/legislate-forbidden-zone.d.ts +1 -1
- package/dist/cli/lib/legislate-forbidden-zone.js +1 -1
- package/dist/cli/lib/legislate.js +4 -4
- package/dist/cli/lib/mcp-governance.d.ts +2 -2
- package/dist/cli/lib/mcp-governance.d.ts.map +1 -1
- package/dist/cli/lib/mcp-governance.js +40 -10
- package/dist/cli/lib/mcp-governance.js.map +1 -1
- package/dist/cli/lib/mcp-tools-register.js +3 -3
- package/dist/cli/lib/mcp-tools-register.js.map +1 -1
- package/dist/cli/lib/mcp-upgrade.d.ts.map +1 -1
- package/dist/cli/lib/mcp-upgrade.js +8 -0
- package/dist/cli/lib/mcp-upgrade.js.map +1 -1
- package/dist/cli/lib/mcp-write-guard.d.ts +20 -0
- package/dist/cli/lib/mcp-write-guard.d.ts.map +1 -0
- package/dist/cli/lib/mcp-write-guard.js +82 -0
- package/dist/cli/lib/mcp-write-guard.js.map +1 -0
- package/dist/cli/lib/missions/formatter.d.ts +1 -1
- package/dist/cli/lib/missions/formatter.js +1 -1
- package/dist/cli/lib/onboarding-flow.js +1 -1
- package/dist/cli/lib/out-of-scope-hint.js +1 -1
- package/dist/cli/lib/perimeter.d.ts +1 -1
- package/dist/cli/lib/perimeter.js +10 -10
- package/dist/cli/lib/planner-identity.d.ts +23 -0
- package/dist/cli/lib/{teacher-identity.d.ts.map → planner-identity.d.ts.map} +1 -1
- package/dist/cli/lib/{teacher-identity.js → planner-identity.js} +34 -34
- package/dist/cli/lib/{teacher-identity.js.map → planner-identity.js.map} +1 -1
- package/dist/cli/lib/planner-signature.d.ts +11 -0
- package/dist/cli/lib/planner-signature.d.ts.map +1 -0
- package/dist/cli/lib/planner-signature.js +17 -0
- package/dist/cli/lib/planner-signature.js.map +1 -0
- package/dist/cli/lib/program-audience-hook.js +1 -1
- package/dist/cli/lib/program-audience-hook.js.map +1 -1
- package/dist/cli/lib/register-proposals.js +1 -1
- package/dist/cli/lib/runtime-env.d.ts +3 -3
- package/dist/cli/lib/runtime-env.d.ts.map +1 -1
- package/dist/cli/lib/runtime-env.js +4 -4
- package/dist/cli/lib/runtime-env.js.map +1 -1
- package/dist/cli/lib/runtime-exec.d.ts +4 -4
- package/dist/cli/lib/runtime-exec.d.ts.map +1 -1
- package/dist/cli/lib/runtime-exec.js +14 -14
- package/dist/cli/lib/runtime-exec.js.map +1 -1
- package/dist/cli/lib/staged-tmvc-guard.js +1 -1
- package/dist/cli/lib/staged-tmvc-guard.js.map +1 -1
- package/dist/cli/lib/start-orchestration.js +7 -7
- package/dist/cli/lib/start-orchestration.js.map +1 -1
- package/dist/cli/lib/status-report.d.ts +1 -1
- package/dist/cli/lib/status-report.js +7 -7
- package/dist/cli/lib/status-report.js.map +1 -1
- package/dist/cli/lib/surgeon.d.ts +3 -3
- package/dist/cli/lib/surgeon.d.ts.map +1 -1
- package/dist/cli/lib/surgeon.js +7 -7
- package/dist/cli/lib/surgeon.js.map +1 -1
- package/dist/cli/lib/surgeons/registry.d.ts +1 -1
- package/dist/cli/lib/surgeons/registry.d.ts.map +1 -1
- package/dist/cli/lib/target-architecture.d.ts +37 -0
- package/dist/cli/lib/target-architecture.d.ts.map +1 -0
- package/dist/cli/lib/target-architecture.js +155 -0
- package/dist/cli/lib/target-architecture.js.map +1 -0
- package/dist/cli/lib/telemetry-log.d.ts +1 -1
- package/dist/cli/lib/telemetry-log.d.ts.map +1 -1
- package/dist/cli/lib/telemetry-log.js +4 -4
- package/dist/cli/lib/telemetry-log.js.map +1 -1
- package/dist/cli/lib/tmvc-path.d.ts +1 -1
- package/dist/cli/lib/tmvc-path.d.ts.map +1 -1
- package/dist/cli/lib/tmvc-path.js +1 -1
- package/dist/cli/lib/tmvc-path.js.map +1 -1
- package/dist/cli/lib/trace.d.ts +8 -8
- package/dist/cli/lib/trace.d.ts.map +1 -1
- package/dist/cli/lib/trace.js +21 -21
- package/dist/cli/lib/trace.js.map +1 -1
- package/dist/cli/lib/triage-logic.js +1 -1
- package/dist/cli/lib/types.d.ts +2 -1
- package/dist/cli/lib/types.d.ts.map +1 -1
- package/dist/cli/lib/upgrade-apply.d.ts.map +1 -1
- package/dist/cli/lib/upgrade-apply.js +14 -2
- package/dist/cli/lib/upgrade-apply.js.map +1 -1
- package/dist/cli/lib/upgrade-plan.js +3 -3
- package/dist/cli/lib/verify-engine.d.ts +11 -5
- package/dist/cli/lib/verify-engine.d.ts.map +1 -1
- package/dist/cli/lib/verify-engine.js +47 -30
- package/dist/cli/lib/verify-engine.js.map +1 -1
- package/dist/cli/lib/verify-export.d.ts +6 -0
- package/dist/cli/lib/verify-export.d.ts.map +1 -0
- package/dist/cli/lib/verify-export.js +106 -0
- package/dist/cli/lib/verify-export.js.map +1 -0
- package/dist/cli/lib/verify-failure-normalize-phases.js +1 -1
- package/dist/cli/lib/verify-failure-normalize-phases.js.map +1 -1
- package/dist/cli/lib/verify-hints.d.ts +1 -1
- package/dist/cli/lib/verify-hints.d.ts.map +1 -1
- package/dist/cli/lib/verify-hints.js +16 -16
- package/dist/cli/lib/verify-hints.js.map +1 -1
- package/dist/cli/lib/verify-payload-types.d.ts +1 -0
- package/dist/cli/lib/verify-payload-types.d.ts.map +1 -1
- package/dist/cli/lib/verify-payload.d.ts.map +1 -1
- package/dist/cli/lib/verify-payload.js +3 -0
- package/dist/cli/lib/verify-payload.js.map +1 -1
- package/dist/cli/lib/verify-presenters.d.ts.map +1 -1
- package/dist/cli/lib/verify-presenters.js +12 -6
- package/dist/cli/lib/verify-presenters.js.map +1 -1
- package/dist/cli/lib/verify-sinks.d.ts.map +1 -1
- package/dist/cli/lib/verify-sinks.js +3 -2
- package/dist/cli/lib/verify-sinks.js.map +1 -1
- package/dist/cli/lib/version.gen.d.ts +1 -1
- package/dist/cli/lib/version.gen.js +1 -1
- package/dist/cli/program-arch.d.ts.map +1 -1
- package/dist/cli/program-arch.js +16 -1
- package/dist/cli/program-arch.js.map +1 -1
- package/dist/cli/program-core.js +4 -4
- package/dist/cli/program-core.js.map +1 -1
- package/dist/cli/program-mission.js +15 -15
- package/dist/cli/program-mission.js.map +1 -1
- package/dist/cli/program-planner.d.ts +3 -0
- package/dist/cli/program-planner.d.ts.map +1 -0
- package/dist/cli/program-planner.js +19 -0
- package/dist/cli/{program-teacher.js.map → program-planner.js.map} +1 -1
- package/dist/cli/program-workflow.d.ts.map +1 -1
- package/dist/cli/program-workflow.js +19 -8
- package/dist/cli/program-workflow.js.map +1 -1
- package/dist/cli/program.js +3 -3
- package/dist/cli/program.js.map +1 -1
- package/package.json +1 -1
- package/templates/.cursor/hooks/gxt-before-shell.sh +4 -4
- package/templates/.cursor/hooks/gxt-session-start.sh +2 -2
- package/templates/.cursor/rules/opengantry-gxt-substrate.mdc +4 -4
- package/templates/.gitagent/ARCHITECTURE.pointer.json +2 -2
- package/templates/.gitagent/foreman/MANIFEST.json +3 -3
- package/templates/.gitagent/foreman/PLANNER.allowlist.example +4 -0
- package/templates/.gitagent/missions/README.md +1 -1
- package/templates/.gitagent/{teacher → planner}/ARCHITECTURE-ACCESS.md +3 -3
- package/templates/.gitagent/{teacher → planner}/ARCHITECTURE-DISCOVERY.md +2 -2
- package/templates/.gitagent/planner/ARCHITECTURE_RUBRIC.template.md +25 -0
- package/templates/.gitagent/{teacher/WORKER_LOG.template.md → planner/EXECUTOR_LOG.template.md} +2 -2
- package/templates/.gitagent/{teacher → planner}/MISSION-ARCHITECT.md +11 -11
- package/templates/.gitagent/{teacher → planner}/RULES.md +4 -4
- package/templates/.githooks/post-checkout +4 -4
- package/templates/.githooks/pre-push +1 -1
- package/templates/.github/workflows/gxt-validate.yml +1 -1
- package/templates/.gitignore.gxt +1 -1
- package/templates/.prettierignore.gxt +1 -1
- package/templates/AGENTS.md +6 -6
- package/templates/docs/ARCHITECTURE.md +2 -2
- package/templates/integrations/aider/.aider.conf.yml +1 -1
- package/templates/integrations/antigravity/.agent/rules/gxt.md +1 -1
- package/templates/integrations/asset-catalog.json +7 -7
- package/templates/integrations/claude-code/CLAUDE.md +1 -1
- package/templates/integrations/cline/.clinerules/gxt.md +1 -1
- package/templates/integrations/compatibility.json +1 -1
- package/templates/integrations/junie/.junie/guidelines.md +1 -1
- package/templates/integrations/opencode/opencode.json +1 -1
- package/templates/integrations/openhands/.openhands/microagents/gxt.md +1 -1
- package/templates/integrations/recipes/_footer.md +7 -7
- package/templates/integrations/recipes/_preamble.md +7 -7
- package/templates/integrations/recipes/claude-code.md +1 -1
- package/templates/integrations/recipes/cursor.md +2 -2
- package/templates/scripts/gxt-manifest-lib.mjs +1 -1
- package/templates/scripts/gxt-runtime-env.sh +1 -1
- package/templates/skills/gantry.md +1 -1
- package/templates/skills/substrate.md +1 -1
- package/dist/cli/commands/teacher.d.ts +0 -11
- package/dist/cli/lib/teacher-identity.d.ts +0 -23
- package/dist/cli/lib/worker-log-integrity.d.ts +0 -4
- package/dist/cli/lib/worker-log-integrity.d.ts.map +0 -1
- package/dist/cli/lib/worker-log-integrity.js.map +0 -1
- package/dist/cli/lib/worker-log-line-map.d.ts.map +0 -1
- package/dist/cli/lib/worker-log-line-map.js.map +0 -1
- package/dist/cli/program-teacher.d.ts +0 -3
- package/dist/cli/program-teacher.d.ts.map +0 -1
- package/dist/cli/program-teacher.js +0 -19
- package/templates/.gitagent/foreman/TEACHER.allowlist.example +0 -4
- /package/templates/.gitagent/{teacher → planner}/KPI-REPORT.schema.yaml +0 -0
- /package/templates/.gitagent/{teacher → planner}/MISSION.schema.yaml +0 -0
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**OpenGantry is a platform for Autonomous Repository Engineering** — AI-assisted product delivery where every material agent change is scoped before execution, verified by deterministic gates, and traceable in Git before merge.
|
|
4
4
|
|
|
5
|
-
It is **not** a real-time conversational agent wrapper. Use OpenGantry when you need auditable, mission-scoped repository work with explicit
|
|
5
|
+
It is **not** a real-time conversational agent wrapper. Use OpenGantry when you need auditable, mission-scoped repository work with explicit Planner approval and forensic trace.
|
|
6
6
|
|
|
7
7
|
> **Not [Gantry.io](https://gantry.io)?** **Open Source Gantry** is the **`gantry` CLI** for **local-first**, **vendor-neutral**, **git-native governance** in your repository — not a hosted observability dashboard. If you are looking for infrastructure monitoring, see [Gantry.io](https://gantry.io).
|
|
8
8
|
|
|
@@ -14,11 +14,11 @@ Use OpenGantry when you need:
|
|
|
14
14
|
|
|
15
15
|
### What you get in production
|
|
16
16
|
|
|
17
|
-
- **Review before run:**
|
|
18
|
-
- **No silent governance edits:** hooks and `gantry verify` fail closed on law, manifest, and mission paths without a
|
|
19
|
-
- **Audit in Git:** `git log --grep='MSN-0042'` plus `
|
|
17
|
+
- **Review before run:** executors do not complete the loop until a human-approved mission defines scope, gates, and trace rows.
|
|
18
|
+
- **No silent governance edits:** hooks and `gantry verify` fail closed on law, manifest, and mission paths without a Planner `[MSN-XXXX]` commit.
|
|
19
|
+
- **Audit in Git:** `git log --grep='MSN-0042'` plus `EXECUTOR_LOG.md` quotes that verifiers must cite verbatim.
|
|
20
20
|
|
|
21
|
-
**Protocol (implementers):** under the hood, **GXT (Git-native eXecution and Trace)** binds law, Foreman routing, deterministic gates, and trace mapping to `
|
|
21
|
+
**Protocol (implementers):** under the hood, **GXT (Git-native eXecution and Trace)** binds law, Foreman routing, deterministic gates, and trace mapping to `EXECUTOR_LOG.md`. This repository is both the **specimen** and the **template**. Run **`gantry init`** (or **`gantry init --tutorial`**) in your repo and adapt it.
|
|
22
22
|
|
|
23
23
|
## Gantry CLI — local-first governance
|
|
24
24
|
|
|
@@ -59,7 +59,7 @@ Developing this repository from source: `npm ci && npm run build` — see [gantr
|
|
|
59
59
|
| **See benchmark ROI (3 min)** | [`examples/benchmark-agent/`](examples/benchmark-agent/) → [`docs/ADOPTION.md`](docs/ADOPTION.md) |
|
|
60
60
|
| **Wire IDE agents** | [`docs/INTEGRATIONS.md`](docs/INTEGRATIONS.md) |
|
|
61
61
|
| **Contribute / dogfood** | [`docs/DEVELOPMENT.md`](docs/DEVELOPMENT.md) |
|
|
62
|
-
| **Governance law + workflow** | [`.gitagent/README.md`](.gitagent/README.md) · [`.gitagent/
|
|
62
|
+
| **Governance law + workflow** | [`.gitagent/README.md`](.gitagent/README.md) · [`.gitagent/planner/RULES.md`](.gitagent/planner/RULES.md) |
|
|
63
63
|
| **Roadmap / open work** | [`docs/BACKLOG.md`](docs/BACKLOG.md) |
|
|
64
64
|
| **Compliance framing** | [`docs/COMPLIANCE-ISO.md`](docs/COMPLIANCE-ISO.md) |
|
|
65
65
|
| **Ephemeral virtualization (stretch)** | [`docs/ADR-EPHEMERAL-VIRTUALIZATION.md`](docs/ADR-EPHEMERAL-VIRTUALIZATION.md) |
|
|
@@ -69,20 +69,22 @@ Developing this repository from source: `npm ci && npm run build` — see [gantr
|
|
|
69
69
|
| Outcome | How OpenGantry delivers it |
|
|
70
70
|
|---------|---------------------------|
|
|
71
71
|
| **Lower onboarding friction** | `gantry init --tutorial`, `gantry onboarding`, `gantry start "<intent>"`, `gantry status --json` |
|
|
72
|
-
| **No unreviewed agent scope** |
|
|
73
|
-
| **Audit-ready evidence** | `[MSN-XXXX]` commit subjects; verifier PASS requires a verbatim quote from `
|
|
72
|
+
| **No unreviewed agent scope** | Planner reviews mission YAML **before** `runtime env` / executor execution; TMVC roots + forbidden zones enforce paths |
|
|
73
|
+
| **Audit-ready evidence** | `[MSN-XXXX]` commit subjects; verifier PASS requires a verbatim quote from `EXECUTOR_LOG.md` |
|
|
74
74
|
| **Regulated / ISO-aligned workflows** | SOD, mission authorization, and Git-native trace — see [`docs/COMPLIANCE-ISO.md`](docs/COMPLIANCE-ISO.md) (27001 change control, 42001 AI governance) |
|
|
75
|
-
| **Faster recovery from failure** | Stable `GXT_*` error codes, `gantry verify --fix`, role output via `--audience
|
|
75
|
+
| **Faster recovery from failure** | Stable `GXT_*` error codes, `gantry verify --fix`, role output via `--audience executor\|planner\|verifier` |
|
|
76
76
|
|
|
77
|
-
**Protocol maturity:** substrate law **v0.5.0**; **`gantry` v2.
|
|
77
|
+
**Protocol maturity:** substrate law **v0.5.0**; **`gantry` v2.4.0** — unified CLI naming (`gantry` primary; legacy `gapman` alias). Current npm publish: **v2.4.0**. See [.gitagent/planner/RUNTIME.md](.gitagent/planner/RUNTIME.md).
|
|
78
78
|
|
|
79
79
|
## Release timeline (latest first)
|
|
80
80
|
|
|
81
|
-
Current npm release in this repository: **`gantry` v2.
|
|
81
|
+
Current npm release in this repository: **`gantry` v2.4.0**. Use [`docs/ADOPTION.md`](docs/ADOPTION.md) for the ordered runbook.
|
|
82
82
|
|
|
83
83
|
| Release | Highlights |
|
|
84
84
|
|---------|------------|
|
|
85
|
-
| **v2.
|
|
85
|
+
| **v2.4.0** | Architecture cage — `gantry arch fetch` ([#34](https://github.com/jeger-ai/opengantry/issues/34)), `verify --format sarif\|junit` ([#36](https://github.com/jeger-ai/opengantry/issues/36)), `TARGET_ARCHITECTURE.yaml` + `gantry arch check` ([#15](https://github.com/jeger-ai/opengantry/issues/15)), `ARCHITECTURE_RUBRIC` advisory judge ([#16](https://github.com/jeger-ai/opengantry/issues/16)) |
|
|
86
|
+
| **v2.3.1** | **Breaking:** Planner/Executor rename ([#110](https://github.com/jeger-ai/opengantry/issues/110)) — `gantry planner`, `.gitagent/planner/`, `EXECUTOR_LOG.md`, `GXT_PLANNER_*` / `GXT_EXECUTOR_*` env vars (no aliases). ADR-gated cage: MCP write guard ([#14](https://github.com/jeger-ai/opengantry/issues/14)), break-glass ADR ([#17](https://github.com/jeger-ai/opengantry/issues/17)), optional `planner_signature` tier ([#37](https://github.com/jeger-ai/opengantry/issues/37)) |
|
|
87
|
+
| **v2.3.0** | Cage hardening — `gen:dogfood` ([#105](https://github.com/jeger-ai/opengantry/issues/105)), typed `kpiKind` ([#103](https://github.com/jeger-ai/opengantry/issues/103)), audience-tagged start ([#104](https://github.com/jeger-ai/opengantry/issues/104)), doctor EXECUTOR_LOG checks ([#38](https://github.com/jeger-ai/opengantry/issues/38)), TS/mjs parity ([#106](https://github.com/jeger-ai/opengantry/issues/106)), verify failure contract ([#102](https://github.com/jeger-ai/opengantry/issues/102)), legislate forbidden-zone warn ([#35](https://github.com/jeger-ai/opengantry/issues/35)); removed deprecated `upgrade --apply`/`--dry-run` parent flags |
|
|
86
88
|
| **v2.2.5** | Quality remediation — recursive test glob ([#99](https://github.com/jeger-ai/opengantry/issues/99)), dead verify code prune ([#100](https://github.com/jeger-ai/opengantry/issues/100)–[#101](https://github.com/jeger-ai/opengantry/issues/101)), mechanical cleanups ([#107](https://github.com/jeger-ai/opengantry/issues/107)) |
|
|
87
89
|
| **v2.2.4** | Unified gantry naming cutover ([#94](https://github.com/jeger-ai/opengantry/issues/94)); docs positioning — Gantry.io disambiguation, long-tail SEO (`Open Source Gantry`, `Gantry CLI`, `Gantry Git hook`), vendor-neutral local governance framing ([#95](https://github.com/jeger-ai/opengantry/issues/95)–[#97](https://github.com/jeger-ai/opengantry/issues/97)) |
|
|
88
90
|
| **v2.2.3** | Declarative `trusted_automation` policy in `.gitagent/config.json` — repository-legislated bot maintenance bypass with `max_net_loc <= 5` ([#92](https://github.com/jeger-ai/opengantry/issues/92)) |
|
|
@@ -101,37 +103,37 @@ Current npm release in this repository: **`gantry` v2.3.0**. Use [`docs/ADOPTION
|
|
|
101
103
|
|
|
102
104
|
| Idea | Where it lives |
|
|
103
105
|
|------|----------------|
|
|
104
|
-
| **Law** (SOD, trace mapping, risk tiers, TMVC, manifest sync) | [`.gitagent/
|
|
106
|
+
| **Law** (SOD, trace mapping, risk tiers, TMVC, manifest sync) | [`.gitagent/planner/RULES.md`](.gitagent/planner/RULES.md) |
|
|
105
107
|
| **Routing map** (skills, roots, forbidden zones, path risks) | [`.gitagent/foreman/MANIFEST.json`](.gitagent/foreman/MANIFEST.json) |
|
|
106
108
|
| **Foreman** (cheap, manifest-only triage) | [`.gitagent/foreman/SOUL.md`](.gitagent/foreman/SOUL.md) |
|
|
107
|
-
| **
|
|
109
|
+
| **Executor Runtime Contract** (env exports for IDE agents / scripts) | [`.gitagent/planner/RUNTIME.md`](.gitagent/planner/RUNTIME.md) |
|
|
108
110
|
| **Bootstrap** (zero-friction substrate install) | `gantry init` + packaged [`templates/`](templates/) |
|
|
109
|
-
| **Architecture pointer** (where agents find code layout) | [`.gitagent/ARCHITECTURE.pointer.json`](.gitagent/ARCHITECTURE.pointer.json), [ARCHITECTURE-DISCOVERY.md](.gitagent/
|
|
110
|
-
| **Work order + commit receipt** | YAML via `gantry legislate` + [`.gitagent/
|
|
111
|
+
| **Architecture pointer** (where agents find code layout) | [`.gitagent/ARCHITECTURE.pointer.json`](.gitagent/ARCHITECTURE.pointer.json), [ARCHITECTURE-DISCOVERY.md](.gitagent/planner/ARCHITECTURE-DISCOVERY.md) |
|
|
112
|
+
| **Work order + commit receipt** | YAML via `gantry legislate` + [`.gitagent/planner/MISSION.example.yaml`](.gitagent/planner/MISSION.example.yaml); Markdown reference: [`.gitagent/planner/MISSION.template.md`](.gitagent/planner/MISSION.template.md), [`.gitagent/planner/commit-template.md`](.gitagent/planner/commit-template.md) |
|
|
111
113
|
| **gantry CLI** | `npm install -g @jeger-ai/opengantry` or `npx @jeger-ai/opengantry` — see [gantry](#gantry-cli) |
|
|
112
114
|
| **Full orientation + workflow diagram** | [`.gitagent/README.md`](.gitagent/README.md) |
|
|
113
115
|
|
|
114
116
|
Core behaviors in plain language:
|
|
115
117
|
|
|
116
118
|
- **Git-native missions:** commit subjects use **`[MSN-XXXX]`** so history is greppable (`git log --grep='MSN-0042'`).
|
|
117
|
-
- **Auditable execution log:** verifier PASS requires quotes from **`
|
|
119
|
+
- **Auditable execution log:** verifier PASS requires quotes from **`EXECUTOR_LOG.md`** (process control paired with SOD and deterministic gates).
|
|
118
120
|
- **Risk tiers:** cheap automation where safe; stricter human paths for sensitive areas.
|
|
119
121
|
- **Approved edit paths:** work under declared **tmvc_roots**; **forbidden zones** are hard stops; out-of-scope access needs a logged **context request**.
|
|
120
|
-
- **Honest limits:** trace mapping is **not cryptographic proof**—it records what ran under your reviewed mission (see [`.gitagent/
|
|
122
|
+
- **Honest limits:** trace mapping is **not cryptographic proof**—it records what ran under your reviewed mission (see [`.gitagent/planner/RULES.md`](.gitagent/planner/RULES.md)).
|
|
121
123
|
|
|
122
124
|
## Start here (5 minutes)
|
|
123
125
|
|
|
124
126
|
```bash
|
|
125
127
|
gantry init --tutorial # or: gantry init && gantry onboarding
|
|
126
|
-
gantry
|
|
128
|
+
gantry planner set "$(git config user.email)"
|
|
127
129
|
gantry start "Your first change" --msn MSN-0001 --skill-key <manifest-key>
|
|
128
|
-
#
|
|
130
|
+
# Planner: review mission scope/gates, then commit [MSN-0001] including the mission file
|
|
129
131
|
git log --grep='MSN-' --oneline
|
|
130
132
|
```
|
|
131
133
|
|
|
132
134
|
### Human handbrake
|
|
133
135
|
|
|
134
|
-
If you do **not** review the **mission** under `.gitagent/missions/` **before** the
|
|
136
|
+
If you do **not** review the **mission** under `.gitagent/missions/` **before** the executor runs, the trace records **what you allowed to happen**—not a substitute for intent checks. You still sign off on scope, TMVC roots, and the deterministic gate.
|
|
135
137
|
|
|
136
138
|
## Using this outside the OpenGantry repo
|
|
137
139
|
|
|
@@ -156,7 +158,7 @@ From a built OpenGantry tree (or after copying the `gantry` CLI + `templates/` i
|
|
|
156
158
|
```bash
|
|
157
159
|
npm ci && npm run build # in the OpenGantry repo, or use a globally linked gantry
|
|
158
160
|
gantry init --tutorial # recommended first run; or gantry init (wizard / --yes)
|
|
159
|
-
gantry
|
|
161
|
+
gantry planner set "$(git config user.email)" # repo-local (recommended)
|
|
160
162
|
gantry doctor
|
|
161
163
|
git config core.hooksPath .githooks
|
|
162
164
|
```
|
|
@@ -181,9 +183,9 @@ After `init`, customize your manifest and skills, then legislate. See [`docs/ADO
|
|
|
181
183
|
|
|
182
184
|
- Edit **[`.gitagent/foreman/MANIFEST.json`](.gitagent/foreman/MANIFEST.json)**
|
|
183
185
|
Set `path_risks`, `risk_keywords`, and each skill's `tmvc_roots`, `forbidden_zones`, and `trust_threshold` to match **your** directories and risk appetite.
|
|
184
|
-
- Align **[`.gitagent/
|
|
186
|
+
- Align **[`.gitagent/planner/RULES.md`](.gitagent/planner/RULES.md)** with your review policy (tiers, who counts as "human audit", merge gates).
|
|
185
187
|
- Point **deterministic gates** in missions at **your** stack (`npm test`, `pytest`, `cargo test`, etc.).
|
|
186
|
-
- Store mission files you intend to **`gantry verify`** under **`.gitagent/missions/`** and configure **
|
|
188
|
+
- Store mission files you intend to **`gantry verify`** under **`.gitagent/missions/`** and configure **Planner allowlist** per repo (`gantry planner set`, `.gitagent/foreman/PLANNER.allowlist.local`, or `git config gantry.plannerEmails`).
|
|
187
189
|
|
|
188
190
|
**Concrete gate example** (YAML fields in a mission file; adjust paths and commands):
|
|
189
191
|
|
|
@@ -192,7 +194,7 @@ gate_command: "npm test -- src/components/Button.test.tsx"
|
|
|
192
194
|
gate_success_substring: "Tests: 1 passed"
|
|
193
195
|
```
|
|
194
196
|
|
|
195
|
-
The gate is whatever command **fails closed** for your repo (lint, typecheck, integration suite). One explicit command beats a vague "run tests somewhere." Primary reference: [`.gitagent/
|
|
197
|
+
The gate is whatever command **fails closed** for your repo (lint, typecheck, integration suite). One explicit command beats a vague "run tests somewhere." Primary reference: [`.gitagent/planner/MISSION.example.yaml`](.gitagent/planner/MISSION.example.yaml). Markdown missions remain supported (`gantry verify` parses both); [`.gitagent/planner/MISSION.template.md`](.gitagent/planner/MISSION.template.md) is a human-readable reference, not the `legislate` default.
|
|
196
198
|
|
|
197
199
|
### gantry CLI
|
|
198
200
|
|
|
@@ -206,32 +208,32 @@ Requires **Node.js 24+** (Active LTS line). Published as **`@jeger-ai/opengantry
|
|
|
206
208
|
|
|
207
209
|
| Step | Command | Outcome |
|
|
208
210
|
|------|---------|---------|
|
|
209
|
-
| Onboard | `gantry init --tutorial` or `gantry onboarding` | Feel
|
|
210
|
-
| Scope + approve | `gantry start` →
|
|
211
|
+
| Onboard | `gantry init --tutorial` or `gantry onboarding` | Feel Planner stamp + verify loop (~3 min) |
|
|
212
|
+
| Scope + approve | `gantry start` → Planner `[MSN-…]` commit | Unreviewed stub cannot pass full verify |
|
|
211
213
|
| Prove work | `gantry verify` | Gate + log quotes + greppable history |
|
|
212
214
|
|
|
213
|
-
**Global output:** `gantry --audience
|
|
215
|
+
**Global output:** `gantry --audience executor\|planner\|verifier\|platform <cmd>` (or `GXT_AUDIENCE=verifier` in CI — silence unless `[GXT_*]` errors).
|
|
214
216
|
|
|
215
217
|
| Command | Purpose |
|
|
216
218
|
|--------|---------|
|
|
217
219
|
| `gantry init` | Bootstrap substrate + IDE packs + hooks + CI. `--tutorial` runs guided first loop after scaffold. |
|
|
218
|
-
| `gantry upgrade` | Plan substrate updates (`gantry upgrade plan` / `--dry-run` for preview JSON). Stage with `gantry upgrade`; `gantry upgrade apply --mission …` after
|
|
220
|
+
| `gantry upgrade` | Plan substrate updates (`gantry upgrade plan` / `--dry-run` for preview JSON). Stage with `gantry upgrade`; `gantry upgrade apply --mission …` after Planner commit. |
|
|
219
221
|
| `gantry check` | Validate `MANIFEST.json` shape + **Rule 4.4** sync: every `manifest.skills` key must have `skills/<key>.md`, with no orphan skill files. |
|
|
220
|
-
| `gantry status` | GXT readiness dashboard (`--json`, `--verbose`, `--audience
|
|
222
|
+
| `gantry status` | GXT readiness dashboard (`--json`, `--verbose`, `--audience executor\|planner\|verifier\|platform`). |
|
|
221
223
|
| `gantry start "<intent>"` | Goal-first orchestration: triage → legislate stub → runtime next steps (`--msn`, `--skill-key`, `--json`). |
|
|
222
224
|
| `gantry onboarding` | Interactive walkthrough of the strict mission loop. Blocks on corrupt configured integration state; allows pristine uninitialized repos. |
|
|
223
|
-
| `gantry doctor` | Active readiness check (manifest,
|
|
225
|
+
| `gantry doctor` | Active readiness check (manifest, Planner email, bypass secret match, hooks, architecture pointer, integration staleness). Warnings exit 0. `--audience` tailors next steps. |
|
|
224
226
|
| `gantry triage "<intent>"` | Foreman-style routing ([`SOUL.md`](.gitagent/foreman/SOUL.md)). `--json` for machine output (may include non-binding `adr_hints` from [`.gitagent/out-of-scope/`](.gitagent/out-of-scope/README.md)). `--emit-mission --msn MSN-0007` writes `.gitagent/missions/ACTIVE_MISSION.md` by default on **DIRECT_EXECUTION** only. |
|
|
225
|
-
| `gantry
|
|
226
|
-
| `gantry legislate "<intent>" --msn MSN-0007` | Emit stub **YAML** mission under `.gitagent/missions/` with explicit MSN (`--skill-key` when triage would escalate; `--gate-command` / `--gate-success-substring` for one-click handoff).
|
|
227
|
-
| `gantry mission validate --file <path>` | Validate a mission `.md` or `.yaml` (YAML checked against [`.gitagent/
|
|
227
|
+
| `gantry planner show\|set` | Repo-local Planner git-proof allowlist (`.gitagent/foreman/PLANNER.allowlist.local`; avoids global `GANTRY_PLANNER_EMAILS` leaking across projects). |
|
|
228
|
+
| `gantry legislate "<intent>" --msn MSN-0007` | Emit stub **YAML** mission under `.gitagent/missions/` with explicit MSN (`--skill-key` when triage would escalate; `--gate-command` / `--gate-success-substring` for one-click handoff). Planner still **`git commit`**-legislates from an allowlisted email. |
|
|
229
|
+
| `gantry mission validate --file <path>` | Validate a mission `.md` or `.yaml` (YAML checked against [`.gitagent/planner/MISSION.schema.yaml`](.gitagent/planner/MISSION.schema.yaml)). |
|
|
228
230
|
| `gantry mission snapshot --file <path>` | Write start-state JSON under `.gitagent/history/` (git HEAD, branch, dirty flag, manifest hash, hashes of files under the mission skill's `tmvc_roots`). |
|
|
229
|
-
| `gantry runtime env --mission <path>` |
|
|
230
|
-
| `gantry runtime exec --mission <path> -- <cmd…>` | Run
|
|
231
|
-
| `gantry context-request --path <p…> --reason <text>` | Append a PENDING Context Request to `
|
|
231
|
+
| `gantry runtime env --mission <path>` | Executor Runtime Contract: emit `GXT_REPO_ROOT`, `GXT_MISSION_FILE`, `GXT_MSN_ID`, `GXT_SKILL_KEY`, `GXT_TMVC_ROOTS`, `GXT_FORBIDDEN_ZONES`, `GXT_EXECUTOR_LOG`. Default: POSIX `export …` lines; `--json` for scripts. [.gitagent/planner/RUNTIME.md](.gitagent/planner/RUNTIME.md). |
|
|
232
|
+
| `gantry runtime exec --mission <path> -- <cmd…>` | Run executor command with mission env, telemetry capture, and forbidden-zone scan (strongest TMVC trap). |
|
|
233
|
+
| `gantry context-request --path <p…> --reason <text>` | Append a PENDING Context Request to `EXECUTOR_LOG.md` (RULES §4 TMVC expansion). Uses pinned mission or `--mission`. `--stage-worker-log` opt-in stages the log. |
|
|
232
234
|
| `gantry tmvc guard [--strict]` | Pre-commit TMVC path guard: advisory warnings on staged paths outside mission `tmvc_roots` (stderr; exit 0). `--strict` or `GXT_TMVC_GUARD_STRICT=1` blocks. Skips when no pinned mission. |
|
|
233
235
|
| `gantry mcp serve` | Stdio MCP server exposing `gxt_*` tools (legislation, pin, runtime env, verify with `fix_hints`, `gxt_start_orchestration`, exec). `gxt_verify` uses the flat `--json` envelope — see [ADOPTION.md § MCP verify envelope](docs/ADOPTION.md). Configure via `.cursor/mcp.json`. |
|
|
234
|
-
| `gantry verify --mission <path>` | Teacher-approved mission commit + gate + trace. **`--json`** structured output (`status`, `phase`, `error_code`, `fix_hints`). **`--fix`** guided repair; when a **Code Surgeon** applies a quarantine mutation, logs `[SURGEON-MUTATION]` to `
|
|
236
|
+
| `gantry verify --mission <path>` | Teacher-approved mission commit + gate + trace. **`--json`** structured output (`status`, `phase`, `error_code`, `fix_hints`). **`--fix`** guided repair; when a **Code Surgeon** applies a quarantine mutation, logs `[SURGEON-MUTATION]` to `EXECUTOR_LOG.md` and reruns full verify with fix disabled (never auto-PASS). CI: `--audience verifier` (errors only). Failures emit **`GXT_*`** codes. Optional **`kpi_gate`** phase reads committed [KPI report](.gitagent/planner/KPI-REPORT.schema.yaml) (after gate, before trace). **`--ci`** / **`--pre-push`**: fail-closed on stale KPI evidence. |
|
|
235
237
|
| `gantry scan --mission <path>` | Run mission `llm_verifiers` (BYO commands) and write namespaced KPI report JSON for `kpi_gate`. |
|
|
236
238
|
| `gantry register <dir>` | AST discovery: propose skill scope from folder imports/exports (does not mutate `MANIFEST.json`). |
|
|
237
239
|
| `gantry check-imports <dir> --ban <spec…>` | Deterministic banned-import scan (usable as `gate_command`; no LLM). |
|
|
@@ -242,16 +244,16 @@ Requires **Node.js 24+** (Active LTS line). Published as **`@jeger-ai/opengantry
|
|
|
242
244
|
| `gantry context-feed [--json] [--clear]` | Read or atomically clear the latest verify remediation snapshot (`.gitagent/tmp/NEXT_REMEDIATION.json`) for IDE repair loops. |
|
|
243
245
|
| `gantry audit-rigor [--json] [--strict]` | Meta-governance audit: TypeScript strictness, coverage artifacts, MANIFEST wildcard hygiene. |
|
|
244
246
|
|
|
245
|
-
**Who can approve missions (
|
|
247
|
+
**Who can approve missions (Planner allowlist):** only allowlisted identities can legislate missions that verify accepts. Precedence:
|
|
246
248
|
|
|
247
|
-
1. `.gitagent/foreman/
|
|
248
|
-
2. `git config gantry.
|
|
249
|
-
3. `
|
|
249
|
+
1. `.gitagent/foreman/PLANNER.allowlist` (+ optional gitignored `.local` merge)
|
|
250
|
+
2. `git config gantry.plannerEmails "a@x.com,b@y.com"`
|
|
251
|
+
3. `GANTRY_PLANNER_EMAILS` env (CI escape hatch only)
|
|
250
252
|
4. implicit `git config user.email` when nothing else is set
|
|
251
253
|
|
|
252
|
-
Use **`gantry
|
|
254
|
+
Use **`gantry planner set "$(git config user.email)"`** after clone — do not rely on a global shell export when you work across multiple projects.
|
|
253
255
|
|
|
254
|
-
###
|
|
256
|
+
### Executor Runtime quickstart
|
|
255
257
|
|
|
256
258
|
Agents (Cursor, Junie, local scripts) should not guess TMVC roots — read them from **`gantry runtime env`**.
|
|
257
259
|
|
|
@@ -260,7 +262,7 @@ Each `--mission` path must refer to **an existing mission file** (ENOENT means t
|
|
|
260
262
|
```bash
|
|
261
263
|
npm ci && npm run build
|
|
262
264
|
|
|
263
|
-
# Existing mission (tracked example — swap for yours after
|
|
265
|
+
# Existing mission (tracked example — swap for yours after Planner legislates it):
|
|
264
266
|
eval "$(node dist/cli/index.js runtime env --mission .gitagent/missions/example.verify.yaml)"
|
|
265
267
|
|
|
266
268
|
# Or machine-readable JSON for a wrapper script:
|
|
@@ -270,17 +272,17 @@ node dist/cli/index.js runtime env --mission .gitagent/missions/example.verify.y
|
|
|
270
272
|
node dist/cli/index.js runtime exec --mission .gitagent/missions/example.verify.yaml -- <your-agent-command>
|
|
271
273
|
```
|
|
272
274
|
|
|
273
|
-
Inspect `GXT_TMVC_ROOTS`, `GXT_FORBIDDEN_ZONES`, and `
|
|
275
|
+
Inspect `GXT_TMVC_ROOTS`, `GXT_FORBIDDEN_ZONES`, and `GXT_EXECUTOR_LOG`; write forensic trace quotes to **`EXECUTOR_LOG.md`** (or `--executor-log` at verify time), then **`gantry verify`** as usual.
|
|
274
276
|
|
|
275
|
-
**Legislate a stub mission (
|
|
277
|
+
**Legislate a stub mission (Planner edits + commits — then wire `runtime env` to that file path):**
|
|
276
278
|
|
|
277
279
|
```bash
|
|
278
280
|
node dist/cli/index.js legislate "Fix login spinner on checkout — ui" --msn MSN-0007 --skill-key ui
|
|
279
|
-
#
|
|
281
|
+
# Planner: tune gate/trace rows; git commit -m "[MSN-0007] legislate …" including the mission file
|
|
280
282
|
# eval "$(node dist/cli/index.js runtime env --mission .gitagent/missions/MSN-0007.<slug>.yaml)"
|
|
281
283
|
```
|
|
282
284
|
|
|
283
|
-
Details and variable semantics: [.gitagent/
|
|
285
|
+
Details and variable semantics: [.gitagent/planner/RUNTIME.md](.gitagent/planner/RUNTIME.md).
|
|
284
286
|
|
|
285
287
|
### 3. Wire agents (and optionally CI)
|
|
286
288
|
|
|
@@ -292,7 +294,7 @@ Details and variable semantics: [.gitagent/teacher/RUNTIME.md](.gitagent/teacher
|
|
|
292
294
|
- **gantry:** `npm ci` / `npm run build`, then `gantry check`, `gantry doctor`, and unit tests.
|
|
293
295
|
- **Manifest (jq parity):** validates [`.gitagent/foreman/MANIFEST.json`](.gitagent/foreman/MANIFEST.json) via [`scripts/validate-gxt.sh`](scripts/validate-gxt.sh) `manifest`.
|
|
294
296
|
- **Changed-code quality (PR only):** ESLint complexity, import layers, line budgets on touched `src/cli/**/*.ts`.
|
|
295
|
-
- **MSN (PR only, path-scoped):** on **pull_request** only, any **non-merge** commit in the PR range that touches `.gitagent/`, repo-root `
|
|
297
|
+
- **MSN (PR only, path-scoped):** on **pull_request** only, any **non-merge** commit in the PR range that touches `.gitagent/`, repo-root `EXECUTOR_LOG.md`, `.githooks/`, or [`.github/workflows/gxt-validate.yml`](.github/workflows/gxt-validate.yml) must have a subject starting with **`[MSN-NNNN]`** (four digits). Other paths (e.g. root `README.md` only) do not trigger this check.
|
|
296
298
|
- **Mission purity (PR only):** [`scripts/verify-pr-missions.sh`](scripts/verify-pr-missions.sh) requires exactly one `[MSN-NNNN]` in `${base}..${head}` commit subjects before full `gantry verify` on changed missions.
|
|
297
299
|
- **Local (full stack):** [`scripts/dev-validate.sh`](scripts/dev-validate.sh) / `npm run validate` — superset of CI (includes changed-code + MSN vs `origin/main`).
|
|
298
300
|
|
|
@@ -308,7 +310,7 @@ npm run validate
|
|
|
308
310
|
|
|
309
311
|
### 4. Run the loop (human + models)
|
|
310
312
|
|
|
311
|
-
High level: **Foreman** routes → **
|
|
313
|
+
High level: **Foreman** routes → **Planner** authors a mission when needed → **Worker** executes inside TMVC and writes **`EXECUTOR_LOG.md`** → **deterministic gate** runs → **Verifier** maps passes to the log → commits follow **`[MSN-XXXX]`** + receipt template.
|
|
312
314
|
|
|
313
315
|
Details and the workflow diagram: **[`.gitagent/README.md`](.gitagent/README.md)**.
|
|
314
316
|
|
|
@@ -318,7 +320,7 @@ If you cannot run `gantry init`, copy at least:
|
|
|
318
320
|
|
|
319
321
|
- `.gitagent/` (entire tree)
|
|
320
322
|
- `skills/` (optional in minimal vendoring, but **required** for Rule 4.4: one `skills/<skill-key>.md` per manifest skill — enforced by `gantry check`)
|
|
321
|
-
- `.githooks/` (optional: creates an empty repo-root `
|
|
323
|
+
- `.githooks/` (optional: creates an empty repo-root `EXECUTOR_LOG.md` when you check out a feature branch)
|
|
322
324
|
- `AGENTS.md` (or merge its bullets into your existing agent instructions)
|
|
323
325
|
- Optionally `.cursor/rules/opengantry-gxt-substrate.mdc` if you use Cursor
|
|
324
326
|
|
|
@@ -329,7 +331,7 @@ Add to your **`.gitignore`** (if not already present):
|
|
|
329
331
|
.gitagent/history/
|
|
330
332
|
```
|
|
331
333
|
|
|
332
|
-
**Empty `
|
|
334
|
+
**Empty `EXECUTOR_LOG.md` on branch checkout:** after copying, point Git at the vendored hooks once per clone (`git config core.hooksPath .githooks`). On branch checkouts **other than** `main` or `master`, if `EXECUTOR_LOG.md` is missing at the repo root, [`.githooks/post-checkout`](.githooks/post-checkout) copies [`.gitagent/planner/EXECUTOR_LOG.template.md`](.gitagent/planner/EXECUTOR_LOG.template.md) into place. It **never overwrites** an existing file. Keep formatters off `EXECUTOR_LOG.md` — see [docs/ADOPTION.md](docs/ADOPTION.md) (formatter guard under stale trace evidence).
|
|
333
335
|
|
|
334
336
|
## Staying in sync
|
|
335
337
|
|
|
@@ -338,7 +340,7 @@ Add to your **`.gitignore`** (if not already present):
|
|
|
338
340
|
```bash
|
|
339
341
|
npm install @jeger-ai/opengantry@latest
|
|
340
342
|
gantry upgrade
|
|
341
|
-
# Review .gitagent/.upgrade-tmp/;
|
|
343
|
+
# Review .gitagent/.upgrade-tmp/; Planner-commit the upgrade mission YAML
|
|
342
344
|
gantry upgrade apply --mission .gitagent/missions/MSN-9001.upgrade-vX.Y.Z.yaml
|
|
343
345
|
gantry doctor
|
|
344
346
|
```
|
|
@@ -370,8 +372,8 @@ git clone https://github.com/jeger-ai/opengantry.git /tmp/opengantry && \
|
|
|
370
372
|
Fetch a single file from `main` when you only want the latest template text:
|
|
371
373
|
|
|
372
374
|
```bash
|
|
373
|
-
curl -fsSL -o .gitagent/
|
|
374
|
-
https://raw.githubusercontent.com/jeger-ai/opengantry/main/.gitagent/
|
|
375
|
+
curl -fsSL -o .gitagent/planner/MISSION.example.yaml \
|
|
376
|
+
https://raw.githubusercontent.com/jeger-ai/opengantry/main/.gitagent/planner/MISSION.example.yaml
|
|
375
377
|
```
|
|
376
378
|
|
|
377
379
|
Always **review the diff** before commit; never bulk-overwrite a customized `MANIFEST.json`.
|
|
@@ -380,16 +382,16 @@ Always **review the diff** before commit; never bulk-overwrite a customized `MAN
|
|
|
380
382
|
|
|
381
383
|
| Pattern | Typical shape | Audit / production readiness |
|
|
382
384
|
|---------|----------------|------------------------------|
|
|
383
|
-
| **GXT / OpenGantry** | Git-native missions, manifest routing, deterministic gates, auditable log mapped to **`
|
|
385
|
+
| **GXT / OpenGantry** | Git-native missions, manifest routing, deterministic gates, auditable log mapped to **`EXECUTOR_LOG.md`**, human `[MSN-XXXX]` approval + SOD ([`RULES.md`](.gitagent/planner/RULES.md)) | **Autonomous Repository Engineering** — scoped missions, not always-on chat. Greppable missions + gate output + log quotes. **Local-first**, **vendor-neutral** governance engine in your repo. |
|
|
384
386
|
| Cloud observability / agent dashboards | Hosted UI for metrics, traces, or agent session visibility | Strong for **fleet visibility**; per-repo change authorization and Git-native audit artifacts are typically layered separately |
|
|
385
387
|
| Agent "swarm" / choreography layers | Orchestrates model calls across services; emphasizes throughput and parallelism | Strong on **coverage** of tasks; lineage and per-change evidence depends on tooling above the swarm |
|
|
386
388
|
| Unstructured desktop assistants | Reactive help in-editor or OS-wide; informal plans | Lightweight for exploration; weakest default for **reproducible** production sign-off without additional discipline |
|
|
387
389
|
|
|
388
|
-
GXT deliberately trades "always-on improvisation" for a **narrow, inspectable envelope**: Foreman chooses a skill footprint, Teachers legislate commits,
|
|
390
|
+
GXT deliberately trades "always-on improvisation" for a **narrow, inspectable envelope**: Foreman chooses a skill footprint, Teachers legislate commits, Executors stay inside TMVC (or Context Request → accept/reject), and Verifiers bind PASS claims to log quotes.
|
|
389
391
|
|
|
390
392
|
## Relationship to this repository
|
|
391
393
|
|
|
392
|
-
**jeger-ai/opengantry** is the **canonical reference tree** for **GXT** (manifest `schema_version` **v0.5.0** law + **`gantry` v2.
|
|
394
|
+
**jeger-ai/opengantry** is the **canonical reference tree** for **GXT** (manifest `schema_version` **v0.5.0** law + **`gantry` v2.4.0** CLI). Install the CLI with `npm install -g @jeger-ai/opengantry`, or fork this repo and run `gantry init` in your project.
|
|
393
395
|
|
|
394
396
|
## Security
|
|
395
397
|
|
|
@@ -12,8 +12,17 @@ export interface ArchCredUnsetOptions extends ArchOptions {
|
|
|
12
12
|
export interface ArchCredStatusOptions extends ArchOptions {
|
|
13
13
|
slot?: string;
|
|
14
14
|
}
|
|
15
|
+
export interface ArchFetchOptions extends ArchOptions {
|
|
16
|
+
json?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface ArchCheckOptions extends ArchOptions {
|
|
19
|
+
json?: boolean;
|
|
20
|
+
files?: string[];
|
|
21
|
+
}
|
|
15
22
|
export declare function runArchPointer(options?: ArchOptions): void;
|
|
16
23
|
export declare function runArchCredSet(options: ArchCredSetOptions): Promise<void>;
|
|
17
24
|
export declare function runArchCredUnset(options: ArchCredUnsetOptions): void;
|
|
18
25
|
export declare function runArchCredStatus(options?: ArchCredStatusOptions): void;
|
|
26
|
+
export declare function runArchFetch(options?: ArchFetchOptions): Promise<void>;
|
|
27
|
+
export declare function runArchCheckCommand(options?: ArchCheckOptions): void;
|
|
19
28
|
//# sourceMappingURL=arch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/arch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"arch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/arch.ts"],"names":[],"mappings":"AAWA,OAAO,EAOL,KAAK,0BAA0B,EAChC,MAAM,mCAAmC,CAAC;AAE3C,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,0BAA0B,CAAC;CAClC;AAED,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACvD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAE,WAAgB,GAAG,IAAI,CAgB9D;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B/E;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAgBpE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,qBAA0B,GAAG,IAAI,CAW3E;AAED,wBAAsB,YAAY,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBhF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,gBAAqB,GAAG,IAAI,CA6BxE"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { getRepoRoot } from "../lib/git.js";
|
|
2
2
|
import { logError, logInfo, setExitCode, errorMessage } from "../lib/cli-io.js";
|
|
3
|
+
import { fetchExternalArchitecture } from "../lib/architecture-fetch.js";
|
|
4
|
+
import { formatArchCheckHuman, runArchCheck, } from "../lib/target-architecture.js";
|
|
3
5
|
import { loadArchitecturePointer, summarizeArchitecturePointer, } from "../lib/architecture-pointer.js";
|
|
4
6
|
import { logCredentialStatus, parseCredentialValuesFromStdin, readStdinCredentialPayload, removeArchitectureCredential, validateCredentialSlot, writeArchitectureCredential, } from "../lib/architecture-credential.js";
|
|
5
7
|
export function runArchPointer(options = {}) {
|
|
@@ -83,4 +85,67 @@ export function runArchCredStatus(options = {}) {
|
|
|
83
85
|
}
|
|
84
86
|
logCredentialStatus(repoRoot, options.slot);
|
|
85
87
|
}
|
|
88
|
+
export async function runArchFetch(options = {}) {
|
|
89
|
+
let repoRoot;
|
|
90
|
+
try {
|
|
91
|
+
repoRoot = getRepoRoot(options.cwd);
|
|
92
|
+
}
|
|
93
|
+
catch (e) {
|
|
94
|
+
logError(e instanceof Error ? e.message.replace("gantry: ", "") : String(e));
|
|
95
|
+
setExitCode(2);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
const result = await fetchExternalArchitecture({ repoRoot });
|
|
100
|
+
if (options.json) {
|
|
101
|
+
logInfo(JSON.stringify(result, null, 2));
|
|
102
|
+
}
|
|
103
|
+
else if (result.status === "fetched" && result.body !== undefined) {
|
|
104
|
+
process.stdout.write(result.body);
|
|
105
|
+
if (!result.body.endsWith("\n"))
|
|
106
|
+
process.stdout.write("\n");
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
logInfo(result.message);
|
|
110
|
+
}
|
|
111
|
+
if (result.status === "fallback")
|
|
112
|
+
setExitCode(1);
|
|
113
|
+
}
|
|
114
|
+
catch (e) {
|
|
115
|
+
logError(errorMessage(e));
|
|
116
|
+
setExitCode(2);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
export function runArchCheckCommand(options = {}) {
|
|
120
|
+
let repoRoot;
|
|
121
|
+
try {
|
|
122
|
+
repoRoot = getRepoRoot(options.cwd);
|
|
123
|
+
}
|
|
124
|
+
catch (e) {
|
|
125
|
+
logError(e instanceof Error ? e.message.replace("gantry: ", "") : String(e));
|
|
126
|
+
setExitCode(2);
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
const files = options.files?.length ? options.files : [];
|
|
130
|
+
if (files.length === 0) {
|
|
131
|
+
logError("gantry arch check: pass one or more .ts file paths");
|
|
132
|
+
setExitCode(2);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
try {
|
|
136
|
+
const result = runArchCheck(repoRoot, files);
|
|
137
|
+
if (options.json) {
|
|
138
|
+
logInfo(JSON.stringify({ schema_version: 1, ok: result.ok, violations: result.violations }, null, 2));
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
logInfo(formatArchCheckHuman(result));
|
|
142
|
+
}
|
|
143
|
+
if (!result.ok)
|
|
144
|
+
setExitCode(1);
|
|
145
|
+
}
|
|
146
|
+
catch (e) {
|
|
147
|
+
logError(errorMessage(e));
|
|
148
|
+
setExitCode(2);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
86
151
|
//# sourceMappingURL=arch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arch.js","sourceRoot":"","sources":["../../../src/cli/commands/arch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EACL,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,mBAAmB,EACnB,8BAA8B,EAC9B,0BAA0B,EAC1B,4BAA4B,EAC5B,sBAAsB,EACtB,2BAA2B,GAE5B,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"arch.js","sourceRoot":"","sources":["../../../src/cli/commands/arch.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,8 @@ export interface ContextRequestCliOptions {
|
|
|
3
3
|
paths: string[];
|
|
4
4
|
reason?: string;
|
|
5
5
|
proposed?: string[];
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
stageExecutorLog?: boolean;
|
|
7
|
+
executorLog?: string;
|
|
8
8
|
json?: boolean;
|
|
9
9
|
}
|
|
10
10
|
export declare function runContextRequest(options: ContextRequestCliOptions): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-request.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/context-request.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,
|
|
1
|
+
{"version":3,"file":"context-request.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/context-request.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAoFzE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
|
-
import { appendContextRequest,
|
|
2
|
+
import { appendContextRequest, stageExecutorLogIfRequested, executorLogRepoRelative, } from "../lib/context-request.js";
|
|
3
3
|
import { logError, logInfo, logWarn, setExitCode, errorMessage } from "../lib/cli-io.js";
|
|
4
4
|
import { resolveRuntimeEnv } from "../lib/runtime-env.js";
|
|
5
5
|
import { resolvePinnedMission } from "../lib/missions/parser.js";
|
|
@@ -26,11 +26,11 @@ export function runContextRequest(options) {
|
|
|
26
26
|
return;
|
|
27
27
|
}
|
|
28
28
|
const resolved = resolveRuntimeEnv(workspace, missionRel);
|
|
29
|
-
const
|
|
30
|
-
? path.resolve(workspace.root, options.
|
|
31
|
-
: resolved.
|
|
29
|
+
const executorLogPath = options.executorLog
|
|
30
|
+
? path.resolve(workspace.root, options.executorLog)
|
|
31
|
+
: resolved.executor_log;
|
|
32
32
|
const line = appendContextRequest({
|
|
33
|
-
|
|
33
|
+
executorLogPath,
|
|
34
34
|
entry: {
|
|
35
35
|
status: "PENDING",
|
|
36
36
|
paths,
|
|
@@ -39,31 +39,31 @@ export function runContextRequest(options) {
|
|
|
39
39
|
msnId: resolved.msn_id || undefined,
|
|
40
40
|
},
|
|
41
41
|
});
|
|
42
|
-
const stageResult =
|
|
43
|
-
const
|
|
42
|
+
const stageResult = stageExecutorLogIfRequested(workspace.root, executorLogPath, options.stageExecutorLog === true);
|
|
43
|
+
const executorLogRel = executorLogRepoRelative(workspace.root, executorLogPath);
|
|
44
44
|
if (options.json) {
|
|
45
45
|
logInfo(JSON.stringify({
|
|
46
46
|
status: "ok",
|
|
47
47
|
mission: resolved.mission_file,
|
|
48
48
|
msn_id: resolved.msn_id,
|
|
49
|
-
|
|
49
|
+
executor_log: executorLogRel,
|
|
50
50
|
line,
|
|
51
51
|
staged: stageResult.staged,
|
|
52
52
|
}, null, 2));
|
|
53
53
|
return;
|
|
54
54
|
}
|
|
55
|
-
logInfo(`context-request: appended to ${
|
|
55
|
+
logInfo(`context-request: appended to ${executorLogRel}`);
|
|
56
56
|
logInfo(` ${line}`);
|
|
57
|
-
if (options.
|
|
57
|
+
if (options.stageExecutorLog === true) {
|
|
58
58
|
if (stageResult.staged) {
|
|
59
|
-
logInfo(` staged: ${
|
|
59
|
+
logInfo(` staged: ${executorLogRel}`);
|
|
60
60
|
}
|
|
61
61
|
else {
|
|
62
|
-
logWarn(`failed to stage ${
|
|
62
|
+
logWarn(`failed to stage ${executorLogRel}: ${stageResult.stderr || "git add failed"}`);
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
else {
|
|
66
|
-
logWarn(`run: git add ${
|
|
66
|
+
logWarn(`run: git add ${executorLogRel} (or pass --stage-worker-log to stage automatically)`);
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
catch (e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-request.js","sourceRoot":"","sources":["../../../src/cli/commands/context-request.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,oBAAoB,EACpB,
|
|
1
|
+
{"version":3,"file":"context-request.js","sourceRoot":"","sources":["../../../src/cli/commands/context-request.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ import { defaultInitProfile, mergeInitProfile, profileFromCliFlags, shouldRunInt
|
|
|
11
11
|
import { applyInitWrites, logInitNextSteps, logInitSummary, planInitAssets, } from "../lib/init-plan.js";
|
|
12
12
|
import { mergeGitignoreFromTemplate, mergePrettierignoreFromTemplate, } from "../lib/file-merge-gxt.js";
|
|
13
13
|
import { ensureSubstrateVersionOnInit } from "../lib/substrate-version.js";
|
|
14
|
-
import {
|
|
14
|
+
import { ensurePlannerAllowlistOnInit } from "../lib/planner-identity.js";
|
|
15
15
|
function planArchitecturePointerWrite(profile, repoRoot) {
|
|
16
16
|
const targetAbs = path.join(repoRoot, REL_ARCHITECTURE_POINTER.split("/").join(path.sep));
|
|
17
17
|
if (fs.existsSync(targetAbs))
|
|
@@ -169,7 +169,7 @@ export async function runInit(options = {}) {
|
|
|
169
169
|
}
|
|
170
170
|
applyInitWrites(allWrites);
|
|
171
171
|
ensureSubstrateVersionOnInit(repoRoot, templatesRoot);
|
|
172
|
-
|
|
172
|
+
ensurePlannerAllowlistOnInit(repoRoot);
|
|
173
173
|
if (docWrite) {
|
|
174
174
|
logInfo(`${CLI_NAME} init: wrote composed ${profile.integrationsDocPath}`);
|
|
175
175
|
}
|
|
@@ -19,7 +19,7 @@ async function resolveOnboardingMissionPath(p, root, intent) {
|
|
|
19
19
|
const useExample = fs.existsSync(path.join(root, EXAMPLE_MISSION));
|
|
20
20
|
if (useExample) {
|
|
21
21
|
p.log.step("Step 3 — Example mission available");
|
|
22
|
-
logInfo(` Use existing ${EXAMPLE_MISSION} after
|
|
22
|
+
logInfo(` Use existing ${EXAMPLE_MISSION} after Planner stamps it.`);
|
|
23
23
|
logInfo(` ${onboardingVerifyHint(EXAMPLE_MISSION)}`);
|
|
24
24
|
return { missionPath, useExample };
|
|
25
25
|
}
|
|
@@ -87,8 +87,8 @@ export async function runOnboarding(options = {}) {
|
|
|
87
87
|
p.cancel("Onboarding cancelled");
|
|
88
88
|
return;
|
|
89
89
|
}
|
|
90
|
-
p.log.step("Step 1 —
|
|
91
|
-
logInfo(' gantry
|
|
90
|
+
p.log.step("Step 1 — Planner allowlist");
|
|
91
|
+
logInfo(' gantry planner set "$(git config user.email)"');
|
|
92
92
|
p.log.step("Step 2 — Declare intent (gantry start)");
|
|
93
93
|
const intent = await p.text({
|
|
94
94
|
message: "What do you want to build?",
|
|
@@ -106,7 +106,7 @@ export async function runOnboarding(options = {}) {
|
|
|
106
106
|
p.outro("Onboarding incomplete");
|
|
107
107
|
return;
|
|
108
108
|
}
|
|
109
|
-
p.log.step("Step 4 —
|
|
109
|
+
p.log.step("Step 4 — Executor runtime");
|
|
110
110
|
logInfo(` ${onboardingRuntimeEnvHint(resolved.missionPath)}`);
|
|
111
111
|
p.log.step("Step 5 — Verify with guided repair");
|
|
112
112
|
logInfo(` ${onboardingVerifyHint(resolved.missionPath)}`);
|