fix(execute): run the brief check in Phase 1, and say what effort really changes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
2b5d5f72bc
commit
2fe6feb74d
6 changed files with 134 additions and 61 deletions
|
|
@ -48,6 +48,22 @@ Parse `$ARGUMENTS` for mode flags:
|
|||
use that path but keep `project_dir` set (user may be pointing at a
|
||||
recovery session spec inside the project).
|
||||
- Continue parsing remaining flags (they combine with `--project`).
|
||||
- Brief check, once every flag below is parsed: when `{dir}/brief.md`
|
||||
exists, run the two lines `/trekplan` runs on it (its Phase 1), for the
|
||||
execute phase; append `--profile {profile}` when the operator passed
|
||||
`--profile`:
|
||||
```bash
|
||||
node ${CLAUDE_PLUGIN_ROOT}/lib/validators/brief-validator.mjs --soft --json "{dir}/brief.md"
|
||||
node ${CLAUDE_PLUGIN_ROOT}/lib/profiles/resolver.mjs --resolve-phase-model --phase execute --brief-path "{dir}/brief.md" [--profile {profile}] --json
|
||||
```
|
||||
The validator exits 1 when its `errors` are not empty; read its JSON
|
||||
either way. Halt only when the validator's `errors` hold
|
||||
`BRIEF_V51_MISSING_SIGNALS`, with the message from "Sequencing gate
|
||||
surface" below. Any other error is printed in one line and the run
|
||||
continues. A validator or resolver that cannot run (no JSON) is "not
|
||||
measured" in one line, and the run continues. Capture the resolver's
|
||||
JSON as `phase_signal_result` (Composition rule below). No
|
||||
`{dir}/brief.md`: skip both lines.
|
||||
2. If arguments contain `--fg`: extract the file path. Set **mode = foreground**.
|
||||
3. If arguments contain `--resume`: extract the file path. Set **mode = resume**.
|
||||
4. If arguments contain `--dry-run`: extract the file path. Set **mode = dry-run**.
|
||||
|
|
@ -449,6 +465,7 @@ Determine how to execute this plan:
|
|||
- `--step N` mode
|
||||
- `--resume` mode
|
||||
- `--session N` mode (runs only that session's steps, foreground)
|
||||
- `phase_signal_result.effort == 'low'` → one session, steps in order — never while a wave is in flight (`WAVE_IN_FLIGHT`)
|
||||
- Plan has no `## Execution Strategy` section
|
||||
- Plan has Execution Strategy with only 1 session
|
||||
|
||||
|
|
@ -2986,7 +3003,7 @@ model_for_phase = brief.phase_signals[<phase>]?.model ?? profile.phase_models[
|
|||
|
||||
The brief signal wins per-phase when present; the profile fills any
|
||||
gaps. Both fields are mechanically resolved by the single composed CLI,
|
||||
invoked in Phase 2.4 alongside the sequencing-gate brief-validator call:
|
||||
invoked in Phase 1 alongside the sequencing-gate brief-validator call:
|
||||
|
||||
```bash
|
||||
# v5.9 — composed phase-model resolution (brief > profile > default) for the
|
||||
|
|
@ -2998,21 +3015,18 @@ node ${CLAUDE_PLUGIN_ROOT}/lib/profiles/resolver.mjs --resolve-phase-model --pha
|
|||
```
|
||||
|
||||
`phase_signal_result.effort` (absent = `standard`) is consumed when picking the execution
|
||||
strategy (gates auto-escalation, parallel-wave choice — see High-effort
|
||||
behavior below). The resolver does NOT control the orchestrator's own
|
||||
strategy (the parallel-wave choice, Phase 2.5). The resolver does NOT control the orchestrator's own
|
||||
model — that is fixed at invocation time (command frontmatter omits
|
||||
`model:`, so it follows the session model) and cannot be switched mid-turn.
|
||||
`/trekexecute` spawns no swarm: one step helper at a time and one controller
|
||||
(Hard Rule 10), and both run `opus` — the step agent's pin and the
|
||||
controller's `model: "opus"` — so `phase_signal_result.model` still has no
|
||||
spawn site here; it is returned for cross-command uniformity and stats.
|
||||
spawn site here; it is returned for cross-command uniformity; no stats record carries it.
|
||||
|
||||
For `/trekexecute` specifically: `effort == 'low'` activates `--gates open`
|
||||
+ sequential-only execution (no worktree-isolated parallel waves — runs
|
||||
all sessions in a single foreground loop). `effort == 'standard'` (or
|
||||
absent) → no change (default execution strategy applies). `effort == 'high'`
|
||||
activates the high-effort behavior documented under `### High-effort
|
||||
behavior (v5.1.1)` below.
|
||||
For `/trekexecute` specifically: `effort == 'low'` runs the plan as one
|
||||
session, step after step (Phase 2.5). `effort == 'standard'` (or absent) →
|
||||
no change (default execution strategy applies). `effort == 'high'`: see
|
||||
`### High-effort behavior (v5.1.1)` below.
|
||||
|
||||
### Sequencing gate surface
|
||||
|
||||
|
|
@ -3026,32 +3040,9 @@ commands surface, don't re-enforce.
|
|||
|
||||
### High-effort behavior (v5.1.1)
|
||||
|
||||
When `phase_signal_result.effort == 'high'` for the `execute` phase,
|
||||
set `gates_mode = 'closed'` automatically (equivalent to passing
|
||||
`--gates closed` on the command line). All autonomy boundaries become
|
||||
operator-stopping points: manifest-audit FAIL halts immediately, the
|
||||
main-merge gate stays a lock whose one question is the guard's (Phase 8), and Phase 7.5
|
||||
manifest-audit runs in its strictest form (fails on ANY mismatch, not
|
||||
just deltas above threshold). Operator explicit `--gates` flag still
|
||||
wins over the brief signal — if the operator passes `--gates open` on
|
||||
the command line while `phase_signal_result.effort == 'high'`, the
|
||||
flag takes precedence and the override is logged:
|
||||
|
||||
```bash
|
||||
node ${CLAUDE_PLUGIN_ROOT}/lib/stats/event-emit.mjs \
|
||||
--event gates_mode_flag_override --payload '{"flag":"--gates","signal_effort":"high"}'
|
||||
```
|
||||
|
||||
The record lands in `trekexecute-stats.jsonl` in the plugin data directory as
|
||||
`{ts, event, known_event, payload:{flag, signal_effort}}`. The two payload keys
|
||||
stay in the jsonl; the OTel export allowlist drops them by omission. On
|
||||
`"written": false` (exit 1), print its `reason` in one line and continue — the
|
||||
override record never blocks the run.
|
||||
|
||||
Standard effort (or absent): use `gates_mode = 'adaptive'` (the
|
||||
default). Low effort: `gates_mode = 'open'` plus sequential-only
|
||||
execution (no parallel waves) — existing `--quick`-equivalent
|
||||
code-path.
|
||||
High effort changes nothing in `/trekexecute`: the step helper and the
|
||||
controller already run opus, and every gate already runs. No `gates_mode` is
|
||||
set from the effort.
|
||||
|
||||
## Hard rules
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue