okstra 0.220.1 → 0.222.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/dist/cli-registry.mjs +6 -0
- package/dist/cli-registry.mjs.map +1 -1
- package/docs/architecture/storage-model.md +1 -1
- package/docs/architecture.md +6 -4
- package/docs/cli.md +13 -9
- package/docs/project-structure-overview.md +5 -1
- package/package.json +1 -1
- package/runtime/BUILD.json +2 -2
- package/runtime/prompts/launch.template.md +1 -1
- package/runtime/prompts/lead/convergence.md +3 -1
- package/runtime/prompts/lead/okstra-lead-contract.md +10 -6
- package/runtime/prompts/lead/phase-routing.md +1 -1
- package/runtime/prompts/lead/team-contract.md +1 -1
- package/runtime/python/okstra_ctl/adapters/hosts/capability_adapter.py +3 -2
- package/runtime/python/okstra_ctl/adapters/hosts/claude-code/relay.md +3 -3
- package/runtime/python/okstra_ctl/adapters/hosts/claude-code/worker-session.md +4 -2
- package/runtime/python/okstra_ctl/adapters/hosts/grok/relay.md +3 -3
- package/runtime/python/okstra_ctl/adapters/providers/antigravity/adapter.py +27 -0
- package/runtime/python/okstra_ctl/adapters/providers/claude/adapter.py +24 -0
- package/runtime/python/okstra_ctl/adapters/providers/codex/adapter.py +24 -0
- package/runtime/python/okstra_ctl/adapters/providers/grok/adapter.py +25 -0
- package/runtime/python/okstra_ctl/adapters/providers/zai/adapter.py +20 -1
- package/runtime/python/okstra_ctl/agent/prompt_cli/materialize.py +3 -0
- package/runtime/python/okstra_ctl/analysis_packet.py +14 -0
- package/runtime/python/okstra_ctl/business_flow/engine.py +1 -0
- package/runtime/python/okstra_ctl/convergence.py +155 -19
- package/runtime/python/okstra_ctl/convergence_critic_prompt.py +3 -2
- package/runtime/python/okstra_ctl/convergence_migration.py +10 -1
- package/runtime/python/okstra_ctl/convergence_provenance.py +69 -24
- package/runtime/python/okstra_ctl/convergence_reverify_prompt.py +4 -1
- package/runtime/python/okstra_ctl/correction_cli.py +50 -11
- package/runtime/python/okstra_ctl/correction_round.py +80 -11
- package/runtime/python/okstra_ctl/domain/mcp.py +43 -0
- package/runtime/python/okstra_ctl/domain/provider.py +2 -0
- package/runtime/python/okstra_ctl/domain/wizard/interaction.py +89 -8
- package/runtime/python/okstra_ctl/file_size_cap.py +142 -0
- package/runtime/python/okstra_ctl/fix_cycles.py +14 -1
- package/runtime/python/okstra_ctl/git_reconcile.py +62 -8
- package/runtime/python/okstra_ctl/initial_prompt_materialization.py +3 -6
- package/runtime/python/okstra_ctl/manager_cli.py +11 -1
- package/runtime/python/okstra_ctl/manager_sync.py +38 -2
- package/runtime/python/okstra_ctl/mcp_cli.py +179 -0
- package/runtime/python/okstra_ctl/mcp_servers.py +421 -0
- package/runtime/python/okstra_ctl/next_phase.py +22 -9
- package/runtime/python/okstra_ctl/phases/final_verification/target.py +4 -2
- package/runtime/python/okstra_ctl/phases/implementation/entry.py +6 -2
- package/runtime/python/okstra_ctl/phases/implementation/host-rules.md +1 -0
- package/runtime/python/okstra_ctl/phases/implementation/instructions/_implementation-deliverable.md +5 -4
- package/runtime/python/okstra_ctl/phases/implementation/instructions/_implementation-executor.md +1 -0
- package/runtime/python/okstra_ctl/phases/implementation/instructions/_implementation-self-check.md +1 -0
- package/runtime/python/okstra_ctl/phases/implementation/instructions/_implementation-verifier.md +3 -2
- package/runtime/python/okstra_ctl/phases/implementation_option_selection/profile.md +1 -1
- package/runtime/python/okstra_ctl/phases/implementation_planning/authoring.py +19 -0
- package/runtime/python/okstra_ctl/phases/implementation_planning/instructions/plan-body-verification.md +14 -0
- package/runtime/python/okstra_ctl/phases/implementation_planning/profile.md +2 -1
- package/runtime/python/okstra_ctl/phases/technical_verification/entry.py +37 -0
- package/runtime/python/okstra_ctl/phases/technical_verification/validation.py +3 -3
- package/runtime/python/okstra_ctl/process_group.py +4 -0
- package/runtime/python/okstra_ctl/render.py +7 -48
- package/runtime/python/okstra_ctl/report_assembly.py +50 -13
- package/runtime/python/okstra_ctl/report_html/common.py +3 -1
- package/runtime/python/okstra_ctl/report_language.py +4 -5
- package/runtime/python/okstra_ctl/report_projections.py +45 -4
- package/runtime/python/okstra_ctl/report_synthesis_packet.py +22 -1
- package/runtime/python/okstra_ctl/run.py +36 -5
- package/runtime/python/okstra_ctl/stage_done.py +37 -3
- package/runtime/python/okstra_ctl/stage_reconcile.py +49 -1
- package/runtime/python/okstra_ctl/wizard/steps_plan.py +3 -3
- package/runtime/schemas/final-report-v3.0.schema.json +36 -0
- package/runtime/skills/_fragments/wizard-lead-takeover.md +1 -1
- package/runtime/skills/_fragments/wizard-relay-protocol.md +2 -2
- package/runtime/skills/okstra-discussion/SKILL.md +3 -3
- package/runtime/skills/okstra-manager/SKILL.md +1 -0
- package/runtime/skills/okstra-run/SKILL.md +4 -3
- package/runtime/skills/okstra-setup/SKILL.md +2 -0
- package/runtime/skills/okstra-setup/references/project-config.md +34 -0
- package/runtime/templates/report-writer-prompt-preamble.md +1 -1
- package/runtime/templates/reports/html/base.template.html +6 -1
- package/runtime/templates/reports/html/i18n/en.json +1 -0
- package/runtime/templates/reports/html/i18n/ko.json +1 -0
- package/runtime/templates/reports/task-brief.template.md +3 -3
- package/runtime/validators/validate-run.py +18 -2
- package/runtime/validators/validate_session_conformance.py +19 -1
package/dist/cli-registry.mjs
CHANGED
|
@@ -94,6 +94,12 @@ export const COMMAND_REGISTRY = [
|
|
|
94
94
|
category: "admin",
|
|
95
95
|
summary: ["List models and set or unset role model defaults"],
|
|
96
96
|
},
|
|
97
|
+
{
|
|
98
|
+
name: "mcp",
|
|
99
|
+
python: { target: { module: "okstra_ctl.mcp_cli" } },
|
|
100
|
+
category: "admin",
|
|
101
|
+
summary: ["Declare project MCP servers; check which providers reach them"],
|
|
102
|
+
},
|
|
97
103
|
{
|
|
98
104
|
name: "worker-dispatch",
|
|
99
105
|
python: { target: { module: "okstra_ctl.worker_dispatch" }, inject: ["workspace-root", "okstra-bin"] },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-registry.mjs","sourceRoot":"","sources":["../src/cli-registry.mts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli-registry.mjs","sourceRoot":"","sources":["../src/cli-registry.mts"],"names":[],"mappings":"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"}
|
|
@@ -429,7 +429,7 @@ Convergence keeps its decision trail under the run's `state/` directory:
|
|
|
429
429
|
- `state/convergence-<task-type>-<seq>.json` — validated terminal schema v1.4 state consumed by reporting and Phase 7. Historical v1.0-v1.3 artifacts are read as they are.
|
|
430
430
|
- `state/migrations/` — byte-for-byte archives of invalid or partial legacy state replaced during an explicit Round 0 restart.
|
|
431
431
|
|
|
432
|
-
A valid terminal legacy final is reused unchanged, and a matching valid working state resumes. Invalid new-engine working state fails closed unless seeding receives `--restart-from-round0
|
|
432
|
+
A valid terminal legacy final is reused unchanged, and a matching valid working state resumes. Invalid new-engine working state fails closed unless seeding receives `--restart-from-round0`, which is refused for a valid or absent working state; an implementation correction round's re-convergence writes `convergence-{groups-,work-,}correction-r<N>-<task-type>-<seq>.json` beside the initial files; an existing final can be replaced only when its migration archive still matches its original bytes.
|
|
433
433
|
|
|
434
434
|
Recommended worker status values:
|
|
435
435
|
|
package/docs/architecture.md
CHANGED
|
@@ -279,6 +279,8 @@ Other variables such as `PROJECT_ID`, `TASK_GROUP`, `RUN_*`, `FINAL_*`, and `CLA
|
|
|
279
279
|
|
|
280
280
|
Host adapters and model providers are independent axes. The host registry discovers bundled adapters and explicit user installs under `~/.okstra/adapters/hosts/<id>/`; the provider registry uses the parallel `~/.okstra/adapters/providers/<id>/` root. Neither registry executes adapter code found in a project repository. A host descriptor names its native provider, while every non-native worker assignment resolves through the provider's CLI wrapper.
|
|
281
281
|
|
|
282
|
+
A provider adapter may also set `ProviderSpec.mcp_inventory`: a command that lists that provider CLI's MCP servers without an inference call, plus a parser that turns its output into `(visible name, enabled | disabled | needs-auth)` rows. prepare and `okstra mcp check` run each distinct command once in the project root under a 20-second limit and match the rows against `.okstra/project.json` `mcpServers` names and aliases (`scripts/okstra_ctl/mcp_servers.py`). The core never names a provider: an adapter without the field, or whose command fails, reports every declared server as `unknown` for that provider.
|
|
283
|
+
|
|
282
284
|
The terminal front door accepts `okstra run <host-id-or-alias>`, resolves it through `HostAdapterRegistry`, and probes `entry_mode="spawn-process"` readiness before starting that adapter's CLI. It does not infer the host from installed provider binaries and does not fall back to another host when the selected adapter is unavailable.
|
|
283
285
|
|
|
284
286
|
The legacy standalone shell path remains Claude-specific:
|
|
@@ -368,7 +370,7 @@ Coverage critic and plan-body verification remain separate from finding converge
|
|
|
368
370
|
|
|
369
371
|
`okstra convergence` and `okstra plan-items` are lead-contract admin interfaces, not public skill entry points. The former `okstra-convergence` skill stays obsolete; these commands do not expand the installed public skill roster.
|
|
370
372
|
|
|
371
|
-
Seeding provides the migration boundary for in-progress runs. A valid terminal legacy final is reused unchanged. A matching valid working state resumes. A malformed or partial legacy state is archived byte-for-byte under `state/migrations/` before an explicit Round 0 restart; an invalid new-engine working state fails closed until `--restart-from-round0` is supplied. Replacement of an existing final is allowed only while its recorded archive still matches the original bytes.
|
|
373
|
+
Seeding provides the migration boundary for in-progress runs. A valid terminal legacy final is reused unchanged. A matching valid working state resumes. A malformed or partial legacy state is archived byte-for-byte under `state/migrations/` before an explicit Round 0 restart; an invalid new-engine working state fails closed until `--restart-from-round0` is supplied, and the flag is refused when there is no invalid working state to recover. An implementation correction round re-converges in its own `correction-r<N>` namespace of state, plan and reverify names, so the initial final is never reseeded. Replacement of an existing final is allowed only while its recorded archive still matches the original bytes.
|
|
372
374
|
|
|
373
375
|
## Stable task identity
|
|
374
376
|
|
|
@@ -467,7 +469,7 @@ The fourth column is the `workflow.nextRecommendedPhase` pointer Phase 7 leaves
|
|
|
467
469
|
| `implementation-planning` | Expand one selected direction into an executable plan without changing its mechanism or architecture boundary | selected-direction snapshot/reference, direction realization, affected-file list, Stage Map, validation/rollback, exact plan coverage, YAML frontmatter `approved: false`, **§5.5.9 Plan Body Verification**. Existing plans without `planningContract: selected-direction` retain the legacy option-candidate and `implementation-option:` contract | from `implementationPlanning.outcome`: `ready` at `implementation` on `plan-ready` or on a candidate-comparison plan with no `outcome` (the plan still needs its separate approval before that run starts), `ready` at `implementation-option-selection` on `direction-invalidated` | No |
|
|
468
470
|
| `implementation` | Modify source code according to the approved `implementation-planning` final report. **One run executes exactly one stage** (selected with `--stage <auto\|N>`) | commit list, diff summary, out-of-plan edits block, validation/TDD evidence, rollback verification, verifier results (Antigravity/Codex/Claude), `carry/stage-<N>.json` evidence sidecar | from `implementation.routingRecommendation.target`: `ready` at that phase — `final-verification` on a clean stage, otherwise `error-analysis`, `implementation-planning`, or `implementation` | Yes (limited to the approved plan's file list; `git push`/publish/deploy/real migration prohibited) |
|
|
469
471
|
| `final-verification` | Check completed work for residual defects and regression risk, then make a release judgment | acceptance verdict, residual risk, follow-up routing (`error-analysis`/`implementation-option-selection`/`implementation-planning`/`release-handoff`/`final-verification`) | from `finalVerification.routingRecommendation.target`: `ready` at that value — `release-handoff` only on an `accepted` verdict, otherwise the phase owning the defect (cause, selected direction, or detailed plan). `release-handoff(stage-group)` is a scope qualifier on the same phase, so it projects to `release-handoff`; either verification scope may route there, since a handoff opens one PR per stage. `final-verification` re-runs this phase on the same head, and is for a run whose every remaining blocker is an environment or configuration fault this report already diagnosed. `done` becomes `terminal` | No (read-only tests only) |
|
|
470
|
-
| `release-handoff` | Deliver `accepted` changes as a commit, push, or PR according to the user's chosen method | user menu responses (H1 action / H2 PR base / H3 message handling), executed git/gh command log, commit SHA list, PR URL |
|
|
472
|
+
| `release-handoff` | Deliver `accepted` changes as a commit, push, or PR according to the user's chosen method | user menu responses (H1 action / H2 PR base / H3 message handling), executed git/gh command log, commit SHA list, PR URL | `terminal` once every selected stage is delivered — the lifecycle ends here and the routing field is free text. `ready` at `release-handoff` when H1 was `skip` or any `pullRequestOutcomes` row is `skipped`, so the task stays open for re-entry | Yes—but execute **only the mutating commands selected by the user in the menu**. `git push --force*`, direct push to the base branch, `--no-verify`, `gh release`, and publish/deploy are prohibited. The source code itself must not be changed; package the existing `implementation` diff unchanged. |
|
|
471
473
|
| `project-analysis` | Map the current project structure and feature index | components, dependencies, entry points, data stores, external systems, feature index | always `pending` with no phase — a sidetrack settles no route | No (strictly read-only; tests are also prohibited) |
|
|
472
474
|
| `feature-analysis` | Trace one confirmed existing feature | flows, domain rules, state changes, external interactions, test coverage | always `pending` with no phase — a sidetrack settles no route | No (strictly read-only; tests are also prohibited) |
|
|
473
475
|
| `change-impact-analysis` | Map the impact of one proposed change | preserved behavior, impact items, dependency blast radius, test and operational impact | always `pending` with no phase — a sidetrack settles no route | No (strictly read-only; tests are also prohibited) |
|
|
@@ -496,9 +498,9 @@ Common constraints:
|
|
|
496
498
|
|
|
497
499
|
If a bug is discovered in artifacts after a task has completed release-handoff, fix it by reentering the same task ID through an entry phase (`requirements-discovery` / `error-analysis` / `implementation-option-selection` / `implementation-planning`). There is no dedicated hotfix task type, and the phase gates remain unchanged. This set of reentry runs is a **fix cycle**. Its source of truth is the append-only event rows (`opened` / `run` / `closed`) in `<task_root>/history/fix-cycles.jsonl`, owned exclusively by the module `scripts/okstra_ctl/fix_cycles.py`. The entry-phase list is defined only in `fix_cycles.FIX_CYCLE_ENTRY_PHASES` and is shared by the prepare gate and wizard detection predicate.
|
|
498
500
|
|
|
499
|
-
- **Entry**: The okstra-run wizard detects reentry into an entry phase for a completed task and confirms it at the `fix_cycle_confirm` step. The CLI uses `--fix-cycle <yes|no>` (when omitted, nothing is recorded). `--fix-cycle yes` opens a cycle only if both guards pass: task type is an entry phase, and the manifest's `workflow.lastCompletedPhase` is `release-handoff`; a violation raises `PrepareError`. A task may have only one open cycle at a time.
|
|
501
|
+
- **Entry**: The okstra-run wizard detects reentry into an entry phase for a completed task and confirms it at the `fix_cycle_confirm` step. The CLI uses `--fix-cycle <yes|no>` (when omitted, nothing is recorded). `--fix-cycle yes` opens a cycle only if both guards pass: task type is an entry phase, and the manifest's `workflow.lastCompletedPhase` is `release-handoff` with `workflow.nextRecommendedPhase` not pointing back at `release-handoff` (`fix_cycles.delivery_completed`; a handoff that ended in `skip` or left a `skipped` PR row is not complete); a violation raises `PrepareError`. The wizard asks `fix_cycle_confirm` under the same predicate. A task may have only one open cycle at a time.
|
|
500
502
|
- **Attachment**: While a cycle is open, all runs for the same task attach to it as `run` rows even without a later `--fix-cycle` flag, and `fixCycleId` is recorded in run-manifest and timeline entries.
|
|
501
|
-
- **Closure**: After a release-handoff run attaches to an open cycle and the manifest's `workflow.lastCompletedPhase` becomes `release-handoff`, the next prepare lazily appends a `closed` row.
|
|
503
|
+
- **Closure**: After a release-handoff run attaches to an open cycle and the manifest's `workflow.lastCompletedPhase` becomes `release-handoff`, the next prepare lazily appends a `closed` row. A handoff that left delivery owed (H1 `skip` or a `skipped` PR row, so `workflow.nextRecommendedPhase` points back at `release-handoff`) does not close the cycle; the next release-handoff run attaches to it.
|
|
502
504
|
- **Consumers (all derived views)**: ① the `## Fix History` section of a later run's analysis-packet ② quotation in Task Continuity Notes from okstra-brief-gen ③ final-report `## 5.10 Fix History` ④ a `fixCycles` summary in task-manifest plus a one-line entry in task-index / task-catalog. All four consumers read only derived views from `fix_cycles.summarize()` / `packet_summary()`.
|
|
503
505
|
|
|
504
506
|
### release-handoff: one stage, one PR
|
package/docs/cli.md
CHANGED
|
@@ -441,7 +441,7 @@ scripts/okstra.sh --task-type implementation-planning ... \
|
|
|
441
441
|
### `--fix-cycle`
|
|
442
442
|
|
|
443
443
|
- `--fix-cycle <yes|no>` records whether re-entry into an entry phase (`requirements-discovery` / `error-analysis` / `implementation-option-selection` / `implementation-planning`) after completion through release-handoff is a bug-fix cycle. When omitted, no cycle is recorded. The `fix_cycle_confirm` step in the okstra-run wizard accepts the same input.
|
|
444
|
-
- `yes` opens a new cycle only when both conditions hold: the task type is an entry phase, and the manifest's `workflow.lastCompletedPhase` is `release-handoff
|
|
444
|
+
- `yes` opens a new cycle only when both conditions hold: the task type is an entry phase, and the manifest's `workflow.lastCompletedPhase` is `release-handoff` with delivery finished — a release-handoff that ended in `skip` or left a stage's PR `skipped` points the next phase back at `release-handoff`, and that task is refused. Preparation rejects the request if either condition is false. Once a cycle is open, later runs for the same task attach to it automatically without this flag.
|
|
445
445
|
|
|
446
446
|
### `--lead-runtime`
|
|
447
447
|
|
|
@@ -833,15 +833,18 @@ The `okstra` Node CLI (`bin/okstra`) provides both installer/admin commands and
|
|
|
833
833
|
| `okstra doctor [--runtime claude-code\|codex\|antigravity\|external\|all] [--phase <phase>] [--json]` | Diagnose the runtime, Python imports, skill/agent installation, and model-pool state. The JSON `modelPool` object reports pool errors, default errors, binding precision, observed model, max write boundary, and invocation downgrade reason. It never sends an inference call. The `codex`, `antigravity`, and `external` runtimes omit Claude skill checks. `--phase` adds readiness checks for `implementation`, `final-verification`, `release-handoff`, or `improvement-discovery` |
|
|
834
834
|
| `okstra model list [--role <role>] [--host <host>] [--json]` | List catalog models for a host and optional role. Unselectable exact bindings report `exact binding unavailable`. No inference call |
|
|
835
835
|
| `okstra model default set\|unset <role> ... --scope project\|global [--cwd <dir>]` | Atomically write or remove `modelDefaults` for one canonical role |
|
|
836
|
+
| `okstra mcp add --name <name> --description <text> --tool <tool>... [--alias <name>...] [--notes <text>] [--cwd <dir>]` | Validate and add, or replace by name, one `.okstra/project.json` `mcpServers` entry. `--alias` names the server as a provider CLI lists it |
|
|
837
|
+
| `okstra mcp list [--json] [--cwd <dir>]` / `okstra mcp remove --name <name> [--cwd <dir>]` | Print the declared servers and any malformed entries (exit 1 when one is malformed) / remove one entry by name |
|
|
838
|
+
| `okstra mcp check [--provider <id>...] [--brief <path>] [--json] [--cwd <dir>]` | Run each provider adapter's MCP listing (`ProviderSpec.mcp_inventory`, no inference call) and report every declared server as `reachable`, `disabled`, `missing`, or `unknown` (the adapter cannot list) per provider. Defaults to every registered provider. `--brief` adds the brief MCP-source check. prepare runs the same check for the run's providers, prints `prepare: mcp: ...` warnings, and renders the result into the launch prompt and the analysis packet; it never refuses a run |
|
|
836
839
|
| `okstra setup --project-id <id>` | Create or update `.okstra/project.json` in the current project. When `<PROJECT_ROOT>/CLAUDE.md` or `AGENTS.md` already exists, it also appends — or refreshes in place — an okstra-managed block between `<!-- okstra:citation-guidance:begin -->` / `end` telling agents not to cite okstra-internal references (report section numbers, `C-NNN` ids, run/stage ids, `.okstra/...` paths) outside an okstra report. Neither file is created, and a failure is a warning, not an error |
|
|
837
840
|
| `okstra check-project [--json]` | Verify that the current project is registered |
|
|
838
841
|
| `okstra preflight [--runtime <name>] [--cwd <dir>] [--machine]` | Single skill-preflight call combining `ensure-installed`, with silent reinstall when stale, `check-project`, and host-specific `runtimeReadiness`. It defaults to a fixed text projection. `--machine` returns the automation JSON contract, and `--json` is a deprecated one-release alias. A `claude-code` host checks project workspace trust. A `codex` current-session host verifies write access to `~/.okstra/worktrees/registry.lock`; a sandbox denial blocks before the wizard with the `switch-codex-to-full-access-and-rerun` action. `antigravity` and `external` hosts return ready without reading Claude Code state. Step 0 of every project-scoped skill converges on this command |
|
|
839
|
-
| `okstra convergence seed --groups <path> --work-state <path> --final-state <path> --migration-dir <dir> [--restart-from-round0]` | Create, resume, reuse, or explicitly recover deterministic convergence state |
|
|
840
|
-
| `okstra convergence plan-round --work-state <path> --plan <path>` | Persist the next roster-aware dispatch plan without mutating working state |
|
|
841
|
-
| `okstra convergence collect-results --plan <round-plan.json> --result <worker>=<path>… --run-manifest <run-manifest.json> --output <round-results.json
|
|
842
|
+
| `okstra convergence seed --groups <path> --work-state <path> --final-state <path> --migration-dir <dir> [--restart-from-round0]` | Create, resume, reuse, or explicitly recover deterministic convergence state. `--restart-from-round0` is refused unless the working state is invalid. State paths named `…-correction-r<N>-<task-type>-<seq>.json` seed an implementation correction round's re-convergence, checked against that round's verifier results |
|
|
843
|
+
| `okstra convergence plan-round --work-state <path> --plan <path>` | Persist the next roster-aware dispatch plan without mutating working state; refuses to overwrite a different plan at `--plan` whose round its namespace already dispatched |
|
|
844
|
+
| `okstra convergence collect-results --plan <round-plan.json> --result <worker>=<path>… --run-manifest <run-manifest.json> --output <round-results.json> [--correction-round <N>]` | Read one round's worker responses into the `apply-round --results` shape. The reverify prompt answers `REFUTED` / `SURVIVES` / `SURVIVES-WITH-CAVEAT` / `UNVERIFIABLE`, which this maps to `disagree` / `agree` / `supplement` / `unverifiable`, and copies `**Basis**` into `disagreeBasis`. `--dispatch` supplies the terminal status and duration, which live in the dispatch rather than the response; a worker that never returned gets a `--dispatch` and no `--result`. Exits 2 on a dispatched finding with no verdict, a verdict for a finding the plan did not dispatch to that worker, a planned worker with no recorded outcome, or a vote with no explanation |
|
|
842
845
|
| `okstra convergence apply-round --work-state <path> --plan <path> --results <path>` | Validate one complete structured result set and atomically reduce it into working state |
|
|
843
846
|
| `okstra convergence critic-prompt --run-manifest <path>` | Render the critic task instructions to stdout — the acceptance critic's on `final-verification`, the coverage critic's elsewhere; the lead writes the output verbatim into the file the prompt materializer's `--instruction` takes. The body carries the run's Round 0 consolidated findings, one line per Phase 4 analyser (worker id, result path, its finding ids), the two mandates plus the `duplicateOf` declaration rule, and — on an implementation-planning re-run — an already-covered index of the prior report's requirement-coverage row ids, clarification row ids, and stage titles (ids and titles only, never body text). Emits the `**Prompt Delivery Mode:**` header and the `Primary analysis packet` line the critic dispatch contract requires, so no part of the critic body is hand-written. The acceptance body carries the analysis packet, the analyser result lines and the acceptance mandate with the `### [AC-NNN]` candidate format, and omits the Round 0 list to stay inside the final-verification 96-line cap. Exits 2 when the run has published no grouping yet, or when the manifest carries no `analysisPacketPath` |
|
|
844
|
-
| `okstra convergence reverify-prompt --run-manifest <path> --plan <round-plan.json> --worker <worker-id
|
|
847
|
+
| `okstra convergence reverify-prompt --run-manifest <path> --plan <round-plan.json> --worker <worker-id> [--correction-round <N>]` | Render one worker's reverify task instructions to stdout; the lead writes the output verbatim into the file the prompt materializer's `--instruction` takes. The body carries the adversarial mandate, the plan row's findings in plan order — each with its summary, origin worker, cited-evidence line, the origin worker's result file and `### <item-id>` section, and the origin audit sidecar the verifier is told it may open — and the response format the collector parses. Exits 2 when the plan dispatches nothing to that worker, names a finding the grouping lacks, or is not a `dispatch` plan |
|
|
845
848
|
| `okstra convergence critic-verify-prompt --run-manifest <path> --gaps <critic-batch.json> --worker <worker-id>` | Render one Phase 4 analyser's coverage-critic gap verification instructions to stdout; the lead writes the output verbatim into the file the prompt materializer's `--instruction` takes and materializes it with `--dispatch-kind critic-verify` under the analyser's `reverify/<worker-id>` assignment ref. Input is the pre-vote coverage batch (`mode: coverage`, `gaps[]` with `gapId`, `summary`, `category`, `ticketIds`, `originEvidence`, optional `duplicateOf`) the lead later passes to `apply-critic-gaps`; gaps are assigned round-robin over the grouping's analysis roster exactly as `apply-critic-gaps` checks them, and the body carries only this analyser's share — each gap with the critic's result file (`<provider>-worker-critic-<task-type>-<seq>.md`) and `### [<gapId>]` section, the critic audit sidecar, and the adversarial response format. A batch with `mode: acceptance-devils-advocate` and `candidates[]` (`candidateId`, `statement`, `severity`, `originEvidence`) renders the confirm-or-downgrade instructions instead: every analyser gets every candidate, each pointing at the critic result section whose heading names that `candidateId`, in either the bracketed or the plain heading form. Exits 2 when the batch's taskKey or mode does not match, the run has no critic assignment, the critic result is not collected yet, the worker is not an analyser, or round-robin assigns it no gap |
|
|
846
849
|
| `okstra convergence collect-acceptance-votes --run-manifest <path> --candidates <batch.json> --result <worker>=<path>… --output <batch.json>` | Read the analysers' `critic-verify` responses to the acceptance candidates and write the `apply-acceptance-critic --results` batch: a candidate any analyser answers `SURVIVES` or `SURVIVES-WITH-CAVEAT` is `confirmed`, every other candidate `downgraded`; each candidate row keeps the per-analyser votes. Exits 2 when a worker is not an analyser or returned no verdict for a candidate |
|
|
847
850
|
| `okstra convergence census-audit --run-manifest <path> --result <worker>=<path>… [--gapfill <worker>=<path>…]` | Read every analysis worker's `Coverage Verdicts` against the run's coverage census and write `state/coverage-census-audit-<task-type>-<seq>.json`: each worker's cells without a usable verdict and why, the cell × worker matrix, the cells one worker judged `finding` and another `clean`, and per-cell grouping suggestions. `--gapfill` merges a worker's one `census-gapfill` result; a `--result` or `--gapfill` path that does not exist is recorded as missing. Prints a JSON summary with `gapfillNeeded` and per-worker `unverdicted` counts. Unjudged cells never change the exit code; a run without a census prints `"census": "absent"` and writes nothing |
|
|
@@ -868,8 +871,8 @@ The `okstra` Node CLI (`bin/okstra`) provides both installer/admin commands and
|
|
|
868
871
|
| `okstra memory <add\|list\|search\|show\|archive>` | Manage global conversation memory in `~/.okstra/memory-book`, a user-home store separate from project `.okstra/` and the CLI basis of the `save this in okstra` natural-language skill. `add --source-key <key>` records the source an entry stands for: adding the same key again returns the stored entry (`created: false`) instead of a second one, also when two adds race, and with `--json` a likely-secret refusal is printed as `{ ok: false, refused: "secret", secrets, message }`. An add without `--source-key` is unchanged |
|
|
869
872
|
| `okstra chat <rooms\|create\|join\|members\|send\|unread\|inbox\|log\|ack>` | Global rooms under `~/.okstra/chat`. Join takes an explicit `--name`. Send takes exactly one of `--to` (`all` or a member; may equal `--as`) or `--reply-to` (an id in that room), and exactly one of `--body` or `--body-file`; a body may span several lines. A reply inherits `to` from the parent (`all` stays `all`, otherwise the parent's `from`). Unread is the inbox after the read cursor minus messages the participant sent; it does not move the cursor. `inbox` and `log` keep those arrivals, including after ack. Rows are `id @from YYYY-MM-DD HH:MM body`; a reply inserts `↑parentId` after the time; the second and later lines of a body follow on rows indented by two spaces. `ack --through` rejects an id behind the current cursor. Room and display names `.` and `..` are reserved. A `.lock` left by a dead process (pid recorded in the file) or older than 5 s is reclaimed. CLI basis of the `okstra-chat` skill. |
|
|
870
873
|
| `okstra model-io active-context-input --project-root <dir> --run-manifest <path>` | Resolve the prior implementation-planning active context only through the current project and run authority, then emit fixed fields such as the executor base ref. Caller-supplied active-context paths are not accepted. |
|
|
871
|
-
| `okstra convergence prepare-groups --run-manifest <path> --input <grouping.md
|
|
872
|
-
| `okstra manager <init\|discover-projects\|new\|task\|list\|remove\|view> [--json]` | Public CLI for grouping cross-project okstra tasks into manager-owned context. The default is purpose-specific fixed text for model use; `--json` preserves the machine contract and exit codes. `new project --project-root` accepts only existing directories and performs setup-equivalent registration only if `.okstra/project.json` is absent. `list managers`, `list projects --manager-id <id>` and `list tasks --manager-id <id>` enumerate manager state; `view --manager-id <id>` writes `~/.okstra/managers/<id>/view/index.html` and prints its path and `file://` URL. `task split --plan <json>` writes one validated brief with a `## Project Scope` section into each project an issue is assigned to and registers those children; `task run` then passes `--task-brief`. `task run` re-reads the target child's state from its project and refuses a child that is already done there, naming its last phase and report, unless `--allow-completed` is given. For a child whose task type is `discussion`, `task sync` records a `discussion` block read from the discussion record without writing to it — state (`draft`, `completed`, or `unknown` when the record cannot be read), phase, pending questions, revisions with their change reasons, and each follow-up's pinned revision and impact-review state, re-read from the follow-up's brief — and `task status` counts the child under `discussion`, never under `done`. `task run` for a child without a registered brief takes the brief that `okstra discussion follow-up-brief` wrote for it, found in the last-synced links of a discussion child of the same manager task. `list task-groups` lists groups including empty ones; `task update` edits a task's objective, common brief or progress mode; `remove project`, `remove task`, `remove task-group` and `task remove-child` print their targets and delete manager files only with `--confirm`, and `remove project` keeps the project's children marked unlinked. |
|
|
874
|
+
| `okstra convergence prepare-groups --run-manifest <path> --input <grouping.md> [--correction-round <N>]` | Parse fixed grouping Markdown, validate distinct per-worker evidence and group semantics against the run authority, then publish the schema-valid groups artifact at the run-owned path. |
|
|
875
|
+
| `okstra manager <init\|discover-projects\|new\|task\|list\|remove\|view> [--json]` | Public CLI for grouping cross-project okstra tasks into manager-owned context. The default is purpose-specific fixed text for model use; `--json` preserves the machine contract and exit codes. `new project --project-root` accepts only existing directories and performs setup-equivalent registration only if `.okstra/project.json` is absent. `list managers`, `list projects --manager-id <id>` and `list tasks --manager-id <id>` enumerate manager state; `view --manager-id <id>` writes `~/.okstra/managers/<id>/view/index.html` and prints its path and `file://` URL. `task split --plan <json>` writes one validated brief with a `## Project Scope` section into each project an issue is assigned to and registers those children; `task run` then passes `--task-brief`. `task run` re-reads the target child's state from its project and refuses a child that is already done there, naming its last phase and report, unless `--allow-completed` is given; `task status` prints `Synced at` and `Sync age` and marks children whose task manifest changed after that sync. For a child whose task type is `discussion`, `task sync` records a `discussion` block read from the discussion record without writing to it — state (`draft`, `completed`, or `unknown` when the record cannot be read), phase, pending questions, revisions with their change reasons, and each follow-up's pinned revision and impact-review state, re-read from the follow-up's brief — and `task status` counts the child under `discussion`, never under `done`. `task run` for a child without a registered brief takes the brief that `okstra discussion follow-up-brief` wrote for it, found in the last-synced links of a discussion child of the same manager task. `list task-groups` lists groups including empty ones; `task update` edits a task's objective, common brief or progress mode; `remove project`, `remove task`, `remove task-group` and `task remove-child` print their targets and delete manager files only with `--confirm`, and `remove project` keeps the project's children marked unlinked. |
|
|
873
876
|
| `okstra rollup [--task-group <group>] [--project-root <dir>] [--cwd <dir>] [--text\|--json]` | Read-only backend for the okstra-rollup skill. `--text` emits ordered fixed labels for model use. The default and `--json` preserve the full machine JSON contract and exit codes. Omitting `--task-group` targets the whole project catalog. |
|
|
874
877
|
| `okstra usage-report [--days <positive-int>] [--project-root <dir>] [--cwd <dir>] [--text\|--json]` | Read-only backend for the okstra-usage skill. `--text` emits ordered fixed labels for model use. The default and `--json` preserve the full machine JSON contract and exit codes. Defaults to the current project's last 30 days. |
|
|
875
878
|
| `okstra worker-state transition --team-state <path> --worker <id> --status <in-progress\|completed\|timeout\|error\|not-run> [--reason <text>] [--model <execution-value>]` | Atomically update one persisted worker row. `in-progress` records the authoritative `startedAt` and clears `endedAt`; terminal states record `endedAt`; `timeout`, `error`, and `not-run` require a reason. Dispatch adapters use this same transition path, so CLI-backed and in-process orchestration share the status timestamp contract |
|
|
@@ -889,8 +892,9 @@ The `okstra` Node CLI (`bin/okstra`) provides both installer/admin commands and
|
|
|
889
892
|
| `okstra stage-map <task-key> [--cwd <dir>\|--project <dir>]` | Dump the task's implementation-planning Stage Map as JSON: `{ ok, taskKey, taskRoot, state, sourcePlanPath, stages:[{stage_number,title,depends_on,step_count,cancelled}], doneStages:[int] }`. Each stage row carries `cancelled: true` when the plan marks that Stage Map row `status: cancelled`; such a stage is never selected, cannot be closed, and is left out of whole-task final verification and release handoff. `sourcePlanPath` is the task's latest implementation-planning report — the authority on which stages exist, so a plan amendment's added stages are selectable as soon as the amended plan lands. `state` is `ready` for a resolved source and `missing` when no Stage Map exists; a corrupt source returns a structured non-zero error instead of silently selecting another report. `doneStages` is read from the implementation-planning stage consumer state (with carry recovery). This is the read-side source `/okstra-schedule-gen [task-group]` uses to derive selectable unfinished stages and their completed dependency closure |
|
|
890
893
|
| `okstra stage-close <task-key> --stage <N> --from-commit <sha> [--supersede-failed <reason>] [--cwd <dir>\|--project <dir>]` | Record the `done` stage-consumer row an implementation run would have written, for a stage whose work is already committed but which never registered as done — the run ended before writing its carry sidecar, and `backfill_done_from_carry` recovers only from that file. Without it `stage-map` reports `doneStages: []` while the branch carries the commit, the next plan re-describes the stage, and every RED expectation it produces is unreachable. Refuses unless the Stage Map has that stage and does not mark it cancelled, no `done`/`failed` row exists for it, `--from-commit` resolves to a commit in the project repo, and the stage's conformance gate permits progress — the same `decide_conformance_gate` the run validator uses, so a stage closed here is not one the validator would have blocked. `--supersede-failed <reason>` closes a stage whose last row is `failed` under the same checks, for a failure that no longer applies (the checks ran in the wrong environment and the commit needs no product edit); the `done` row records `superseded_status`, the reason, the latest plan path and the conformance verdict. Closing also moves the `stage-<N>-exit` tag and releases the stage reservation, exactly as a normal stage completion does. Emits `{ ok, taskKey, taskRoot, stage, headCommit, conformance, consumersPath, supersededFailed, sourcePlanPath }` |
|
|
891
894
|
| `okstra stage-reopen <task-key> --stage <N> --reason <why> [--evidence <path>] [--cwd <dir>\|--project <dir>]` | Append a `failed` stage-consumer row after a stage's `done` row, so `/okstra-run` offers that stage again for a fix run and its dependents stop branching from the withdrawn head. Use it when a later verification found a defect in a done stage — a single-stage final-verification that ended `blocked` and points at `implementation` is the case the wizard otherwise refuses. The row records the reason, `reopened_by: stage-reopen`, the head it withdraws and, with `--evidence`, the project-relative report path. Refuses a stage that is not in the latest Stage Map, is cancelled, or whose last row is not `done`. Emits `{ ok, taskKey, stage, headCommit, reason, evidencePath, consumersPath }` |
|
|
892
|
-
| `okstra correction prompt --run-manifest <path> --round <N> --role <executor\|verifier> --base <sha> --
|
|
893
|
-
| `okstra
|
|
895
|
+
| `okstra correction prompt --run-manifest <path> --round <N> --role <executor\|verifier> --base <sha> [--stage-base <sha>] [--finding <F-id> ...]` | Print the instruction body for one correction-round prompt of an implementation run, built from the convergence record that preceded the round (the run's initial one for round 1, round N-1's `convergence-correction-r<N-1>-…` re-convergence for round N): the findings to fix, the stage HEAD before the round, and the executor's or verifiers' rules. `--stage-base` adds one `FILE-SIZE:<path>` finding per file that `<stage-base>..<base>` leaves over the 400-line limit (advisory 300-line lines are not added); a round needs at least one finding from either source. Pass it to `okstra agent-prompt materialize --dispatch-kind correction-r<N>`. At most 2 rounds; exit 1 on an unknown finding or round. |
|
|
896
|
+
| `okstra correction file-size --base <stage-base> [--head <rev>] [--repo <dir>]` | Check a stage diff against the file-size limit (400 lines, blocking) and target (300 lines, advisory). A threshold is broken by a file the diff adds over it, takes past it, or grows while already over it. Prints `FILE-SIZE:<path>:401 <before>-><after> lines (<kind>; limit 400)` per limit breach and `FILE-SIZE-ADVISORY:<path>:301 … (<kind>; target 300)` per file that breaks only the target, then `QA-RESULT: PASS\|FAIL`; only a limit breach fails. Lines are physical lines. Only `.py`, `.ts`, `.tsx`, `.js`, `.jsx`, `.mjs`, `.kt`, `.kts`, `.rs` and `.java` files are checked; `.okstra`, `node_modules`, `vendor`, `fixtures`, `__fixtures__`, `__snapshots__`, `generated` and `__generated__` directories, `*.min.*` files, and files whose first 5 lines say `@generated` or `do not edit` are exempt. Writes nothing. Exit 1 on FAIL, 2 when git cannot read the range. |
|
|
897
|
+
| `okstra stage-done <task-key> --stage <N> --carry <carry.json> --report <path> [--cwd <dir>\|--project <dir>]` | Settle an implementation stage whose verdict is not FAIL: write the executor's Stage Carry Evidence JSON to the flat `runs/implementation/carry/stage-<N>.json`, then append the `done` row with that carry path, the report path relative to its run directory, the carry head and the completion time. A reopened stage's previous sidecar moves to `carry/superseded/stage-<N>-from-<task-type>-<seq>.json`. Refuses a carry for another stage, a failed carry, a stage already done at another head, and a carry whose `stageCommitRange` diff breaks the 400-line file-size limit (`okstra correction file-size`; the refusal names the `--stage-base` for a correction round); a repeat with the same carry writes nothing new. Prints JSON with `fileSizeCap` (`pass: <range>` or `not checked: <reason>`); exit 1 on a refusal. |
|
|
894
898
|
| `okstra stage-fail <task-key> --stage <N> --head-commit <sha> --report <path> --reason <why> [--cwd <dir>\|--project <dir>]` | Append the `failed` stage-consumer row an implementation run writes when its verdict is FAIL or no verifier returned a result. Dependents stay blocked and the stage becomes selectable for a fix run. Refuses a stage missing from or cancelled in the latest Stage Map, or already `done` (use `stage-reopen`). Prints JSON; exit 1 on a refusal. |
|
|
895
899
|
| `okstra discussion <confirm-subject\|ask\|address\|answer\|decide> <task-key> … --run-manifest <path>` / `okstra discussion draft <task-key>` | The facilitator's only way to write a discussion task's record under `<task-root>/discussion/`: the confirmed subject and question, questions for the user (`ask`), the user's question to one worker (`address`), answers and user decisions. `--run-manifest` must be a discussion run manifest of the same task; authors are `leader` or a worker of that run, and only a question's addressee answers it. A resent record returns the stored one (`created: false`). Every write rebuilds `draft.json`; `draft` prints it as the fixed text every participant reads. Write commands emit `{ ok, created, record, pendingForUser, pendingForParticipants }`. `add-material --kind <evidence|alternative>` records new evidence or a new alternative, and `status` prints the phase, the next question for the user, unrecovered failures and remaining disagreements |
|
|
896
900
|
| `okstra discussion <cycle-open\|settle\|cycle-close> <task-key> --run-manifest <path>` / `okstra discussion recover <task-key> --failure <X-NNNN> --choice <retry\|replace\|reduce> --run-manifest <path>` / `okstra discussion <question-prompt\|collect-answer> <task-key> --question <Q-NNNN> --run-manifest <path>` | The research, refutation and question cycle of a discussion, one research cycle per run. `cycle-open` writes the research instruction from the record and records its input references (start inputs, subject, answers, materials), or returns why nothing is dispatched: `await-user`, `await-participant`, `await-recovery`, `present-options` (the references equal the last closed cycle's) or `prepare-run` (the next cycle needs a run prepared with `--discussion-start <task-key>`). `settle` records each analyser's `initial` result and each failure the dispatcher left after its retry loop (`start` when the batch could not launch, `after-retries` otherwise); `recover` records the user's choice for one failure. `cycle-close` validates the run's convergence final state and imports its findings as claims with their origin worker and verdicts. `question-prompt` writes one direct question's instruction and `agent-prompt materialize --batch` file (dispatch kind `discussion-question`), and `collect-answer` records the addressee's whole result as the answer |
|
|
@@ -215,6 +215,7 @@ The Module column below is where the command's behaviour lives — a `src/` modu
|
|
|
215
215
|
| `container` | `scripts/okstra_ctl/container.py` | Container lifecycle shim; `--text` is the command-specific model projection and machine mode remains JSON |
|
|
216
216
|
| `code-review` | `scripts/okstra_ctl/code_review_target.py` | `okstra code-review target` thin shim into `scripts/okstra_ctl/code_review_target.py` — resolves what one implementation stage's or one branch's review reads (worktree, branch, base/head commits) and where its result file goes, for the okstra-code-review skill. Read-only; creates no directory or file |
|
|
217
217
|
| `manager` | `scripts/okstra_ctl/manager_cli.py` | Cross-project manager; fixed text is the default and `--json` selects machine output |
|
|
218
|
+
| `mcp` | `scripts/okstra_ctl/mcp_cli.py` | `okstra mcp <add\|list\|remove\|check>` — validates and writes project MCP server declarations in `.okstra/project.json` `mcpServers` (name, description, tools, aliases), and reports per provider whether each declared server is `reachable`, `disabled`, `missing`, or `unknown`; `check` and prepare list each provider CLI's servers through `ProviderSpec.mcp_inventory` with no inference call |
|
|
218
219
|
|
|
219
220
|
`src/lib/python-helper.mts` centralizes Node → Python execution so nothing duplicates subprocess wiring.
|
|
220
221
|
|
|
@@ -321,6 +322,7 @@ Important modules:
|
|
|
321
322
|
| `usage_report.py` | Read-only okstra-usage backend — scans the whole current project's recent run timelines, defaults to 30 days, and returns task-type coverage, raw/billable tokens, known USD cost, CPU-sum and wall-clock milliseconds, unavailable reason counts, and unmatched pricing models |
|
|
322
323
|
| `json_registry.py` | shared flock + atomic JSON persistence for small okstra registries (`registry_lock`/`load_registry_json`/`save_registry_json`) — used by `worktree_registry` |
|
|
323
324
|
| `stage_integrate.py` | whole-task stage integration (merge) + worktree teardown core (`integrate_stages`) — shared by whole-task final-verification entry, `okstra integrate-stages`, and container up |
|
|
325
|
+
| `file_size_cap.py` | Stage-diff file-size thresholds for the correction round and `stage-done` (`okstra correction file-size` backend) — a 300-line target (advisory) and a 400-line limit (blocking), measured on the stage diff in physical lines for the source/test extensions okstra's coding preflight covers; vendored, fixture, snapshot, generated and `.okstra` paths, and files whose head declares itself generated, are exempt |
|
|
324
326
|
| `resolve_task_key.py` | shared skill helper resolving a bare task-id → `task-catalog.json` candidate entries (`okstra resolve-task-key`) |
|
|
325
327
|
| `code_review_paths.py` | filesystem-layout SSOT for code-review result files — `stage_review_dir` / `branch_review_dir` plus `next_stage_review` / `next_branch_review`, which read the existing files to derive the next round's name (`stage-<NN>.md`, then `-r2`, `-r3`, …) or the next same-day sequence (`<YYYY-MM-DD>-<NN>.md`), so skill markdown never re-derives a literal review path |
|
|
326
328
|
| `code_review_target.py` | `okstra code-review target` backend — argument validation and JSON shaping only. Stage mode delegates whole to `okstra_project.state.code_review_target_snapshot`; branch mode is resolved here, defaulting the diff base to the merge-base with the default branch (`refs/remotes/origin/HEAD`, else `main`/`master`). Read-only: it never creates the review directory |
|
|
@@ -336,6 +338,8 @@ Important modules:
|
|
|
336
338
|
| `manager_launch.py` | Child launch packet and manager child context renderer; records `prepared` launch metadata/events without changing project-local task state |
|
|
337
339
|
| `manager_view.py` | `okstra manager view` — renders one manager's projects, tasks, child summaries, directives and events into `view/index.html` from `templates/manager/view.template.html`; reads manager-owned files only |
|
|
338
340
|
| `manager_split.py` | `okstra manager task split` — validates a tracker split plan, renders one brief per (issue, project) with a `## Project Scope` section, checks each with `validators/validate-brief.py` before writing, and registers the children |
|
|
341
|
+
| `mcp_cli.py` | `okstra mcp add\|list\|remove\|check` argparse surface — writes `.okstra/project.json` `mcpServers` entries and renders per-provider reachability; fixed text by default, machine JSON with `--json` |
|
|
342
|
+
| `mcp_servers.py` | MCP server declaration SSOT — `parse_declaration`/`upsert_declaration` validate and upsert `mcpServers` entries without touching other `project.json` fields, and `probe_inventories` runs each provider adapter's `mcp_inventory` listing once in the project root (20 s limit, no inference call) and matches rows against declared names/aliases to classify each server `reachable`/`disabled`/`missing`/`unknown` per provider; a provider without the field, or whose command fails, is `unknown`, never `missing` |
|
|
339
343
|
| `agent/invocation.py` | Deep invocation-contract module — composes model assignment, common/functional duty, and task instructions; publishes immutable prompt/metadata pairs; verifies five digests; owns standalone result/completion envelopes |
|
|
340
344
|
| `agent/evidence_recovery.py` | Issues a same-model, same-role evidence-recovery invocation over a terminal-state attempt — verifies the source invocation metadata and existing result, then republishes a suffixed prompt/metadata/result triple (`-evidence-recovery-<attempt>`) that preserves the original model assignment while confining the child to preserving the earlier result's evidence rather than re-running the completed work (`prepare_evidence_recovery`, driven from `dispatch_core`) |
|
|
341
345
|
| `agent/prompt_cli/` | CLI boundary for run-backed and standalone materialization/verification plus host-native dispatch and result-link records. `inputs` resolves the path arguments this model-facing surface cannot trust and `emit` writes the result; above them `run_identity` refuses a role the run never issued and `dynamic_verifier` reserves a re-verification slot only after that role qualifies; `materialize` authors the specification (every report-writer prompt gets the okstra-rendered `## Output`; with `--corrections` it runs the ledger check in `corrections` and prepends `## Corrections`; without one it refuses a corrective dispatch over a parsing narrative), `results` links what came back, `batch` runs `materialize --batch` (each entry through the same parser and `materialize`, then the `jobs` generator for `--jobs-out`), and `cli` is the argparse surface with the command's canonical USAGE epilog (`check-corrections` runs the ledger check without materializing; `apply-corrections` writes a mechanical ledger to the narrative and records the `lead-correction-applied` activity row via `corrections.run_corrections_apply`) |
|
|
@@ -361,7 +365,7 @@ Important modules:
|
|
|
361
365
|
| `worker_prompt_headers.py` | shared rendering of phase-aware worker prompt anchors (`worker_prompt_headers`): coding-preflight only for implementation and compact target identity for final-verification |
|
|
362
366
|
| `worker_prompt_body.py` | provider-neutral initial analysis body/input renderer shared by Codex and external/team dispatch paths |
|
|
363
367
|
| `report_prose_keys.py` | `PROSE_KEYS` — final-report leaf keys whose values are reader-facing prose; `validators/validate-run.py` uses it to reject null literals (`None`, `null`) in prose cells |
|
|
364
|
-
| `report_language.py` | report-writer `**Report Language:**` resolution (`resolve_report_language`) — precedence project config → global config → `en`; the value is a language tag the report writer authors its prose in,
|
|
368
|
+
| `report_language.py` | report-writer `**Report Language:**` resolution (`resolve_report_language`) — precedence project config → global config → `en`; the value is a language tag the report writer authors its prose in, resolved once at prepare into the run manifest's `reportLanguage`, which both dispatch paths stamp into the prompt |
|
|
365
369
|
| `worker_prompt_policy.py` | `PromptPlan` generating SSOT — resolves functional audience, equality group, packet-only input, coding-preflight eligibility, required headers, and size limits without consulting provider/model identity |
|
|
366
370
|
| `worker_prompt_contract.py` | deterministic cross-task initial-prompt validator and normalized cross-worker equality SSOT, reused by dispatch adapters and the Phase 7 persisted-artifact validator |
|
|
367
371
|
| `initial_prompt_materialization.py` | sole owner of roster-derived initial prompt rendering, request compatibility checks, contract validation, and immutable create-if-absent publication; exposes `materialize_initial_prompts(InitialPromptMaterializationRequest) -> tuple[Path, ...]` |
|
package/package.json
CHANGED
package/runtime/BUILD.json
CHANGED
|
@@ -140,7 +140,7 @@ Do not end the turn after the validator result. Task-qualified report paths and
|
|
|
140
140
|
{{AVAILABLE_MCP_SERVERS}}
|
|
141
141
|
- The full usage policy and per-phase rules live in the analysis packet's `Available MCP Servers` extract. Inject only the one-line pointer below into each analysis-worker prompt: `**MCP servers:** follow the analysis packet's "Available MCP Servers" section. If the section is absent or says none, treat MCP as unavailable for this run; never infer tools from host configuration.`
|
|
142
142
|
- **Invocation rule (forward to every worker prompt)**: MCP tools are addressed through the executing worker provider's native tool interface — never by running the tool name as a shell command. In-process workers call the tool directly; CLI workers use that CLI's configured MCP transport. A worker without the configured MCP server records `MCP not available in this CLI` instead of guessing.
|
|
143
|
-
-
|
|
143
|
+
- Each server line ends with `Reachable from:` / `Not reachable:` per provider, measured at prepare by that provider adapter's MCP listing (`unknown` means the adapter could not list). Assign work that needs a server to a worker whose provider is reachable. A worker on any other provider records `MCP not available in this CLI` in its `Missing Information or Assumptions` block rather than guessing or shell-falling-back.
|
|
144
144
|
- MCP queries are evidence-grade. Cite server, table, and the SELECT used in worker output. MCP must NOT be used as a write path in any phase, including `implementation`.
|
|
145
145
|
|
|
146
146
|
## Host Orchestration Rules
|
|
@@ -140,10 +140,12 @@ After `seed`, the lead MUST NOT hand-edit queue IDs, classifications, `roundHist
|
|
|
140
140
|
|
|
141
141
|
#### Resume and legacy-state recovery (BLOCKING)
|
|
142
142
|
|
|
143
|
-
A valid historical final schema v1.0, v1.1, or v1.2 is reused unchanged under `reuse-final`; it remains read-only and is not upgraded in place. A malformed, unreadable, or partial legacy final is archived byte-for-byte under `state/migrations/` and restarted from Round 0 because its queue provenance cannot be reconstructed. A matching valid working state resumes. A malformed new-engine working state fails closed and names the explicit `--restart-from-round0` recovery flag; when supplied, every invalid existing state is archived before replacement. The final path can be replaced only when its recorded migration archive still matches the original bytes.
|
|
143
|
+
A valid historical final schema v1.0, v1.1, or v1.2 is reused unchanged under `reuse-final`; it remains read-only and is not upgraded in place. A malformed, unreadable, or partial legacy final is archived byte-for-byte under `state/migrations/` and restarted from Round 0 because its queue provenance cannot be reconstructed. A matching valid working state resumes. A malformed new-engine working state fails closed and names the explicit `--restart-from-round0` recovery flag; when supplied, every invalid existing state is archived before replacement. The flag recovers only an invalid working state: with a valid or absent one, `seed` refuses it instead of reusing or resuming. The final path can be replaced only when its recorded migration archive still matches the original bytes.
|
|
144
144
|
|
|
145
145
|
**Enforced:** `scripts/okstra_ctl/convergence_migration.py` `decide_seed_action` picks the seed action (`reuse-final`, archive-and-restart, resume, or fail-closed) from the on-disk state and the `--restart-from-round0` flag.
|
|
146
146
|
|
|
147
|
+
An implementation correction round re-converges in its own namespace, never by reseeding the initial paths: every state, plan, reverify prompt and invocation id carries `correction-r<N>` (`_implementation-deliverable.md` §"Correction round" step 4). **Enforced:** `seed` derives the namespace from the state path names and reads that round's verifier results for provenance (`convergence_provenance.discovery_attempts`); `plan-round` refuses to overwrite a round plan its namespace already dispatched.
|
|
148
|
+
|
|
147
149
|
#### Engine-owned Round 2 gate
|
|
148
150
|
|
|
149
151
|
`plan-round` applies gate precedence in one place: auto-disabled, all reverify non-result, effective maximum of one, empty queue, then maximum rounds reached. `finalize` maps that internal reason to the public `round2SkippedReason` and `finalState`. The lead and adapters never reproduce this predicate.
|
|
@@ -180,7 +180,7 @@ Every `okstra` command the lead documents cite, grouped by phase, each spelled w
|
|
|
180
180
|
|---|---|---|
|
|
181
181
|
| `okstra report-finalize --project-root <dir> --run-manifest <path> --report <path>` | Run the whole Phase 7 sequence; do not run its steps separately. Without `--only` it records `phase-7-persist` first; emit its `progressLines` | `report-writer` "Phase 6 → Phase 7 execution sequence" |
|
|
182
182
|
| `okstra handoff record-verified --plan-run-root <dir> --stage <N> --report-path <path> --data-json <path>` | Record an accepted final-verification against its stage. `report-finalize` runs it in its `record-verified` step; run it by hand only to repair a registry after that step failed | `report-writer` "Phase 6 → Phase 7 execution sequence" |
|
|
183
|
-
| `okstra correction prompt --run-manifest <path> --round <N> --role <executor\|verifier> --base <sha> --finding <F-id>` | Write a correction-round instruction body; materialize it with dispatch kind `correction-r<N
|
|
183
|
+
| `okstra correction prompt --run-manifest <path> --round <N> --role <executor\|verifier> --base <sha> --stage-base <sha> --finding <F-id>` | Write a correction-round instruction body; materialize it with dispatch kind `correction-r<N>`. `--stage-base` adds the stage's 400-line file-size findings | `_implementation-deliverable.md` "Correction round" |
|
|
184
184
|
| `okstra stage-done <task-key> --stage <N> --carry <carry.json> --report <path>` | Settle an implementation stage whose synthesised verdict is not FAIL: writes the flat `runs/implementation/carry/stage-<N>.json` sidecar and appends the `done` row — never write either by hand | `_implementation-deliverable.md` "Lead post-stage persistence" |
|
|
185
185
|
| `okstra stage-fail <task-key> --stage <N> --head-commit <sha> --report <path> --reason <why>` | Record an implementation stage whose synthesised verdict is FAIL, or that ended with no verifier result, as `failed` — never call `append_consumer` from python | `_implementation-deliverable.md` "Lead post-stage persistence" |
|
|
186
186
|
| `okstra team teardown --project-root <dir> --run-manifest <path>` | Close every recorded pane at the end of the run | cmux adapter "Semantic operation mapping" |
|
|
@@ -291,7 +291,7 @@ Required checkpoints:
|
|
|
291
291
|
- `PROGRESS: phase-1-intake complete` — after all intake reads return. Call `lead-progress append --phase phase-1-intake` again; the second call in a run renders this line.
|
|
292
292
|
- `PROGRESS: phase-2-prompts preparing <N> worker prompts` — at the start of Phase 2, before any `Write` to the assigned prompt paths.
|
|
293
293
|
- `PROGRESS: phase-3-team-create <adapter-specific-status>` — after selected-adapter setup is recorded in team-state. The stable phase id is retained for artifact compatibility. When the first dispatch writes the implicit-team marker, that dispatch command records the line.
|
|
294
|
-
- `PROGRESS: phase-4-dispatch worker=<role> model=<model>` — once per worker, immediately before `dispatch_worker`. `<role>` is the **roster** role, exactly as team-state's `workers[].role` records it (`Claude worker`, `Codex worker`) — the checkpoint is matched against that entry, so a phase-specific functional label (`Claude verifier`, `Codex executor`) names no roster worker and fails the check. Only `claude-worker`-style hyphenation of the same roster role is also accepted.
|
|
294
|
+
- `PROGRESS: phase-4-dispatch worker=<role> model=<model>` — once per worker, immediately before `dispatch_worker`. `<role>` is the **roster** role, exactly as team-state's `workers[].role` records it (`Claude worker`, `Codex worker`) — the checkpoint is matched against that entry, so a phase-specific functional label (`Claude verifier`, `Codex executor`) names no roster worker and fails the check. Only `claude-worker`-style hyphenation of the same roster role is also accepted. The critic roster row is not named here or in `phase-5-collect`: it is dispatched only as `critic` and reported by `phase-5.6-critic`.
|
|
295
295
|
- `PROGRESS: phase-5-poll pending=<n> done=<m>` — emitted when entering the wait and when the pending attempts or terminal outcomes change. A host wait returning without a worker state change does not create a new checkpoint.
|
|
296
296
|
- `PROGRESS: phase-5-collect worker=<role> status=<terminal-status>` — once per worker, immediately after the result file is verified. `<role>` is the roster role, same rule as `phase-4-dispatch` above. `team await` (cmux-pane run only) and `worker-dispatch` record it for the dispatches they settle.
|
|
297
297
|
- `PROGRESS: phase-5-stage stage=<N> title=<title> steps=<count>` — `implementation` only, immediately before the Executor's `phase-4-dispatch` line, after parsing the approved plan's Stage Map and this run's `**Stage for this implementation run:**` anchor. `<title>` is the stage's Stage Map title and `<count>` is its `stepwiseExecution` row count, both read from the approved plan — this is the line that tells the user WHICH plan stage this run executes. The numbering keeps the line sorted where the work happens — the stage runs in Phase 5.
|
|
@@ -594,10 +594,12 @@ If `Report writer worker` is in the selected roster (`recommendedWorkers` / `res
|
|
|
594
594
|
Before constructing the dispatch prompt, the lead MUST:
|
|
595
595
|
|
|
596
596
|
- Preserve the `**Report Language:**` value already materialized in the
|
|
597
|
-
report-writer dispatch prompt.
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
597
|
+
report-writer dispatch prompt. Both dispatch paths stamp it from the run
|
|
598
|
+
manifest's `reportLanguage`, resolved once at prepare time; report assembly
|
|
599
|
+
copies the same value into the final record. That value is authoritative
|
|
600
|
+
for report artifacts: a host, project or global instruction file
|
|
601
|
+
(`CLAUDE.md`, `AGENTS.md`) does not override it, so never instruct the
|
|
602
|
+
writer to use another language.
|
|
601
603
|
|
|
602
604
|
The convergence output provides four finding categories:
|
|
603
605
|
|
|
@@ -699,6 +701,8 @@ Treat `plannedPaths` as an expected change inventory, not an exhaustive authoriz
|
|
|
699
701
|
|
|
700
702
|
Preserve original results and attempt identities when correcting declaration formatting, missing rationale, or required artifacts. Continue the smallest affected repair within the approved objectives. Do not restart implementation or request renewed permission solely for a plan-path mismatch. If a required artifact is unusable, repair that artifact and keep only its dependent steps waiting. If the same repair produces no new evidence, report the unresolved requirement and resume point instead of repeating the whole implementation.
|
|
701
703
|
|
|
704
|
+
When an executor stops because an approved step places a real-IO test in the project source test tree (`_implementation-executor.md` "Real-IO test isolation"), the way forward is a new `implementation-planning` run. Never offer the user, as an option, an exception that commits that test to the source tree or makes a reachable backend a pass condition; real-backend checks run only as advisory Tier 3 conformance scripts under `<task_root>/qa/scripts/`, which are never committed (observed 2026-10-18, dev-11374).
|
|
705
|
+
|
|
702
706
|
Ask for user judgment only when the proposed work changes approved objectives or acceptance conditions, crosses an explicit authority boundary, or adds an unapproved external action. A warning does not waive read-only roles, protected paths, independent verification, or final acceptance checks. Never convert an old closed failed attempt into success by overwriting its audit; use a recorded recovery with independent evidence.
|
|
703
707
|
|
|
704
708
|
For a closed attempt whose only failure was a declaration discrepancy, preserve that attempt and its original result. Use the existing `agent-prompt materialize` and dispatch workflow to create a bounded evidence-recovery invocation in the same run, with a distinct result path and explicit references to the original invocation, result, and audit. Ask it to reconcile the declaration and required artifacts against current evidence, not repeat completed implementation. Then dispatch the selected independent verifiers against the current source and artifacts. Adopt the new verified result through normal result collection; retain the original failure as history. Do not use this route to bypass a real authority violation or unresolved code defect.
|
|
@@ -21,7 +21,7 @@ Allowed targets:
|
|
|
21
21
|
|
|
22
22
|
- if any cited verdict is `blocked`, a `conditional-accept` carrying a condition that blocks release, or any other token (including ambiguous phrasing like "looks good"), the run MUST end immediately with status `blocked` and a routing recommendation back to `error-analysis` or `implementation-planning`. Do NOT prompt the user; Do NOT run any git command.
|
|
23
23
|
|
|
24
|
-
- **Routing recommendation**: explicit `done` token, since release-handoff is the terminal lifecycle phase. If the run ended in `skip` or `cancel`, or delivered only some of the selected stages, the recommendation MUST state which stages still need a PR and that re-entry into release-handoff is appropriate.
|
|
24
|
+
- **Routing recommendation**: explicit `done` token, since release-handoff is the terminal lifecycle phase. If the run ended in `skip` or `cancel`, or delivered only some of the selected stages, the recommendation MUST state which stages still need a PR and that re-entry into release-handoff is appropriate. Such a run keeps the task open: `okstra_ctl.next_phase.project` projects an H1 `skip` or any `skipped` PR outcome row to a `ready` `release-handoff` pointer instead of `terminal`, whatever token the recommendation starts with.
|
|
25
25
|
|
|
26
26
|
1. **Entry-gate audit** — the report cites, for every stage it delivered, that stage's final-verification report path and the literal `Verdict Token` row with a release-ready value. If any is missing, or a `conditional-accept` stage's PR body omits its conditions, the run is invalid and MUST be re-routed to `final-verification`.
|
|
27
27
|
|
|
@@ -80,7 +80,7 @@ The Phase 7 run validator enforces the same cross-task rule against the persiste
|
|
|
80
80
|
|
|
81
81
|
When a worker reads any project-relative path from the prompt, it MUST resolve it against `Project Root` (e.g. `<Project Root>/<Result Path>`) — never use bare relative paths that depend on cwd.
|
|
82
82
|
|
|
83
|
-
Inject only the packet-scoped one-line pointer into every analysis worker's prompt: `**MCP servers:** follow the analysis packet's "Available MCP Servers" section. If the section is absent or says none, treat MCP as unavailable for this run; never infer tools from host configuration.`
|
|
83
|
+
Inject only the packet-scoped one-line pointer into every analysis worker's prompt: `**MCP servers:** follow the analysis packet's "Available MCP Servers" section. If the section is absent or says none, treat MCP as unavailable for this run; never infer tools from host configuration.` Every provider CLI's MCP availability is governed by its own configuration; the packet's server lines say which providers listed each server at prepare. A worker records `MCP not available in this CLI` when its CLI does not expose a server the packet names.
|
|
84
84
|
|
|
85
85
|
Persist the exact worker prompt before dispatch per Operating Rule 6; never use `/tmp/*prompt*.txt` as the canonical artifact path.
|
|
86
86
|
|
|
@@ -23,6 +23,7 @@ from okstra_ctl.domain.wizard.interaction import (
|
|
|
23
23
|
AnswerProtocol,
|
|
24
24
|
InteractionPlan,
|
|
25
25
|
WizardPrompt,
|
|
26
|
+
labels_decode_uniquely,
|
|
26
27
|
)
|
|
27
28
|
from okstra_ctl.ports import (
|
|
28
29
|
HostModelBindingPort,
|
|
@@ -139,7 +140,7 @@ class CapabilityInteractionPort:
|
|
|
139
140
|
):
|
|
140
141
|
return InteractionPlan(
|
|
141
142
|
"native-multi",
|
|
142
|
-
AnswerProtocol("
|
|
143
|
+
AnswerProtocol("selected-labels", multi=True),
|
|
143
144
|
)
|
|
144
145
|
if (
|
|
145
146
|
not prompt.multi
|
|
@@ -169,7 +170,7 @@ class CapabilityInteractionPort:
|
|
|
169
170
|
return (
|
|
170
171
|
self._limits.option_count_fits(len(labels))
|
|
171
172
|
and len(set(labels)) == len(labels)
|
|
172
|
-
and (not prompt.multi or
|
|
173
|
+
and (not prompt.multi or labels_decode_uniquely(labels))
|
|
173
174
|
)
|
|
174
175
|
|
|
175
176
|
def _native_group_fits(
|
|
@@ -69,7 +69,7 @@ Read this contract when `okstra preflight` returns this file as `runtimeReadines
|
|
|
69
69
|
"envelope": "answers",
|
|
70
70
|
"key": "rendered-question-text",
|
|
71
71
|
"selection": "selected-labels-joined-comma-space",
|
|
72
|
-
"submit": "
|
|
72
|
+
"submit": "raw"
|
|
73
73
|
}
|
|
74
74
|
},
|
|
75
75
|
"native-group": {
|
|
@@ -86,7 +86,7 @@ Read this contract when `okstra preflight` returns this file as `runtimeReadines
|
|
|
86
86
|
"envelope": "answers",
|
|
87
87
|
"key": "rendered-question-text",
|
|
88
88
|
"selection": "selected-label-or-labels-joined-comma-space",
|
|
89
|
-
"multiValue": "
|
|
89
|
+
"multiValue": "raw",
|
|
90
90
|
"submit": "compact-step-json-values"
|
|
91
91
|
}
|
|
92
92
|
},
|
|
@@ -144,7 +144,7 @@ Read this contract when `okstra preflight` returns this file as `runtimeReadines
|
|
|
144
144
|
```
|
|
145
145
|
`recovery` names what to do when a function this relay declares does not work in the live client. `native-question-refused` fires the first time a declared native question function is refused or errors at call time, whatever the reason (the client cannot present the card, the session has no view, the call returns no answer). Do not call it again and do not hunt for another native function: drop every token in `dropSemanticFunctions` from the intersection you computed in Step 1, keep `plain_text_input`, and render every remaining screen through the text mapping (`numbered-single` / `numbered-multi` / `sequential-group`), which preserves every option. Numbered text is the recovery path, so the ban on printing a numbered list does not apply once this fires. The wizard state file is untouched by a refused call — the pending prompt is still the current step, and `okstra wizard step --state-file <path> --no-submit` returns it again. Tell the user in one line that the host picker is unavailable and the run continues as numbered lists, then continue the wizard. Never abandon the run or ask the user to retype an identifier because the picker is gone.
|
|
146
146
|
|
|
147
|
-
For `AskUserQuestion`, map each wizard option to the tool's `{label, description}` input without removing, shortening, or reordering entries. Look up each answer by the exact rendered `question` string sent to the tool, including the progress suffix; the `answers` keys are question text, not positions or headers. A single-select answer is the selected label. A multi-select answer is one string whose selected labels are joined with `, `.
|
|
147
|
+
For `AskUserQuestion`, map each wizard option to the tool's `{label, description}` input without removing, shortening, or reordering entries. Look up each answer by the exact rendered `question` string sent to the tool, including the progress suffix; the `answers` keys are question text, not positions or headers. A single-select answer is the selected label. A multi-select answer is one string whose selected labels are joined with `, `. Submit that string unchanged: labels may themselves contain `, `, so do not split it or map it to values — the wizard decodes it against the complete option list and rejects only a selection it cannot split one way. Native plans are emitted only when the prompt fits `nativeLimits` (unique option labels, two to four options, one to four questions); other prompts use the text mapping so no option is dropped. For a group, key the compact JSON object by the corresponding `questions[].step`; a single-select question stores its matching option value, and a multi-select question stores the host's joined label string unchanged as one string, not a JSON array. Never use the display header as an answer key. The `Q1`…`Q4` headers only satisfy the host tool's short-header input and carry no domain meaning.
|
|
148
148
|
|
|
149
149
|
For a `host-text` mapping, render each numbered item as its option label followed by its description verbatim; preserve every item and its order. The next user message is the raw answer. Do not translate numbers, CSV members, labels, or values before `okstra wizard step`. A sequential group wraps each raw reply in one compact JSON object keyed by `questions[].step`; the wizard owns normalization.
|
|
150
150
|
|
|
@@ -64,8 +64,10 @@ do not rely on inherited cwd, and never use `cd` to move the session.
|
|
|
64
64
|
The run's available MCP servers and tools are listed in the analysis packet's
|
|
65
65
|
`Available MCP Servers` section. When that section is absent or says none, treat
|
|
66
66
|
MCP as unavailable for this run and never infer tools from host configuration.
|
|
67
|
-
Call a listed tool directly by name (`mcp__<server>__<tool
|
|
68
|
-
|
|
67
|
+
Call a listed tool directly by name (`mcp__<server>__<tool>`, where `<server>`
|
|
68
|
+
is the name the server line reports for claude, with spaces and dots as `_`);
|
|
69
|
+
do not shell out via `claude --mcp-cli call ...` and do not run a tool name as a
|
|
70
|
+
Bash command.
|
|
69
71
|
When a server you need is not listed, record `MCP not available for this run` in
|
|
70
72
|
your output rather than guessing a tool name.
|
|
71
73
|
|
|
@@ -69,7 +69,7 @@ Read this contract when `okstra preflight` returns this file as `runtimeReadines
|
|
|
69
69
|
"envelope": "answers",
|
|
70
70
|
"key": "rendered-question-text",
|
|
71
71
|
"selection": "selected-labels-joined-comma-space",
|
|
72
|
-
"submit": "
|
|
72
|
+
"submit": "raw"
|
|
73
73
|
}
|
|
74
74
|
},
|
|
75
75
|
"native-group": {
|
|
@@ -85,7 +85,7 @@ Read this contract when `okstra preflight` returns this file as `runtimeReadines
|
|
|
85
85
|
"envelope": "answers",
|
|
86
86
|
"key": "rendered-question-text",
|
|
87
87
|
"selection": "selected-label-or-labels-joined-comma-space",
|
|
88
|
-
"multiValue": "
|
|
88
|
+
"multiValue": "raw",
|
|
89
89
|
"submit": "compact-step-json-values"
|
|
90
90
|
}
|
|
91
91
|
},
|
|
@@ -143,7 +143,7 @@ Read this contract when `okstra preflight` returns this file as `runtimeReadines
|
|
|
143
143
|
```
|
|
144
144
|
`recovery` names what to do when a function this relay declares does not work in the live client. `native-question-refused` fires the first time a declared native question function is refused or errors at call time, whatever the reason (the client cannot present the card, the session has no view, the call returns no answer). Do not call it again and do not hunt for another native function: drop every token in `dropSemanticFunctions` from the intersection you computed in Step 1, keep `plain_text_input`, and render every remaining screen through the text mapping (`numbered-single` / `numbered-multi` / `sequential-group`), which preserves every option. Numbered text is the recovery path, so the ban on printing a numbered list does not apply once this fires. The wizard state file is untouched by a refused call — the pending prompt is still the current step, and `okstra wizard step --state-file <path> --no-submit` returns it again. Tell the user in one line that the host picker is unavailable and the run continues as numbered lists, then continue the wizard. Never abandon the run or ask the user to retype an identifier because the picker is gone.
|
|
145
145
|
|
|
146
|
-
For `ask_user_question`, map each wizard option to the tool's `{label, description}` input without removing, shortening, or reordering entries. Do not send `preview`. Look up each answer by the exact rendered `question` string sent to the tool, including the progress suffix. A single-select answer is the selected label. A multi-select answer is one string whose selected labels are joined with `, `.
|
|
146
|
+
For `ask_user_question`, map each wizard option to the tool's `{label, description}` input without removing, shortening, or reordering entries. Do not send `preview`. Look up each answer by the exact rendered `question` string sent to the tool, including the progress suffix. A single-select answer is the selected label. A multi-select answer is one string whose selected labels are joined with `, `. Submit that string unchanged: labels may themselves contain `, `, so do not split it or map it to values — the wizard decodes it against the complete option list and rejects only a selection it cannot split one way. Native plans are emitted only when the prompt fits `nativeLimits` (unique option labels, two to fifteen options, one to eight questions); other prompts use the text mapping so no option is dropped. The host adds a free-text row on every question. Do not drop a wizard option to make room for it. If the user types in that row and the text matches no option label, submit the typed text unchanged. For a group, key the compact JSON object by the corresponding `questions[].step`; a single-select question stores its matching option value, and a multi-select question stores the host's joined label string unchanged as one string, not a JSON array.
|
|
147
147
|
|
|
148
148
|
For a `host-text` mapping, render each numbered item as its option label followed by its description verbatim; preserve every item and its order. The next user message is the raw answer. Do not translate numbers, CSV members, labels, or values before `okstra wizard step`. A sequential group wraps each raw reply in one compact JSON object keyed by `questions[].step`; the wizard owns normalization.
|
|
149
149
|
|