@elmundi/ship-cli 0.14.1 → 0.15.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +17 -16
  2. package/bin/shipctl.mjs +4 -80
  3. package/lib/commands/feedback.mjs +1 -1
  4. package/lib/commands/help.mjs +47 -131
  5. package/lib/commands/init.mjs +17 -250
  6. package/lib/commands/knowledge.mjs +25 -328
  7. package/lib/commands/preflight.mjs +213 -0
  8. package/lib/commands/run.mjs +277 -119
  9. package/lib/commands/trigger.mjs +95 -10
  10. package/lib/config/schema.mjs +68 -11
  11. package/lib/http.mjs +0 -2
  12. package/lib/runtime/routines.mjs +34 -0
  13. package/lib/templates.mjs +2 -2
  14. package/lib/verify/checks/agents-on-disk.mjs +5 -28
  15. package/lib/verify/registry.mjs +7 -8
  16. package/package.json +1 -1
  17. package/lib/artifacts/fs-index.mjs +0 -230
  18. package/lib/cache/store.mjs +0 -422
  19. package/lib/commands/bootstrap.mjs +0 -4
  20. package/lib/commands/callback.mjs +0 -742
  21. package/lib/commands/docs.mjs +0 -90
  22. package/lib/commands/kickoff.mjs +0 -192
  23. package/lib/commands/lanes.mjs +0 -566
  24. package/lib/commands/manifest-catalog.mjs +0 -251
  25. package/lib/commands/migrate.mjs +0 -204
  26. package/lib/commands/new.mjs +0 -452
  27. package/lib/commands/patterns.mjs +0 -160
  28. package/lib/commands/process.mjs +0 -388
  29. package/lib/commands/search.mjs +0 -43
  30. package/lib/commands/sync.mjs +0 -824
  31. package/lib/config/migrate.mjs +0 -223
  32. package/lib/find-ship-root.mjs +0 -75
  33. package/lib/process/specialist-prompt-contract.mjs +0 -171
  34. package/lib/state/lockfile.mjs +0 -180
  35. package/lib/vendor/run-agent.workflow.yml +0 -254
  36. package/lib/verify/checks/artifacts-up-to-date.mjs +0 -78
  37. package/lib/verify/checks/cache-integrity.mjs +0 -51
  38. package/lib/verify/checks/gitignore-cache.mjs +0 -51
  39. package/lib/verify/checks/rules-markers.mjs +0 -135
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @elmundi/ship-cli
2
2
 
3
- `shipctl` is the developer workbench for Ship. Product owners should start in the console and docs; use the CLI when you need local repo setup, config validation, artifact sync, agent rule installation, or reproducible diagnostics.
3
+ `shipctl` is the developer workbench for a Ship-connected repo. The console is for the operator; the CLI is for the engineer. It runs locally for setup, sync, validation, and diagnostics — it does not orchestrate workflows, touch workspace state, or write to the audit log. The customer-side CI uses `shipctl trigger` (and the trigger-spawned `shipctl run`) as a thin entry-point that hands work to the workspace runner.
4
4
 
5
5
  Published package: `@elmundi/ship-cli`. Binary: `shipctl`.
6
6
 
@@ -25,11 +25,10 @@ Use `shipctl` to:
25
25
  - sync patterns, tools, and collections into `.ship/cache/`;
26
26
  - verify local repo wiring in CI or before a PR;
27
27
  - inspect detected stack signals with `doctor`;
28
- - fetch catalog or docs content for agents;
29
- - draft and submit feedback on artifacts;
30
- - run technical routines where the repo-level workflow requires it.
28
+ - read workspace knowledge buckets from inside an agent run;
29
+ - draft and submit feedback on catalog artifacts.
31
30
 
32
- Do not use the CLI as the main product onboarding story. The product setup path is workspace → repo → tracker → knowledge → dashboard/Inbox.
31
+ The product setup path is workspace → repo → tracker → knowledge → dashboard/Inbox, all in the console wizard. The CLI does not duplicate that flow.
33
32
 
34
33
  ## First local setup
35
34
 
@@ -60,22 +59,24 @@ shipctl verify
60
59
 
61
60
  | Command | Use |
62
61
  | --- | --- |
63
- | `shipctl init` | Create config, infer stack, sync selected artifacts, optionally install agent rules. |
64
- | `shipctl doctor` | Inspect repo signals without changing files unless `--write-inventory` is passed. |
65
- | `shipctl verify` | Check config, cache, agent rules, generated files, and optional network/provider reachability. |
62
+ | `shipctl doctor` | Cheap repo health checks: agent rule files installed, config valid, lock fresh, network reachable. |
63
+ | `shipctl verify` | Heavier post-adoption checks (artefact contract, marker drift, network/provider reachability). |
66
64
  | `shipctl sync` | Refresh catalog artifacts into `.ship/cache/`; `--lock` writes a lockfile. |
67
- | `shipctl config` | Show, validate, get, and set `.ship/config.yml` fields. |
68
- | `shipctl pattern|tool|collection` | List, show, fetch, or search artifact bodies. |
69
- | `shipctl docs fetch` | Fetch documentation content for agent context. |
70
- | `shipctl knowledge init` | Seed starter `.ship/knowledge/*.md` files where supported. |
71
- | `shipctl feedback` | Draft and submit artifact or docs feedback. |
72
- | `shipctl telemetry` | Opt-in usage telemetry controls. |
65
+ | `shipctl config` | `show / validate / get / set / init / path` for `.ship/config.yml`. |
66
+ | `shipctl init` | Bootstrap `.ship/`, fetch artifacts, install agent rules in an existing repo. |
67
+ | `shipctl pattern\|tool\|collection` | List, show, fetch, or search artifact bodies. |
68
+ | `shipctl search` | Vector search over docs + prompts. |
69
+ | `shipctl knowledge fetch` | Read a workspace bucket's articles + sync state (the agent's read path). |
70
+ | `shipctl trigger` | CI entry-point: compute due routines and claim each schedule window in Ship. |
71
+ | `shipctl run` | Spawned per routine by `shipctl trigger`: resolve pattern, fetch a ticket if FSM-staged, launch the agent runtime. |
72
+ | `shipctl feedback` | Local markdown drafts; submit creates a GitHub issue against a cited artifact. |
73
+ | `shipctl telemetry` | Opt-in usage telemetry controls (default OFF). |
73
74
 
74
75
  Run `shipctl help` and `shipctl <command> --help` for the exact flag surface.
75
76
 
76
77
  ## Configuration
77
78
 
78
- The CLI reads `.ship/config.yml` from the repo root. It records stack hints, API settings, artifact pins, telemetry preference, cache behavior, and technical routine wiring.
79
+ The CLI reads `.ship/config.yml` from the repo root. It records stack hints, API settings, artifact pins, telemetry preference, cache behavior, and `process.routines` wiring.
79
80
 
80
81
  See [`../documentation/configuration.md`](../documentation/configuration.md) for the maintained field reference.
81
82
 
@@ -131,4 +132,4 @@ npm run shipctl -- help
131
132
  npm test --prefix cli
132
133
  ```
133
134
 
134
- Catalog commands read `artifacts/**/ARTIFACT.md` directly when run inside this repo. Search and docs fetch still use the configured HTTP API.
135
+ Catalog commands read `artifacts/**/ARTIFACT.md` directly when run inside this repo. Search still uses the configured HTTP API.
package/bin/shipctl.mjs CHANGED
@@ -1,9 +1,5 @@
1
1
  #!/usr/bin/env node
2
2
  import { extractGlobalArgv } from "../lib/config.mjs";
3
- import { docsCommand } from "../lib/commands/docs.mjs";
4
- import { searchCommand } from "../lib/commands/search.mjs";
5
- import { patternCommand } from "../lib/commands/patterns.mjs";
6
- import { resourceManifestCommand } from "../lib/commands/manifest-catalog.mjs";
7
3
  import { printHelp } from "../lib/commands/help.mjs";
8
4
  import { initCommand } from "../lib/commands/init.mjs";
9
5
  import { doctorCommand } from "../lib/commands/doctor.mjs";
@@ -39,31 +35,6 @@ try {
39
35
  process.exit(0);
40
36
  }
41
37
 
42
- if (cmd === "search") {
43
- await searchCommand(ctx, rest);
44
- process.exit(0);
45
- }
46
-
47
- if (cmd === "docs") {
48
- await docsCommand(ctx, rest);
49
- process.exit(0);
50
- }
51
-
52
- if (cmd === "pattern" || cmd === "patterns") {
53
- await patternCommand(ctx, rest);
54
- process.exit(0);
55
- }
56
-
57
- if (cmd === "tool" || cmd === "tools") {
58
- await resourceManifestCommand("tool", ctx, rest);
59
- process.exit(0);
60
- }
61
-
62
- if (cmd === "collection" || cmd === "collections") {
63
- await resourceManifestCommand("collection", ctx, rest);
64
- process.exit(0);
65
- }
66
-
67
38
  if (cmd === "init") {
68
39
  await initCommand(ctx, rest);
69
40
  process.exit(0);
@@ -80,12 +51,6 @@ try {
80
51
  process.exit(0);
81
52
  }
82
53
 
83
- if (cmd === "sync") {
84
- const { syncCommand } = await import("../lib/commands/sync.mjs");
85
- await syncCommand(ctx, rest);
86
- process.exit(0);
87
- }
88
-
89
54
  if (cmd === "verify") {
90
55
  const { verifyCommand } = await import("../lib/commands/verify.mjs");
91
56
  await verifyCommand(ctx, rest);
@@ -104,68 +69,27 @@ try {
104
69
  process.exit(0);
105
70
  }
106
71
 
107
- if (cmd === "new") {
108
- const { newCommand } = await import("../lib/commands/new.mjs");
109
- await newCommand(ctx, rest);
110
- process.exit(0);
111
- }
112
-
113
- if (cmd === "bootstrap") {
114
- const { bootstrapCommand } = await import("../lib/commands/bootstrap.mjs");
115
- await bootstrapCommand(ctx, rest);
116
- process.exit(0);
117
- }
118
-
119
- if (cmd === "callback") {
120
- const { callbackCommand } = await import("../lib/commands/callback.mjs");
121
- await callbackCommand(ctx, rest);
122
- process.exit(0);
123
- }
124
-
125
72
  if (cmd === "trigger") {
126
73
  const { triggerCommand } = await import("../lib/commands/trigger.mjs");
127
74
  await triggerCommand(ctx, rest);
128
75
  process.exit(0);
129
76
  }
130
77
 
131
- if (cmd === "kickoff") {
132
- const { kickoffCommand } = await import("../lib/commands/kickoff.mjs");
133
- await kickoffCommand(ctx, rest);
134
- process.exit(0);
135
- }
136
-
137
78
  if (cmd === "knowledge") {
138
79
  const { knowledgeCommand } = await import("../lib/commands/knowledge.mjs");
139
80
  await knowledgeCommand(ctx, rest);
140
81
  process.exit(0);
141
82
  }
142
83
 
143
- if (cmd === "process") {
144
- const { processCommand } = await import("../lib/commands/process.mjs");
145
- await processCommand(ctx, rest);
146
- process.exit(0);
147
- }
148
-
149
- if (cmd === "migrate") {
150
- const { migrateCommand } = await import("../lib/commands/migrate.mjs");
151
- await migrateCommand(ctx, rest);
152
- process.exit(0);
153
- }
154
-
155
- if (cmd === "run" || cmd === "agent-run") {
156
- // ``agent-run`` is a back-compat alias for ``run`` — older trigger
157
- // workflows still spell it that way until they re-seed.
84
+ if (cmd === "run") {
158
85
  const { runCommand } = await import("../lib/commands/run.mjs");
159
86
  await runCommand(ctx, rest);
160
87
  process.exit(0);
161
88
  }
162
89
 
163
- /* `lanes` is the protocol-stable name; `automations` is the
164
- * operator-friendly soft alias. Both dispatch to the same handler
165
- * indefinitely — we are not deprecating the original. */
166
- if (cmd === "lanes" || cmd === "automations") {
167
- const { lanesCommand } = await import("../lib/commands/lanes.mjs");
168
- await lanesCommand(ctx, rest);
90
+ if (cmd === "preflight") {
91
+ const { preflightCommand } = await import("../lib/commands/preflight.mjs");
92
+ await preflightCommand(ctx, rest);
169
93
  process.exit(0);
170
94
  }
171
95
 
@@ -17,7 +17,7 @@ import {
17
17
  import { postFeedback } from "../http.mjs";
18
18
  import { appendEvent } from "../telemetry/outbox.mjs";
19
19
 
20
- const ALLOWED_KINDS = ["pattern", "tool", "collection", "doc"];
20
+ const ALLOWED_KINDS = ["collection"];
21
21
 
22
22
  function parseArgs(rest) {
23
23
  const out = {
@@ -1,167 +1,89 @@
1
1
  export function printHelp() {
2
- console.log(`shipctl — adopt Ship in a repo, sync the catalog, run routines, report outcomes.
2
+ console.log(`shipctl — local workbench for a Ship-connected repo.
3
3
 
4
- Bootstrap a new or existing repo (init / new / doctor), pull the
5
- methodology catalog into .ship/cache (sync), execute one-shot routines or
6
- emit prompts for the workspace runner (trigger / run / kickoff /
7
- callback). Talks to the methodology + orchestration APIs over HTTPS.
8
-
9
- VOCABULARY
10
- process.routines: (.ship/config.yml) → repo-local scheduled/manual work
11
- pattern: (artifact kind) → cached role/playbook prompt body
12
- routine claim: (Ship API) → idempotent schedule-window claim
13
- attention surface → operator console: Inbox
14
-
15
- Legacy 'lanes:' configs and '--lane' flags are still accepted as aliases
16
- so already-seeded repositories keep working while new repos use
17
- 'process.routines'.
4
+ The console is for the operator. The CLI is for the engineer. shipctl
5
+ runs locally for setup, validation, and diagnostics. It does not
6
+ orchestrate workflows, does not touch workspace state, and does not
7
+ write to the audit log. The customer-side CI uses 'shipctl trigger'
8
+ (and the trigger-spawned 'shipctl run') as a thin entry-point that
9
+ hands work to the workspace runner; everything else is local.
18
10
 
19
11
  GLOBAL FLAGS
20
- --base-url URL Methodology API (default: SHIP_API_BASE or
21
- https://ship.elmundi.com/api/methodology)
12
+ --base-url URL Workspace API (default: SHIP_API_BASE or
13
+ https://api.ship.elmundi.com)
22
14
  --json Machine-readable JSON output where supported
23
15
  --version, -v Print shipctl version and exit
24
16
  --help, -h Print this help
25
17
 
26
18
  COMMANDS
27
19
 
28
- Setup
29
- shipctl init [--yes] [--force] [--dry-run] [--json] [--cwd <dir>]
30
- [--agents <csv>]
31
- [--tracker <name>] [--ci <name>] [--preset <name>]
32
- [--language <name>] [--channel stable|edge]
33
- [--copy-rules] [--copy-playbook] [--bootstrap]
34
- [--telemetry on|off|ask]
35
- — bootstrap .ship/, fetch artifacts, install
36
- agent rules in an existing repo.
37
- shipctl new <name> [--preset ...] [--tracker ...] [--ci ...] [--agents ...]
38
- [--here] [--yes]
39
- — bootstrap a fresh repo: git init + README +
40
- .ship/config.yml.
20
+ Daily-use (local)
41
21
  shipctl doctor [--json] [--cwd <dir>] [--write-inventory] [--no-network]
42
- inspect the repo, propose a stack, optionally
43
- write .ship/inventory.json for
44
- 'shipctl init --bootstrap'.
22
+ cheap repo health checks: agent rule
23
+ files installed, config valid,
24
+ credentials present, network reachable.
25
+ shipctl verify [--no-network] [--check <id,...>] [--severity warn|error|info] [--json]
26
+ — heavier post-adoption checks
27
+ (config schema, agent rule presence,
28
+ tracker / CI wiring).
45
29
  shipctl config init|get|set|validate|show|path
46
30
  — .ship/config.yml management.
47
31
 
48
- Catalog
49
- shipctl search <query> [--top-k N]
50
- vector search over docs + prompts (POST /search).
51
- shipctl docs fetch <repo-relative-path>
52
- shipctl docs feedback --title "..." --summary "..." [--recommendation "..."]...
53
- [--source-context "..."]
54
- fetch markdown bodies; submit improvement /
55
- retro notes (POST /feedback).
56
- shipctl pattern list | shipctl pattern show <id> | shipctl pattern fetch <id>
57
- | shipctl pattern search <query> [--top-k N]
58
- — versioned artifact bodies (POST /fetch
59
- { kind, id, version? }). 'pattern' is the
60
- protocol-stable artifact kind; in the operator
61
- console it shows up as a Play.
62
- shipctl tool … | shipctl collection …
63
- — same subcommands; plural aliases:
64
- patterns, tools, collections.
65
- shipctl sync [--check-only] [--only <kind:id>]... [--channel <c>]
66
- [--force-unpin] [--dry-run] [--lock] [--json] [--cwd <dir>]
67
- — fetch artifacts into .ship/cache. With --lock,
68
- also writes .ship/shipctl.lock.json covering
69
- every pattern the declared routines depend on.
32
+ Setup
33
+ shipctl init [--yes] [--force] [--dry-run] [--json] [--cwd <dir>]
34
+ [--agents <csv>] [--tracker <name>] [--ci <name>]
35
+ [--preset <name>] [--language <name>] [--channel stable|edge]
36
+ [--copy-playbook] [--bootstrap]
37
+ [--telemetry on|off|ask]
38
+ bootstrap .ship/ in an existing repo.
39
+ Agent rule files are baked into the
40
+ wizard's seed PR Phase 2.5 retired
41
+ the local --copy-rules + sync flow.
70
42
 
71
- Run
72
- shipctl trigger --event schedule --repo <id|owner/name> [--workspace <id>] [--json]
73
- compute due routines locally, then claim
74
- the schedule window in Ship.
43
+ Knowledge (read-only)
44
+ shipctl knowledge fetch <bucket-slug> [--workspace <id>] [--json]
45
+ read a Ship-owned bucket's articles
46
+ and source sync state. Bucket
47
+ authoring + ingestion live server-side;
48
+ this is the agent's read path.
49
+
50
+ CI entry-point (used by the seed workflow)
51
+ shipctl trigger --event schedule [--workspace <id>] [--repo <id|owner/name>] [--json]
52
+ — compute due routines from
53
+ .ship/config.yml and claim each
54
+ schedule window in Ship.
75
55
  shipctl run --routine <id> [--dry-run] [--json] [--cwd <dir>]
76
56
  — execute one routine end-to-end:
77
- resolve pattern, fetch a ticket
57
+ resolve specialist, fetch a ticket
78
58
  (if FSM-staged), launch the agent
79
59
  runtime, exit on terminal status.
80
- 'shipctl agent-run' is a back-compat
81
- alias.
82
- shipctl lanes install [--only <csv>] [--ref <git-ref>] [--owner <gh>] [--repo <name>]
83
- [--shipctl-version <v>] [--dry-run] [--force] [--json] [--cwd <dir>]
84
- shipctl lanes list [--json] [--cwd <dir>]
85
- shipctl lanes remove [--only <csv>] [--dry-run] [--json] [--cwd <dir>]
86
- — generate / inspect / delete the
87
- .github/workflows/ship-<lane>.yml thin wrappers
88
- that delegate to the reusable run-agent.yml.
89
- shipctl kickoff [--pattern <id>] [--version <v>] [--raw] [--json] [--cwd <dir>]
90
- — print a pattern body for piping into the
91
- customer's agent in CI.
92
- shipctl callback --status <ok|fail|cancelled> [--summary "..."] [--metric k=v]...
93
- [--outcome-text "..."] [--findings-count N] [--severity high=N]...
94
- [--artifact pr:"..."]... [--escalation clarification:"..."]...
95
- — report a Run's terminal status (and
96
- RunSummary outcome) back to Ship so it can
97
- render the outcome row and route any
98
- escalations into the Inbox.
99
- shipctl process prompt --state <id> [--ticket-json <json>] [--policies-file <path>]
100
- [--cwd <dir>] [--json]
101
- — assemble a Process/FSM specialist prompt
102
- bundle with ticket context, allowed
103
- transitions, policies, and mandatory
104
- knowledge-first guardrails.
105
- shipctl process tickets --workspace <id> [--query <text>] [--tracker <kind>] [--json]
106
- — read-only tracker picker for selecting
107
- ticket context before building a process
108
- prompt. Does not create, comment, or
109
- transition tickets.
110
-
111
- Knowledge
112
- shipctl knowledge init [--workspace <id>] [--repo <id|owner/name>] [--only <csv>] [--json]
113
- — compatibility: open a PR that seeds
114
- .ship/knowledge starter docs.
115
- shipctl knowledge fetch <bucket-slug> [--workspace <id>] [--json]
116
- — read Ship-owned bucket articles and
117
- source sync state.
118
- shipctl knowledge bootstrap [--workspace <id>] [--repo <id|owner/name>] [--json]
119
- — post-merge action entry point: analyze
120
- repo and open generated knowledge PR.
121
- shipctl knowledge refresh-intel [--workspace <id>] [--repo <id|owner/name>] [--json]
122
- — refresh the generated repository-context
123
- bucket for an activated repo.
124
- Reads SHIP_API_TOKEN.
60
+ Spawned per routine by 'shipctl trigger'
61
+ in the seed workflow.
125
62
 
126
63
  Telemetry & feedback
127
64
  shipctl telemetry status|on|off|show-id|reset-id|flush|export|delete-my-data|buffer
128
65
  — opt-in anonymous usage (RFC-0003); default OFF.
129
- '--scope artifact_usage,improvement_drafts,errors'
130
- on 'on'; '--dry-run' on 'flush';
131
- '--out <file>' on 'export'.
132
66
  shipctl feedback draft|list|show|edit|submit|remove
133
67
  — local markdown drafts; submit creates a
134
- GitHub issue via POST /feedback and moves the
135
- draft to sent/.
68
+ GitHub issue against the cited artifact
69
+ (POST /feedback) and moves the draft to sent/.
136
70
 
137
71
  Misc
138
- shipctl verify [--no-network] [--check <id,...>] [--severity warn|error|info] [--json]
139
- — post-adoption liveness checks
140
- (local + config + network).
141
- shipctl migrate [--dry-run] [--yes] [--json] [--cwd <dir>]
142
- — upgrade .ship/config.yml from v1 to v2
143
- (lanes-as-config).
144
- shipctl bootstrap (stub)
145
72
  shipctl help — show this help.
146
73
 
147
- LOCAL TREE
148
- pattern / tool / collection list|show|fetch scan
149
- artifacts/<plural>/<id>/ARTIFACT.md on disk when cwd or SHIP_REPO is inside
150
- the Ship monorepo (search always uses HTTP).
151
-
152
74
  INIT FLAGS
153
75
  --yes Non-interactive apply (use --dry-run first)
154
76
  --force Replace existing rule blocks and overwrite generated files
155
77
  --dry-run Preview only
156
78
  --json Emit a JSON summary suitable for CI
157
- --agents <csv> Comma-separated agent ids. See list below.
79
+ --agents <csv> Comma-separated agent ids (informational; the wizard's
80
+ seed PR is the install path now)
158
81
  --tracker <name> Stack tracker: linear|jira|github-issues|azure-boards|clickup|spreadsheet|none
159
82
  --ci <name> Stack CI: gh-actions|gitlab-ci|buildkite|circleci|azure-pipelines|jenkins|manual
160
83
  --preset <name> Stack preset: web-app|api-backend|mobile-app|cli|monorepo|adoption-minimum
161
84
  --language <name> Stack language: ts|js|py|go|rust|java|kotlin|swift|dart|multi
162
85
  --channel <name> Override api.channel: stable|edge
163
- --copy-rules Install collection/agent-rules-<agent> files at their install_target
164
- --copy-playbook Fetch collection/adoption-playbook into .ship/cache/ (skipped on 404)
86
+ --copy-playbook (no-op after Phase 2.5; flag retained for back-compat)
165
87
  --bootstrap Render CI/tracker scaffolding (mobile-app+gh-actions+linear skeletons today;
166
88
  other combos emit SHIP_BOOTSTRAP_PLAN.md)
167
89
  --telemetry on|off|ask — override the interactive telemetry prompt
@@ -171,12 +93,6 @@ SUPPORTED AGENTS
171
93
  cursor, codex, claude, aider, cline, continue, windsurf, zed,
172
94
  gemini, opencode, copilot, cursor-cloud, agents-md, claude-md
173
95
 
174
- REFERENCE
175
- Artifacts protocol: RFC-0001 (POST /search, POST /fetch). Every consumed
176
- artifact should be recorded in the PR as \`<kind>:<id>@<version>\`.
177
- HTTP schemas: artifacts/tools/methodology-api/ARTIFACT.md in the Ship repo.
178
- Operator IA (Plays / Automations / Runs / Inbox): RFC-0010.
179
-
180
96
  Package: @elmundi/ship-cli (binary: shipctl).
181
97
  `);
182
98
  }