@kontourai/flow-agents 1.0.1 → 1.2.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.
Files changed (111) hide show
  1. package/.github/workflows/ci.yml +110 -0
  2. package/.github/workflows/runtime-compat.yml +5 -2
  3. package/CHANGELOG.md +42 -0
  4. package/README.md +26 -5
  5. package/build/src/cli/console-learning-projection.js +19 -2
  6. package/build/src/cli/effective-backlog-settings.js +18 -2
  7. package/build/src/cli/fixture-retirement-audit.js +19 -2
  8. package/build/src/cli/init.js +19 -2
  9. package/build/src/cli/{flow-kit.js → kit.js} +122 -108
  10. package/build/src/cli/promote-workflow-artifact.js +19 -2
  11. package/build/src/cli/publish-change-helper.js +19 -2
  12. package/build/src/cli/pull-work-provider.js +19 -2
  13. package/build/src/cli/runtime-adapter.js +20 -2
  14. package/build/src/cli/usage-feedback.js +19 -2
  15. package/build/src/cli/utterance-check.js +19 -2
  16. package/build/src/cli/validate-hook-influence.js +19 -2
  17. package/build/src/cli/validate-source-tree.js +4 -4
  18. package/build/src/cli/veritas-governance.js +19 -2
  19. package/build/src/cli/workflow-artifact-cleanup-audit.js +19 -2
  20. package/build/src/cli.js +3 -3
  21. package/build/src/flow-kit/validate.js +58 -62
  22. package/build/src/runtime-adapters.js +55 -24
  23. package/build/src/tools/build-universal-bundles.js +83 -19
  24. package/build/src/tools/generate-context-map.js +68 -9
  25. package/build/src/tools/validate-package.js +19 -2
  26. package/build/src/tools/validate-source-tree.js +51 -3
  27. package/context/scripts/telemetry/console-presets.sh +1 -1
  28. package/docs/adr/0007-flow-skill-kit-tool-boundary.md +169 -0
  29. package/docs/adr/0007-skill-audit.md +112 -0
  30. package/docs/adr/0008-kit-operation-boundary.md +88 -0
  31. package/docs/context-map.md +18 -22
  32. package/docs/flow-kit-repository-contract.md +5 -5
  33. package/docs/getting-started.md +177 -0
  34. package/docs/index.md +19 -8
  35. package/docs/kit-authoring-guide.md +46 -10
  36. package/docs/knowledge-kit.md +2 -2
  37. package/docs/spec/runtime-hook-surface.md +1 -1
  38. package/docs/vision.md +1 -1
  39. package/docs/workflow-usage-guide.md +1 -1
  40. package/evals/ci/run-baseline.sh +55 -8
  41. package/evals/fixtures/builder-kit-workflow-state/happy-path.json +2 -2
  42. package/evals/fixtures/builder-kit-workflow-state/mid-work-resume.json +2 -2
  43. package/evals/fixtures/console-learning-projection/artifacts/console-learning-correction/learning.json +1 -1
  44. package/evals/fixtures/pull-work-provider/github-issues.json +5 -5
  45. package/evals/integration/test_activate_npx_context.sh +2 -2
  46. package/evals/integration/test_bundle_install.sh +17 -12
  47. package/evals/integration/test_console_learning_projection.sh +1 -1
  48. package/evals/integration/test_flow_kit_install_git.sh +7 -7
  49. package/evals/integration/test_flow_kit_repository.sh +4 -4
  50. package/evals/integration/test_kit_conformance_levels.sh +1 -1
  51. package/evals/integration/test_local_flow_kit_install.sh +7 -7
  52. package/evals/integration/test_publish_change_helper.sh +1 -1
  53. package/evals/integration/test_pull_work_provider.sh +1 -1
  54. package/evals/integration/test_runtime_adapter_activation.sh +140 -19
  55. package/evals/lib/node.sh +2 -2
  56. package/evals/run.sh +2 -0
  57. package/evals/static/test_console_presets.sh +49 -0
  58. package/evals/static/test_workflow_skills.sh +15 -15
  59. package/integrations/strands/flow_agents_strands/steering.py +1 -1
  60. package/integrations/strands-ts/src/hooks.ts +1 -1
  61. package/kits/builder/kit.json +17 -0
  62. package/{skills → kits/builder/skills}/builder-shape/SKILL.md +4 -4
  63. package/{skills → kits/builder/skills}/idea-to-backlog/SKILL.md +1 -1
  64. package/kits/knowledge/kit.json +16 -9
  65. package/package.json +8 -5
  66. package/packaging/packs.json +1 -21
  67. package/scripts/README.md +1 -1
  68. package/scripts/kit.js +2 -0
  69. package/scripts/telemetry/console-presets.sh +1 -1
  70. package/skills/README.md +23 -0
  71. package/src/cli/console-learning-projection.ts +7 -1
  72. package/src/cli/effective-backlog-settings.ts +6 -1
  73. package/src/cli/fixture-retirement-audit.ts +7 -1
  74. package/src/cli/init.ts +7 -1
  75. package/src/cli/{flow-kit.ts → kit.ts} +124 -109
  76. package/src/cli/promote-workflow-artifact.ts +7 -1
  77. package/src/cli/publish-change-helper.ts +7 -1
  78. package/src/cli/pull-work-provider.ts +7 -1
  79. package/src/cli/runtime-adapter.ts +8 -1
  80. package/src/cli/usage-feedback.ts +7 -1
  81. package/src/cli/utterance-check.ts +7 -1
  82. package/src/cli/validate-hook-influence.ts +7 -1
  83. package/src/cli/validate-source-tree.ts +4 -4
  84. package/src/cli/veritas-governance.ts +7 -1
  85. package/src/cli/workflow-artifact-cleanup-audit.ts +7 -1
  86. package/src/cli.ts +3 -3
  87. package/src/flow-kit/validate.ts +63 -57
  88. package/src/runtime-adapters.ts +54 -26
  89. package/src/tools/build-universal-bundles.ts +67 -14
  90. package/src/tools/generate-context-map.ts +43 -7
  91. package/src/tools/validate-package.ts +7 -1
  92. package/src/tools/validate-source-tree.ts +34 -2
  93. package/scripts/flow-kit.js +0 -2
  94. package/skills/context-budget/SKILL.md +0 -40
  95. package/skills/explore/SKILL.md +0 -137
  96. package/skills/feedback-loop/SKILL.md +0 -87
  97. package/skills/frontend-design/SKILL.md +0 -80
  98. /package/{skills → kits/builder/skills}/deliver/SKILL.md +0 -0
  99. /package/{skills → kits/builder/skills}/design-probe/SKILL.md +0 -0
  100. /package/{skills → kits/builder/skills}/evidence-gate/SKILL.md +0 -0
  101. /package/{skills → kits/builder/skills}/execute-plan/SKILL.md +0 -0
  102. /package/{skills → kits/builder/skills}/fix-bug/SKILL.md +0 -0
  103. /package/{skills → kits/builder/skills}/learning-review/SKILL.md +0 -0
  104. /package/{skills → kits/builder/skills}/pickup-probe/SKILL.md +0 -0
  105. /package/{skills → kits/builder/skills}/plan-work/SKILL.md +0 -0
  106. /package/{skills → kits/builder/skills}/pull-work/SKILL.md +0 -0
  107. /package/{skills → kits/builder/skills}/release-readiness/SKILL.md +0 -0
  108. /package/{skills → kits/builder/skills}/review-work/SKILL.md +0 -0
  109. /package/{skills → kits/builder/skills}/tdd-workflow/SKILL.md +0 -0
  110. /package/{skills → kits/builder/skills}/verify-work/SKILL.md +0 -0
  111. /package/{skills → kits/knowledge/skills}/knowledge-capture/SKILL.md +0 -0
@@ -12,7 +12,7 @@ This guide walks you from an empty directory to a validated, locally installed k
12
12
 
13
13
  - **Kit** — a directory with a root `kit.json` manifest and the assets it declares. The manifest is the contract; Flow Agents validates it before anything is copied.
14
14
  - **Flow Definition** — a `.flow.json` file that declares steps, gates, and expected evidence. Validation of the Flow Definition semantics belongs to [Kontour Flow](https://kontourai.github.io/flow/); the kit contract delegates to it.
15
- - **Activation** — the step that reads the installed kit and writes runtime-local files into your workspace. Today the `codex-local` adapter is the only adapter, and it activates only Flow Definition assets.
15
+ - **Activation** — the step that reads the installed kit and writes runtime-local files into your workspace. Both `codex-local` and `strands-local` adapters activate Flow Definitions, skills, and docs. See the Activate section for the full asset-class table.
16
16
 
17
17
  ## Directory layout
18
18
 
@@ -54,7 +54,7 @@ Required fields:
54
54
  | `name` | Non-empty display name |
55
55
  | `flows` | Non-empty list; each entry must have `id` and `path` |
56
56
 
57
- Optional fields: `product_name`, `description`, `skills`, `docs`, `adapters`, `evals`, `assets`. Optional fields list relative asset paths or objects with `id`, `path`, and optional `description`. They are declared for provenance but only Flow Definition assets are activated today; others appear in diagnostics as `skipped_assets`.
57
+ Optional fields: `product_name`, `description`, `skills`, `docs`, `adapters`, `evals`, `assets`. Optional fields list relative asset paths or objects with `id`, `path`, and optional `description`. `skills` and `docs` assets are activated by both adapters alongside flows. `adapters`, `evals`, and `assets` appear in diagnostics as `skipped_assets` (see the Activate section for the full per-adapter table).
58
58
 
59
59
  ## Minimal flow file
60
60
 
@@ -112,7 +112,7 @@ npm run validate:source --
112
112
  Once validation passes, install the kit into a target workspace:
113
113
 
114
114
  ```bash
115
- npx @kontourai/flow-agents flow-kit install-local path/to/my-kit --dest /path/to/workspace
115
+ npx @kontourai/flow-agents kit install path/to/my-kit --dest /path/to/workspace
116
116
  ```
117
117
 
118
118
  `--dest` is the installed Flow Agents bundle root. When omitted the command uses the current directory. From a contributor checkout of this repository, the equivalent form is `npm run flow-kit -- <command>`.
@@ -120,8 +120,8 @@ npx @kontourai/flow-agents flow-kit install-local path/to/my-kit --dest /path/to
120
120
  Confirm the install:
121
121
 
122
122
  ```bash
123
- npx @kontourai/flow-agents flow-kit list --dest /path/to/workspace
124
- npx @kontourai/flow-agents flow-kit status my-kit --dest /path/to/workspace
123
+ npx @kontourai/flow-agents kit list --dest /path/to/workspace
124
+ npx @kontourai/flow-agents kit status my-kit --dest /path/to/workspace
125
125
  ```
126
126
 
127
127
  `list` prints one summary line per installed kit. `status` prints JSON provenance including the SHA256 content hash and `installed` or `missing` state.
@@ -129,7 +129,7 @@ npx @kontourai/flow-agents flow-kit status my-kit --dest /path/to/workspace
129
129
  To replace an existing install after you update the kit source:
130
130
 
131
131
  ```bash
132
- npx @kontourai/flow-agents flow-kit install-local path/to/my-kit --dest /path/to/workspace --update
132
+ npx @kontourai/flow-agents kit install path/to/my-kit --dest /path/to/workspace --update
133
133
  ```
134
134
 
135
135
  ## Activate
@@ -137,10 +137,27 @@ npx @kontourai/flow-agents flow-kit install-local path/to/my-kit --dest /path/to
137
137
  After installing, run activate to write runtime-local files into the workspace:
138
138
 
139
139
  ```bash
140
- npx @kontourai/flow-agents flow-kit activate --dest /path/to/workspace --format json
140
+ npx @kontourai/flow-agents kit activate --dest /path/to/workspace --format json
141
141
  ```
142
142
 
143
- The `codex-local` adapter is selected automatically. It writes Flow Definition copies under `.flow-agents/runtime/codex/flows/<kit-id>/` and an `activation.json` manifest. Declared `skills`, `docs`, `adapters`, `evals`, and `assets` are recorded as `skipped_assets` — they are not an error, just not activated yet.
143
+ The `codex-local` adapter is selected automatically. To activate for Strands, pass `--adapter strands-local`.
144
+
145
+ ### What each adapter activates
146
+
147
+ Each adapter copies declared assets into `.flow-agents/runtime/<adapter>/` and produces an `activation.json` manifest. The table below shows which asset classes are activated today:
148
+
149
+ | Asset class | `codex-local` | `strands-local` | Notes |
150
+ |---|---|---|---|
151
+ | `flows` | Activated — `.flow-agents/runtime/codex/flows/<kit-id>/<asset-id>.flow.json` | Activated — `.flow-agents/runtime/strands/flows/<kit-id>/<asset-id>.flow.json` | Gate definitions read by each adapter's flow-routing layer. |
152
+ | `skills` | Activated — `.flow-agents/runtime/codex/skills/<kit-id>/<filename>` | Activated — `.flow-agents/runtime/strands/skills/<kit-id>/<filename>` | Agent guidance markdown. For codex-local, reference these paths from AGENTS.md. For strands-local, the Strands steering layer can glob for `*.md` under `skills/` during system-prompt injection. |
153
+ | `docs` | Activated — `.flow-agents/runtime/codex/docs/<kit-id>/<filename>` | Activated — `.flow-agents/runtime/strands/docs/<kit-id>/<filename>` | Documentation assets. Co-located with skill files for easy reference. |
154
+ | `adapters` | `skipped_assets` | `skipped_assets` | Framework or runtime adapter code — not copied by the activation layer. |
155
+ | `evals` | `skipped_assets` | `skipped_assets` | Evaluation suites — not run or copied during activation. |
156
+ | `assets` | `skipped_assets` | `skipped_assets` | General supporting assets — not copied during activation. |
157
+
158
+ Assets in `skipped_assets` are recorded in `activation.json` for diagnostics but are not an error. They are not activated because no activation path is defined for those classes in the current adapters.
159
+
160
+ Flows with a missing `id` field in `kit.json` are also placed in `skipped_assets` with an explicit reason.
144
161
 
145
162
  When installing through `npx @kontourai/flow-agents init` with the Codex runtime, pass `--activate-kits` to run activation as part of init:
146
163
 
@@ -177,7 +194,7 @@ The **container contract** is owned by [Kontour Flow](https://kontourai.github.i
177
194
  - Path rules: all declared paths must be relative, must not contain `..`, and must resolve inside the kit directory.
178
195
  - The **extension model**: unknown top-level fields are consumer extensions; core validation ignores-but-permits them.
179
196
 
180
- Container validation is surfaced in Flow's CLI as `flow validate-kit <kit-dir>`. Flow Agents delegates container validation to Flow when `FLOW_CLI_ROOT` is configured; without it, Flow Agents applies the same rules internally.
197
+ Container validation is surfaced in Flow's CLI as `flow kit validate <kit-dir>`. Flow Agents delegates core container validation to `@kontourai/flow`'s `validateKitContainer` library function; the contract lives once, in Flow.
181
198
 
182
199
  For the authoritative container spec and JSON Schema, see [kontourai/flow#67](https://github.com/kontourai/flow/pull/67) (the spec PR) and the published `schemas/flow-kit-container.schema.json` in the `@kontourai/flow` package.
183
200
 
@@ -267,7 +284,7 @@ Layering summary:
267
284
  Use the `inspect` subcommand to derive a kit's conformance level and consumer targets:
268
285
 
269
286
  ```bash
270
- npm run flow-kit -- inspect path/to/my-kit
287
+ npm run kit -- inspect path/to/my-kit
271
288
  ```
272
289
 
273
290
  Output is stable JSON:
@@ -293,3 +310,22 @@ The `inspect` command is read-only and safe to run before install.
293
310
  ## Direction
294
311
 
295
312
  Flow Kits are designed to be shareable workflow units — authored once, carried across teams and workspaces. The intended growth path is distribution from git remotes and a curated Kontour kit catalog of Kontour-authored kits covering work modes beyond software delivery. Today install is local-path only; remote fetch is explicitly a non-goal in this version.
313
+
314
+ ## Migration: flow-kit → flow-agents kit
315
+
316
+ The standalone `flow-kit` binary was removed in this release. The `flow-agents kit` subcommand is the replacement.
317
+
318
+ | Old command | New command |
319
+ |---|---|
320
+ | `flow-kit install-local <path>` | `flow-agents kit install <path>` |
321
+ | `flow-kit install-git <url>` | `flow-agents kit install <url>` |
322
+ | `flow-kit activate` | `flow-agents kit activate` |
323
+ | `flow-kit inspect <dir>` | `flow-agents kit inspect <dir>` |
324
+ | `flow-kit list` | `flow-agents kit list` |
325
+ | `flow-kit status <id>` | `flow-agents kit status <id>` |
326
+ | `npx @kontourai/flow-agents flow-kit ...` | `npx @kontourai/flow-agents kit ...` |
327
+ | `npm run flow-kit -- ...` | `npm run kit -- ...` |
328
+
329
+ `install-local` and `install-git` are unified into a single `install` command. The source argument auto-detects whether it is a local path or a git URL (http://, https://, git+, ssh://, file://).
330
+
331
+ Running the old `flow-kit` command will produce a "command not found" error from your shell — there is no alias or shim. Update any scripts or CI configurations that call `flow-kit` to use `flow-agents kit`.
@@ -4,7 +4,7 @@ title: Knowledge Kit
4
4
 
5
5
  # Knowledge Kit
6
6
 
7
- The Knowledge Kit is a Flow Kit for durable, gated knowledge storage. It packages a store contract, five pipeline flows, pluggable store adapters, and a parameterized contract test suite — all validated and installed through the standard `flow-kit` path.
7
+ The Knowledge Kit is a Flow Kit for durable, gated knowledge storage. It packages a store contract, five pipeline flows, pluggable store adapters, and a parameterized contract test suite — all validated and installed through the `flow-agents kit` path.
8
8
 
9
9
  ## What it ships
10
10
 
@@ -44,7 +44,7 @@ The vector detector is fail-closed: infrastructure failures throw `EMBED_FAILURE
44
44
 
45
45
  ```bash
46
46
  # Install the kit into a workspace
47
- npx @kontourai/flow-agents flow-kit install-local kits/knowledge --dest /path/to/workspace
47
+ npx @kontourai/flow-agents kit install kits/knowledge --dest /path/to/workspace
48
48
 
49
49
  # Run the contract suite against the default adapter
50
50
  node --test kits/knowledge/evals/contract-suite/suite.test.js
@@ -490,7 +490,7 @@ Kit flow activation for Strands workspaces is implemented as a new runtime adapt
490
490
  The CLI command is:
491
491
 
492
492
  ```bash
493
- flow-kit activate --adapter strands-local [--dest DIR] [--source-root DIR]
493
+ flow-agents kit activate --adapter strands-local [--dest DIR] [--source-root DIR]
494
494
  ```
495
495
 
496
496
  This writes activated flow files to `.flow-agents/runtime/strands/flows/<kit-id>/<asset-id>.flow.json` and produces a parity-diagnostic `activation.json` (same schema as codex-local: `schema_version`, `adapter`, `supported_asset_classes`, `generated_runtime_files`, `skipped_assets`, `warnings`, `errors`).
package/docs/vision.md CHANGED
@@ -20,7 +20,7 @@ One official framework adapter spike exists: `integrations/strands/` is a Python
20
20
 
21
21
  ### What ships today
22
22
 
23
- Kit authoring is shipped. The `kit.json` contract at schema version 1.0 is validated by the `flow-kit` CLI before any install. The [Kit Authoring Guide](kit-authoring-guide.html) walks from an empty directory to a validated, locally installed kit. Two reference kits ship in `kits/`:
23
+ Kit authoring is shipped. The `kit.json` contract at schema version 1.0 is validated by the `flow-agents kit` CLI before any install. The [Kit Authoring Guide](kit-authoring-guide.html) walks from an empty directory to a validated, locally installed kit. Two reference kits ship in `kits/`:
24
24
 
25
25
  **Builder Kit** packages the full `idea → backlog → plan → build → review → verify → evidence → release → learning` pipeline as two flows (`builder.shape`, `builder.build`). It installs automatically.
26
26
 
@@ -43,7 +43,7 @@ Separate these into distinct ideas, use Probe/alignment questions if the outcome
43
43
 
44
44
  Expected behavior:
45
45
 
46
- - delegate shaping to `skills/idea-to-backlog/SKILL.md`
46
+ - delegate shaping to `kits/builder/skills/idea-to-backlog/SKILL.md`
47
47
  - link the artifact to the Builder Kit Flow Definition at `kits/builder/flows/shape.flow.json`
48
48
  - inventory each distinct idea separately
49
49
  - classify each idea
@@ -26,6 +26,24 @@ CHECKS=(
26
26
  "Flow Kit repository integration|bash evals/integration/test_flow_kit_repository.sh"
27
27
  "Runtime adapter activation integration|bash evals/integration/test_runtime_adapter_activation.sh"
28
28
  "Bundle install integration|bash evals/integration/test_bundle_install.sh"
29
+ "Bundle lifecycle integration|bash evals/integration/test_bundle_lifecycle.sh"
30
+ "Activate npx context integration|bash evals/integration/test_activate_npx_context.sh"
31
+ "Kit conformance levels integration|bash evals/integration/test_kit_conformance_levels.sh"
32
+ "Local Flow Kit install integration|bash evals/integration/test_local_flow_kit_install.sh"
33
+ "Flow Kit install-git integration|bash evals/integration/test_flow_kit_install_git.sh"
34
+ "Console learning projection integration|bash evals/integration/test_console_learning_projection.sh"
35
+ "Context map integration|bash evals/integration/test_context_map.sh"
36
+ "Effective backlog settings integration|bash evals/integration/test_effective_backlog_settings.sh"
37
+ "Flow agents statusline integration|bash evals/integration/test_flow_agents_statusline.sh"
38
+ "Telemetry contract integration|bash evals/integration/test_telemetry.sh"
39
+ "Telemetry doctor integration|bash evals/integration/test_telemetry_doctor.sh"
40
+ "Utterance check integration|bash evals/integration/test_utterance_check.sh"
41
+ "Pull work provider integration|bash evals/integration/test_pull_work_provider.sh"
42
+ "Usage feedback import integration|bash evals/integration/test_usage_feedback_import.sh"
43
+ "Usage feedback outcomes integration|bash evals/integration/test_usage_feedback_outcomes.sh"
44
+ "Usage feedback report integration|bash evals/integration/test_usage_feedback_report.sh"
45
+ "Usage feedback dashboard integration|bash evals/integration/test_usage_feedback_dashboard.sh"
46
+ "Usage feedback global integration|bash evals/integration/test_usage_feedback_global.sh"
29
47
  )
30
48
 
31
49
  LANE_SOURCE_AND_STATIC=(
@@ -51,6 +69,27 @@ LANE_RUNTIME_AND_KIT=(
51
69
  "Flow Kit repository integration"
52
70
  "Runtime adapter activation integration"
53
71
  "Bundle install integration"
72
+ "Bundle lifecycle integration"
73
+ "Activate npx context integration"
74
+ "Kit conformance levels integration"
75
+ "Local Flow Kit install integration"
76
+ "Flow Kit install-git integration"
77
+ # QUARANTINED (#74): passes on macOS, fails on Linux CI — not gating until triaged
78
+ "Context map integration"
79
+ "Effective backlog settings integration"
80
+ "Flow agents statusline integration"
81
+ "Telemetry contract integration"
82
+ "Telemetry doctor integration"
83
+ "Utterance check integration"
84
+ "Pull work provider integration"
85
+ )
86
+
87
+ LANE_USAGE_FEEDBACK=(
88
+ "Usage feedback import integration"
89
+ "Usage feedback outcomes integration"
90
+ "Usage feedback report integration"
91
+ "Usage feedback dashboard integration"
92
+ "Usage feedback global integration"
54
93
  )
55
94
 
56
95
  slugify() {
@@ -78,6 +117,9 @@ lane_labels() {
78
117
  runtime-and-kit)
79
118
  printf '%s\n' "${LANE_RUNTIME_AND_KIT[@]}"
80
119
  ;;
120
+ usage-feedback)
121
+ printf '%s\n' "${LANE_USAGE_FEEDBACK[@]}"
122
+ ;;
81
123
  *)
82
124
  echo "Unknown CI baseline lane: $(active_lane)" >&2
83
125
  return 1
@@ -120,14 +162,19 @@ find_check() {
120
162
  }
121
163
 
122
164
  find_active_check() {
165
+ # Look up the check by id-or-label without streaming active_checks through a
166
+ # process substitution. Streaming and returning early from the consumer loop
167
+ # causes a SIGPIPE on the producer printf when pipefail is set, printing a
168
+ # spurious "write error: Broken pipe" on Linux even though every check passed.
169
+ # Instead: resolve via the pure-bash find_check, then confirm the label is
170
+ # present in the active lane.
123
171
  local requested="$1"
124
- local row id label command
125
- while IFS=$'\t' read -r id label command; do
126
- if [[ "$requested" == "$id" || "$requested" == "$label" ]]; then
127
- printf '%s\t%s\t%s\n' "$id" "$label" "$command"
128
- return 0
129
- fi
130
- done < <(active_checks)
172
+ local row id label line
173
+ row="$(find_check "$requested")" || return 1
174
+ IFS=$'\t' read -r id label _ <<<"$row"
175
+ while IFS= read -r line; do
176
+ [[ "$line" == "$label" ]] && { printf '%s\n' "$row"; return 0; }
177
+ done <<<"$(lane_labels)"
131
178
  return 1
132
179
  }
133
180
 
@@ -265,7 +312,7 @@ case "${1:-}" in
265
312
  ;;
266
313
  --lane)
267
314
  if [[ -z "${2:-}" ]]; then
268
- echo "Usage: $0 --lane <source-and-static|workflow-contracts|runtime-and-kit>" >&2
315
+ echo "Usage: $0 --lane <source-and-static|workflow-contracts|runtime-and-kit|usage-feedback>" >&2
269
316
  exit 2
270
317
  fi
271
318
  FLOW_AGENTS_CI_LANE="$2"
@@ -49,8 +49,8 @@
49
49
  "planning_readiness": "ready",
50
50
  "expected_modified_files": [
51
51
  "context/contracts/builder-kit-workflow-state-contract.md",
52
- "skills/design-probe/SKILL.md",
53
- "skills/pickup-probe/SKILL.md"
52
+ "kits/builder/skills/design-probe/SKILL.md",
53
+ "kits/builder/skills/pickup-probe/SKILL.md"
54
54
  ],
55
55
  "conflict_risks": [
56
56
  "workflow guidance shared with downstream Builder Kit automation"
@@ -54,8 +54,8 @@
54
54
  "planning_readiness": "completed",
55
55
  "expected_modified_files": [
56
56
  "context/contracts/builder-kit-workflow-state-contract.md",
57
- "skills/design-probe/SKILL.md",
58
- "skills/pickup-probe/SKILL.md",
57
+ "kits/builder/skills/design-probe/SKILL.md",
58
+ "kits/builder/skills/pickup-probe/SKILL.md",
59
59
  "evals/fixtures/builder-kit-workflow-state/happy-path.json",
60
60
  "evals/fixtures/builder-kit-workflow-state/mid-work-resume.json"
61
61
  ],
@@ -28,7 +28,7 @@
28
28
  "target": "skill",
29
29
  "action": "Update workflow learning guidance after release.",
30
30
  "status": "deferred",
31
- "ref": "skills/learning-review/SKILL.md"
31
+ "ref": "kits/builder/skills/learning-review/SKILL.md"
32
32
  }
33
33
  ],
34
34
  "correction": {
@@ -73,7 +73,7 @@
73
73
  "number": 97,
74
74
  "title": "Emit source revision metadata and structured blockers",
75
75
  "state": "OPEN",
76
- "body": "## Problem\nDownstream pickup needs durable source revision and blocker metadata.\n\n## Scope\n- Emit provider-neutral work-item metadata.\n- Preserve human-readable blocker prose.\n\n## Acceptance criteria\n- Source revision fields normalize.\n- Structured blockers preserve provider refs and text blockers.\n\n## Dependencies / Blockers\nRequires kontourai/flow#2.\nBlocked by product decision on rollout scope.\n\n## Source artifact\n`.flow-agents/idea-to-backlog-source-revision-structured-blockers/idea-to-backlog-source-revision-structured-blockers--plan.md`\n\n<!-- flow-agents:work-item-metadata\n{\n \"schema_version\": \"1.0\",\n \"source_revisions\": [\n {\n \"repo\": \"kontourai/flow-agents\",\n \"planned_base_ref\": \"main\",\n \"planned_base_sha\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\n \"planned_at\": \"2026-06-03T03:23:14Z\",\n \"planning_artifact_ref\": \".flow-agents/idea-to-backlog-source-revision-structured-blockers/idea-to-backlog-source-revision-structured-blockers--plan.md\",\n \"planning_scope_refs\": [\n \"skills/idea-to-backlog/SKILL.md\",\n \"context/contracts/work-item-contract.md\"\n ]\n },\n {\n \"repo\": \"kontourai/flow\",\n \"planned_base_ref\": \"main\",\n \"planned_base_sha\": \"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\",\n \"planned_at\": \"2026-06-03T03:23:14Z\",\n \"planning_artifact_ref\": \".flow-agents/idea-to-backlog-source-revision-structured-blockers/idea-to-backlog-source-revision-structured-blockers--plan.md\",\n \"planning_scope_refs\": [\"context/contracts/work-item-contract.md\"]\n }\n ],\n \"blockers\": [\n {\n \"type\": \"work_item\",\n \"ref\": \"kontourai/flow#2\",\n \"status\": \"blocked\",\n \"summary\": \"Requires Flow contract issue first.\"\n },\n {\n \"type\": \"text\",\n \"status\": \"blocked\",\n \"summary\": \"Product decision on rollout scope.\"\n }\n ]\n}\n-->",
76
+ "body": "## Problem\nDownstream pickup needs durable source revision and blocker metadata.\n\n## Scope\n- Emit provider-neutral work-item metadata.\n- Preserve human-readable blocker prose.\n\n## Acceptance criteria\n- Source revision fields normalize.\n- Structured blockers preserve provider refs and text blockers.\n\n## Dependencies / Blockers\nRequires kontourai/flow#2.\nBlocked by product decision on rollout scope.\n\n## Source artifact\n`.flow-agents/idea-to-backlog-source-revision-structured-blockers/idea-to-backlog-source-revision-structured-blockers--plan.md`\n\n<!-- flow-agents:work-item-metadata\n{\n \"schema_version\": \"1.0\",\n \"source_revisions\": [\n {\n \"repo\": \"kontourai/flow-agents\",\n \"planned_base_ref\": \"main\",\n \"planned_base_sha\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\n \"planned_at\": \"2026-06-03T03:23:14Z\",\n \"planning_artifact_ref\": \".flow-agents/idea-to-backlog-source-revision-structured-blockers/idea-to-backlog-source-revision-structured-blockers--plan.md\",\n \"planning_scope_refs\": [\n \"kits/builder/skills/idea-to-backlog/SKILL.md\",\n \"context/contracts/work-item-contract.md\"\n ]\n },\n {\n \"repo\": \"kontourai/flow\",\n \"planned_base_ref\": \"main\",\n \"planned_base_sha\": \"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\",\n \"planned_at\": \"2026-06-03T03:23:14Z\",\n \"planning_artifact_ref\": \".flow-agents/idea-to-backlog-source-revision-structured-blockers/idea-to-backlog-source-revision-structured-blockers--plan.md\",\n \"planning_scope_refs\": [\"context/contracts/work-item-contract.md\"]\n }\n ],\n \"blockers\": [\n {\n \"type\": \"work_item\",\n \"ref\": \"kontourai/flow#2\",\n \"status\": \"blocked\",\n \"summary\": \"Requires Flow contract issue first.\"\n },\n {\n \"type\": \"text\",\n \"status\": \"blocked\",\n \"summary\": \"Product decision on rollout scope.\"\n }\n ]\n}\n-->",
77
77
  "labels": [],
78
78
  "assignees": [],
79
79
  "milestone": null,
@@ -101,7 +101,7 @@
101
101
  "number": 110,
102
102
  "title": "Fresh planned item",
103
103
  "state": "OPEN",
104
- "body": "## Scope\nUse fresh source revision metadata.\n\n## Acceptance criteria\nFreshness is verified.\n\n<!-- flow-agents:work-item-metadata\n{\n \"schema_version\": \"1.0\",\n \"planned_base_ref\": \"main\",\n \"planned_base_sha\": \"cccccccccccccccccccccccccccccccccccccccc\",\n \"planned_at\": \"2026-06-02T00:00:00Z\",\n \"planning_artifact_ref\": \".flow-agents/fresh/fresh--plan.md\",\n \"planning_scope_refs\": [\"skills/pull-work/SKILL.md\"]\n}\n-->",
104
+ "body": "## Scope\nUse fresh source revision metadata.\n\n## Acceptance criteria\nFreshness is verified.\n\n<!-- flow-agents:work-item-metadata\n{\n \"schema_version\": \"1.0\",\n \"planned_base_ref\": \"main\",\n \"planned_base_sha\": \"cccccccccccccccccccccccccccccccccccccccc\",\n \"planned_at\": \"2026-06-02T00:00:00Z\",\n \"planning_artifact_ref\": \".flow-agents/fresh/fresh--plan.md\",\n \"planning_scope_refs\": [\"kits/builder/skills/pull-work/SKILL.md\"]\n}\n-->",
105
105
  "labels": [],
106
106
  "assignees": [],
107
107
  "milestone": null,
@@ -115,7 +115,7 @@
115
115
  "number": 111,
116
116
  "title": "Drifted planned item",
117
117
  "state": "OPEN",
118
- "body": "## Scope\nUse drifted source revision metadata.\n\n## Acceptance criteria\nFreshness reports benign drift.\n\n<!-- flow-agents:work-item-metadata\n{\n \"schema_version\": \"1.0\",\n \"planned_base_ref\": \"main\",\n \"planned_base_sha\": \"dddddddddddddddddddddddddddddddddddddddd\",\n \"planned_at\": \"2026-06-01T00:00:00Z\",\n \"planning_artifact_ref\": \".flow-agents/drifted/drifted--plan.md\",\n \"planning_scope_refs\": [\"skills/pickup-probe/SKILL.md\"]\n}\n-->",
118
+ "body": "## Scope\nUse drifted source revision metadata.\n\n## Acceptance criteria\nFreshness reports benign drift.\n\n<!-- flow-agents:work-item-metadata\n{\n \"schema_version\": \"1.0\",\n \"planned_base_ref\": \"main\",\n \"planned_base_sha\": \"dddddddddddddddddddddddddddddddddddddddd\",\n \"planned_at\": \"2026-06-01T00:00:00Z\",\n \"planning_artifact_ref\": \".flow-agents/drifted/drifted--plan.md\",\n \"planning_scope_refs\": [\"kits/builder/skills/pickup-probe/SKILL.md\"]\n}\n-->",
119
119
  "labels": [],
120
120
  "assignees": [],
121
121
  "milestone": null,
@@ -129,7 +129,7 @@
129
129
  "number": 112,
130
130
  "title": "Stale planned item",
131
131
  "state": "OPEN",
132
- "body": "## Scope\nUse stale source revision metadata.\n\n## Acceptance criteria\nFreshness routes stale work.\n\n<!-- flow-agents:work-item-metadata\n{\n \"schema_version\": \"1.0\",\n \"planned_base_ref\": \"main\",\n \"planned_base_sha\": \"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\",\n \"planned_at\": \"2026-04-01T00:00:00Z\",\n \"planning_artifact_ref\": \".flow-agents/stale/stale--plan.md\",\n \"planning_scope_refs\": [\"context/contracts/work-item-contract.md\", \"skills/pull-work/SKILL.md\"]\n}\n-->",
132
+ "body": "## Scope\nUse stale source revision metadata.\n\n## Acceptance criteria\nFreshness routes stale work.\n\n<!-- flow-agents:work-item-metadata\n{\n \"schema_version\": \"1.0\",\n \"planned_base_ref\": \"main\",\n \"planned_base_sha\": \"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\",\n \"planned_at\": \"2026-04-01T00:00:00Z\",\n \"planning_artifact_ref\": \".flow-agents/stale/stale--plan.md\",\n \"planning_scope_refs\": [\"context/contracts/work-item-contract.md\", \"kits/builder/skills/pull-work/SKILL.md\"]\n}\n-->",
133
133
  "labels": [],
134
134
  "assignees": [],
135
135
  "milestone": null,
@@ -143,7 +143,7 @@
143
143
  "number": 113,
144
144
  "title": "Legacy item missing planned base",
145
145
  "state": "OPEN",
146
- "body": "## Scope\nPreserve legacy gap for missing planned_base_sha.\n\n## Acceptance criteria\nFreshness is not verified.\n\n<!-- flow-agents:work-item-metadata\n{\n \"schema_version\": \"1.0\",\n \"planned_base_ref\": \"main\",\n \"planned_at\": \"2026-06-01T00:00:00Z\",\n \"planning_artifact_ref\": \".flow-agents/legacy/legacy--plan.md\",\n \"planning_scope_refs\": [\"skills/pull-work/SKILL.md\"]\n}\n-->",
146
+ "body": "## Scope\nPreserve legacy gap for missing planned_base_sha.\n\n## Acceptance criteria\nFreshness is not verified.\n\n<!-- flow-agents:work-item-metadata\n{\n \"schema_version\": \"1.0\",\n \"planned_base_ref\": \"main\",\n \"planned_at\": \"2026-06-01T00:00:00Z\",\n \"planning_artifact_ref\": \".flow-agents/legacy/legacy--plan.md\",\n \"planning_scope_refs\": [\"kits/builder/skills/pull-work/SKILL.md\"]\n}\n-->",
147
147
  "labels": [],
148
148
  "assignees": [],
149
149
  "milestone": null,
@@ -14,7 +14,7 @@ trap 'rm -rf "$TMP_DIR"' EXIT
14
14
  pass() { echo " ✓ $1"; }
15
15
  fail() { echo " ✗ $1"; errors=$((errors + 1)); }
16
16
 
17
- CLI="$ROOT/scripts/flow-kit.js"
17
+ CLI="$ROOT/scripts/kit.js"
18
18
  MIXED_SRC="$ROOT/evals/fixtures/flow-kit-repository/mixed-runtime-kit"
19
19
 
20
20
  echo "=== activate npx-context Checks (Issue #57) ==="
@@ -27,7 +27,7 @@ mkdir -p "$DEST"
27
27
 
28
28
  # Install a kit into the destination workspace first.
29
29
  install_out="$TMP_DIR/install.out"
30
- if flow_agents_node "$CLI" install-local "$MIXED_SRC" --dest "$DEST" >"$install_out" 2>&1; then
30
+ if flow_agents_node "$CLI" install "$MIXED_SRC" --dest "$DEST" >"$install_out" 2>&1; then
31
31
  pass "mixed-runtime-kit installs into workspace"
32
32
  else
33
33
  fail "install failed (prerequisite step)"
@@ -310,20 +310,20 @@ NODE
310
310
  done
311
311
 
312
312
  for dir in "$KIRO_DEST" "$BASE_DEST" "$CLAUDE_DEST" "$CODEX_DEST"; do
313
- if [[ -f "$dir/scripts/flow-kit.js" ]] \
314
- && node "$dir/scripts/flow-kit.js" list --dest "$dir" >/tmp/flow-kit-list.out 2>&1 \
315
- && node "$dir/scripts/flow-kit.js" status --dest "$dir" >/tmp/flow-kit-status.out 2>&1 \
316
- && rg -q 'No local Flow Kits installed' /tmp/flow-kit-list.out \
317
- && rg -q 'No local Flow Kits installed' /tmp/flow-kit-status.out; then
313
+ if [[ -f "$dir/scripts/kit.js" ]] \
314
+ && node "$dir/scripts/kit.js" list --dest "$dir" >/tmp/kit-list.out 2>&1 \
315
+ && node "$dir/scripts/kit.js" status --dest "$dir" >/tmp/kit-status.out 2>&1 \
316
+ && rg -q 'No local Flow Kits installed' /tmp/kit-list.out \
317
+ && rg -q 'No local Flow Kits installed' /tmp/kit-status.out; then
318
318
  _pass "$dir includes local Flow Kit CLI and empty list/status works"
319
319
  else
320
320
  _fail "$dir local Flow Kit CLI list/status smoke failed"
321
321
  fi
322
322
  done
323
323
 
324
- if [[ -f "$CODEX_DEST/scripts/flow-kit.js" ]] \
324
+ if [[ -f "$CODEX_DEST/scripts/kit.js" ]] \
325
325
  && [[ -f "$CODEX_DEST/build/src/runtime-adapters.js" ]] \
326
- && node "$CODEX_DEST/scripts/flow-kit.js" activate --dest "$CODEX_DEST" --format json >/tmp/codex-runtime-activation.json 2>&1 \
326
+ && node "$CODEX_DEST/scripts/kit.js" activate --dest "$CODEX_DEST" --format json >/tmp/codex-runtime-activation.json 2>&1 \
327
327
  && node - "$CODEX_DEST" /tmp/codex-runtime-activation.json <<'NODE'
328
328
  const fs = require("node:fs");
329
329
  const path = require("node:path");
@@ -344,7 +344,6 @@ then
344
344
  _pass "Codex installed bundle activates Builder Kit through codex-local"
345
345
  else
346
346
  _fail "Codex installed bundle runtime activation failed"
347
- sed -n '1,180p' /tmp/codex-runtime-activation.json 2>/dev/null || true
348
347
  fi
349
348
 
350
349
  if node - "$KIRO_DEST" "$BASE_DEST" "$CLAUDE_DEST" "$CODEX_DEST" <<'NODE'
@@ -714,8 +713,11 @@ else
714
713
  _fail "Codex core-pack agent filtering failed"
715
714
  fi
716
715
 
717
- if [[ -d "$CODEX_CORE_DEST/.codex/skills/plan-work" && ! -d "$CODEX_CORE_DEST/.codex/skills/deliver" ]]; then
718
- _pass "Codex core-pack install keeps core skills and prunes optional skills"
716
+ # Kit-owned skills (plan-work, deliver) are always present regardless of pack filter.
717
+ # Pack filtering only prunes skills declared in packs.json (the tool-skills).
718
+ # The development-pack tool-skill agentic-engineering should be pruned in a core-only install.
719
+ if [[ -d "$CODEX_CORE_DEST/.codex/skills/plan-work" && -d "$CODEX_CORE_DEST/.codex/skills/deliver" && ! -d "$CODEX_CORE_DEST/.codex/skills/agentic-engineering" ]]; then
720
+ _pass "Codex core-pack install: kit-skills present, dev-only tool-skill pruned"
719
721
  else
720
722
  _fail "Codex core-pack skill filtering failed"
721
723
  fi
@@ -746,8 +748,11 @@ else
746
748
  _fail "opencode core-pack agent filtering failed (tool-planner.md missing)"
747
749
  fi
748
750
 
749
- if [[ -d "$OPENCODE_CORE_DEST/.opencode/skills/plan-work" && ! -d "$OPENCODE_CORE_DEST/.opencode/skills/deliver" ]]; then
750
- _pass "opencode core-pack install keeps core skills and prunes optional skills"
751
+ # Kit-owned skills (plan-work, deliver) are always present regardless of pack filter.
752
+ # Pack filtering only prunes skills declared in packs.json (the tool-skills).
753
+ # The development-pack tool-skill agentic-engineering should be pruned in a core-only install.
754
+ if [[ -d "$OPENCODE_CORE_DEST/.opencode/skills/plan-work" && -d "$OPENCODE_CORE_DEST/.opencode/skills/deliver" && ! -d "$OPENCODE_CORE_DEST/.opencode/skills/agentic-engineering" ]]; then
755
+ _pass "opencode core-pack install: kit-skills present, dev-only tool-skill pruned"
751
756
  else
752
757
  _fail "opencode core-pack skill filtering failed"
753
758
  fi
@@ -146,7 +146,7 @@ if jq -e '
146
146
  $ext.routing.deferred == 1 and
147
147
  ($ext.routing.targets | sort) == ["eval", "skill"] and
148
148
  ($ext.routing.statuses | sort) == ["deferred", "open"] and
149
- ($ext.routing.refs | sort) == ["github:kontourai/flow-agents#96", "skills/learning-review/SKILL.md"] and
149
+ ($ext.routing.refs | sort) == ["github:kontourai/flow-agents#96", "kits/builder/skills/learning-review/SKILL.md"] and
150
150
  $ext.correction.needed == true and
151
151
  $ext.correction.type == "workflow" and
152
152
  $ext.correction.recurrence_key == "console-learning-projection.recurrence-metadata" and
@@ -14,7 +14,7 @@ trap 'rm -rf "$TMP_DIR"' EXIT
14
14
  pass() { echo " ✓ $1"; }
15
15
  fail() { echo " ✗ $1"; errors=$((errors + 1)); }
16
16
 
17
- CLI="$ROOT/scripts/flow-kit.js"
17
+ CLI="$ROOT/scripts/kit.js"
18
18
  VALID_SRC="$ROOT/evals/fixtures/flow-kit-repository/valid-local-kit"
19
19
  DEST="$TMP_DIR/install-dest"
20
20
  mkdir -p "$DEST"
@@ -33,7 +33,7 @@ echo " (fixture repo: $FILE_URL)"
33
33
 
34
34
  # --- Test 1: basic install-git from file:// URL ---
35
35
  install_out="$TMP_DIR/install-git.out"
36
- if flow_agents_node "$CLI" install-git "$FILE_URL" --dest "$DEST" >"$install_out" 2>&1; then
36
+ if flow_agents_node "$CLI" install "$FILE_URL" --dest "$DEST" >"$install_out" 2>&1; then
37
37
  pass "install-git from file:// URL succeeds"
38
38
  else
39
39
  fail "install-git from file:// URL failed"
@@ -72,7 +72,7 @@ fi
72
72
  # --- Test 2: idempotent re-install from same URL ---
73
73
  idempotent_out="$TMP_DIR/idempotent.out"
74
74
  registry_hash_before="$(shasum -a 256 "$REGISTRY" | awk '{print $1}')"
75
- if flow_agents_node "$CLI" install-git "$FILE_URL" --dest "$DEST" >"$idempotent_out" 2>&1 \
75
+ if flow_agents_node "$CLI" install "$FILE_URL" --dest "$DEST" >"$idempotent_out" 2>&1 \
76
76
  && grep -q "already installed" "$idempotent_out" \
77
77
  && [[ "$registry_hash_before" == "$(shasum -a 256 "$REGISTRY" | awk '{print $1}')" ]]; then
78
78
  pass "install-git same-URL reinstall is idempotent"
@@ -93,7 +93,7 @@ cp -R "$VALID_SRC" "$FIXTURE_WORKING2"
93
93
  git clone -q --bare "$FIXTURE_WORKING2" "$FIXTURE_REPO2"
94
94
  FILE_URL2="file://$FIXTURE_REPO2"
95
95
 
96
- if flow_agents_node "$CLI" install-git "${FILE_URL2}#v1.0" --dest "$DEST2" >"$ref_out" 2>&1; then
96
+ if flow_agents_node "$CLI" install "${FILE_URL2}#v1.0" --dest "$DEST2" >"$ref_out" 2>&1; then
97
97
  pass "install-git with #ref fragment succeeds"
98
98
  else
99
99
  fail "install-git with #ref fragment failed"
@@ -119,7 +119,7 @@ fi
119
119
  ref_flag_out="$TMP_DIR/ref-flag.out"
120
120
  DEST3="$TMP_DIR/dest-with-ref-flag"
121
121
  mkdir -p "$DEST3"
122
- if flow_agents_node "$CLI" install-git "$FILE_URL2" --ref v1.0 --dest "$DEST3" >"$ref_flag_out" 2>&1; then
122
+ if flow_agents_node "$CLI" install "$FILE_URL2" --ref v1.0 --dest "$DEST3" >"$ref_flag_out" 2>&1; then
123
123
  pass "install-git with --ref flag succeeds"
124
124
  else
125
125
  fail "install-git with --ref flag failed"
@@ -128,7 +128,7 @@ fi
128
128
 
129
129
  # --- Test 5: missing git URL exits non-zero ---
130
130
  missing_url_out="$TMP_DIR/missing-url.out"
131
- if flow_agents_node "$CLI" install-git --dest "$DEST" >"$missing_url_out" 2>&1; then
131
+ if flow_agents_node "$CLI" install --dest "$DEST" >"$missing_url_out" 2>&1; then
132
132
  fail "install-git with no URL should exit non-zero"
133
133
  sed -n '1,40p' "$missing_url_out"
134
134
  else
@@ -137,7 +137,7 @@ fi
137
137
 
138
138
  # --- Test 6: invalid git URL exits non-zero ---
139
139
  invalid_url_out="$TMP_DIR/invalid-url.out"
140
- if flow_agents_node "$CLI" install-git "file:///nonexistent-repo-that-does-not-exist" --dest "$DEST" >"$invalid_url_out" 2>&1; then
140
+ if flow_agents_node "$CLI" install "file:///nonexistent-repo-that-does-not-exist" --dest "$DEST" >"$invalid_url_out" 2>&1; then
141
141
  fail "install-git with invalid URL should exit non-zero"
142
142
  sed -n '1,40p' "$invalid_url_out"
143
143
  else
@@ -55,15 +55,15 @@ echo "=== Flow Kit Repository Fixture Checks ==="
55
55
  expect_pass "valid-local-kit"
56
56
  expect_fail "invalid-schema-version" '\.schema_version must be "1\.0"'
57
57
  expect_fail "invalid-missing-schema-version" '\.schema_version must be "1\.0"'
58
- expect_fail "invalid-id" '\.id must be a stable kebab-case string'
59
- expect_fail "invalid-missing-id" '\.id must be a stable kebab-case string'
58
+ expect_fail "invalid-id" '\.id must be a kebab-case string'
59
+ expect_fail "invalid-missing-id" '\.id must be a kebab-case string'
60
60
  expect_fail "invalid-name" '\.name must be a non-empty string'
61
61
  expect_fail "invalid-missing-flow" 'flows\[0\]\.path points at missing Flow Definition'
62
62
  expect_fail "invalid-absolute-path" 'flows\[0\]\.path must be relative'
63
- expect_fail "invalid-traversal" "flows\\[0\\]\\.path must stay inside the kit directory"
63
+ expect_fail "invalid-traversal" "flows\\[0\\]\\.path must not contain"
64
64
  expect_fail "invalid-malformed-json" 'invalid JSON'
65
65
  expect_fail "invalid-asset-section" '\.docs must be a list'
66
- expect_fail "invalid-duplicate-flow" "flows\\[1\\]\\.id duplicates"
66
+ expect_fail "invalid-duplicate-flow" "flows\\[1\\]\\.path duplicates"
67
67
 
68
68
  echo ""
69
69
  echo "=== Builder Kit Shared Validation Check ==="
@@ -23,7 +23,7 @@ run_inspect() {
23
23
  local output="$2"
24
24
  # Route through the main CLI to avoid import.meta.url path-resolution issues.
25
25
  flow_agents_build_ts 2>/dev/null
26
- node "$FLOW_AGENTS_EVAL_ROOT/build/src/cli.js" flow-kit inspect "$kit_dir" >"$output" 2>&1
26
+ node "$FLOW_AGENTS_EVAL_ROOT/build/src/cli.js" kit inspect "$kit_dir" >"$output" 2>&1
27
27
  }
28
28
 
29
29
  # ===================================================================
@@ -12,7 +12,7 @@ trap 'rm -rf "$TMP_DIR"' EXIT
12
12
  pass() { echo " ✓ $1"; }
13
13
  fail() { echo " ✗ $1"; errors=$((errors + 1)); }
14
14
 
15
- CLI="$ROOT/scripts/flow-kit.js"
15
+ CLI="$ROOT/scripts/kit.js"
16
16
  VALID_SRC="$ROOT/evals/fixtures/flow-kit-repository/valid-local-kit"
17
17
  INVALID_SRC="$ROOT/evals/fixtures/flow-kit-repository/invalid-missing-flow"
18
18
  DEST="$TMP_DIR/install-dest"
@@ -23,7 +23,7 @@ mkdir -p "$DEST"
23
23
  echo "=== Local Flow Kit Install Checks ==="
24
24
 
25
25
  install_output="$TMP_DIR/install.out"
26
- if flow_agents_node "$CLI" install-local "$VALID_SRC" --dest "$DEST" >"$install_output" 2>&1; then
26
+ if flow_agents_node "$CLI" install "$VALID_SRC" --dest "$DEST" >"$install_output" 2>&1; then
27
27
  pass "valid local kit installs into temp destination"
28
28
  else
29
29
  fail "valid local kit install failed"
@@ -52,7 +52,7 @@ fi
52
52
 
53
53
  registry_hash_before_invalid="$(shasum -a 256 "$REGISTRY" | awk '{print $1}')"
54
54
  invalid_output="$TMP_DIR/invalid.out"
55
- if flow_agents_node "$CLI" install-local "$INVALID_SRC" --dest "$DEST" >"$invalid_output" 2>&1; then
55
+ if flow_agents_node "$CLI" install "$INVALID_SRC" --dest "$DEST" >"$invalid_output" 2>&1; then
56
56
  fail "invalid local kit install should fail"
57
57
  sed -n '1,160p' "$invalid_output"
58
58
  elif rg -q 'Flow Kit repository validation failed' "$invalid_output" \
@@ -65,7 +65,7 @@ fi
65
65
 
66
66
  registry_hash_before_idempotent="$(shasum -a 256 "$REGISTRY" | awk '{print $1}')"
67
67
  idempotent_output="$TMP_DIR/idempotent.out"
68
- if flow_agents_node "$CLI" install-local "$VALID_SRC" --dest "$DEST" >"$idempotent_output" 2>&1 \
68
+ if flow_agents_node "$CLI" install "$VALID_SRC" --dest "$DEST" >"$idempotent_output" 2>&1 \
69
69
  && rg -q "already installed" "$idempotent_output" \
70
70
  && [[ "$registry_hash_before_idempotent" == "$(shasum -a 256 "$REGISTRY" | awk '{print $1}')" ]]; then
71
71
  pass "same-source reinstall is idempotent"
@@ -79,7 +79,7 @@ cp -R "$VALID_SRC" "$CONFLICT_SRC"
79
79
  printf '\nconflict copy\n' >> "$CONFLICT_SRC/docs/README.md"
80
80
  conflict_output="$TMP_DIR/conflict.out"
81
81
  registry_hash_before_conflict="$(shasum -a 256 "$REGISTRY" | awk '{print $1}')"
82
- if flow_agents_node "$CLI" install-local "$CONFLICT_SRC" --dest "$DEST" >"$conflict_output" 2>&1; then
82
+ if flow_agents_node "$CLI" install "$CONFLICT_SRC" --dest "$DEST" >"$conflict_output" 2>&1; then
83
83
  fail "different source with existing kit id should conflict"
84
84
  sed -n '1,160p' "$conflict_output"
85
85
  elif rg -q 'conflict: kit' "$conflict_output" \
@@ -91,7 +91,7 @@ else
91
91
  fi
92
92
 
93
93
  force_conflict_output="$TMP_DIR/force-conflict.out"
94
- if flow_agents_node "$CLI" install-local "$CONFLICT_SRC" --dest "$DEST" --force >"$force_conflict_output" 2>&1; then
94
+ if flow_agents_node "$CLI" install "$CONFLICT_SRC" --dest "$DEST" --force >"$force_conflict_output" 2>&1; then
95
95
  fail "--force should not replace a different-source duplicate id"
96
96
  sed -n '1,160p' "$force_conflict_output"
97
97
  elif rg -q 'conflict: kit' "$force_conflict_output" \
@@ -103,7 +103,7 @@ else
103
103
  fi
104
104
 
105
105
  update_output="$TMP_DIR/update.out"
106
- if flow_agents_node "$CLI" install-local "$CONFLICT_SRC" --dest "$DEST" --update >"$update_output" 2>&1 \
106
+ if flow_agents_node "$CLI" install "$CONFLICT_SRC" --dest "$DEST" --update >"$update_output" 2>&1 \
107
107
  && rg -q "updated local kit" "$update_output" \
108
108
  && rg -q "$CONFLICT_SRC" "$REGISTRY"; then
109
109
  pass "explicit update replaces duplicate id source"
@@ -112,7 +112,7 @@ status=$?
112
112
 
113
113
  for risk in runtime schema package hook security; do
114
114
  case "$risk" in
115
- runtime) path="scripts/flow-kit.js" ;;
115
+ runtime) path="scripts/kit.js" ;;
116
116
  schema) path="schemas/workflow-evidence.schema.json" ;;
117
117
  package) path="package.json" ;;
118
118
  hook) path="scripts/hooks/quality-gate.js" ;;