@open-agent-toolkit/cli 0.2.58 → 0.2.59
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/assets/bundle-metadata.json +1 -1
- package/assets/docs/cli-utilities/configuration.md +16 -0
- package/assets/docs/cli-utilities/workflow-gates.md +88 -3
- package/assets/docs/contributing/skills.md +27 -5
- package/assets/docs/provider-sync/commands.md +23 -0
- package/assets/docs/workflows/projects/autonomy.md +5 -2
- package/assets/docs/workflows/projects/dispatch-ceiling.md +43 -7
- package/assets/docs/workflows/projects/implementation-execution.md +5 -2
- package/assets/docs/workflows/projects/lifecycle.md +4 -3
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-project-autonomous/SKILL.md +1 -1
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +45 -38
- package/assets/skills/oat-project-design/SKILL.md +10 -5
- package/assets/skills/oat-project-discover/SKILL.md +10 -5
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +45 -38
- package/assets/skills/oat-project-implement/SKILL.md +1 -1
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +43 -9
- package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +14 -8
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +45 -38
- package/assets/skills/oat-project-import-plan/SKILL.md +29 -4
- package/assets/skills/oat-project-next/SKILL.md +29 -2
- package/assets/skills/oat-project-plan/SKILL.md +29 -4
- package/assets/skills/oat-project-plan-writing/SKILL.md +95 -1
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +45 -38
- package/assets/skills/oat-project-progress/SKILL.md +12 -1
- package/assets/skills/oat-project-quick-start/SKILL.md +29 -4
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +45 -38
- package/assets/skills/oat-project-review-provide/SKILL.md +13 -6
- package/assets/skills/oat-project-review-provide-remote/SKILL.md +12 -5
- package/assets/templates/state.md +4 -1
- package/dist/commands/gate/index.d.ts.map +1 -1
- package/dist/commands/gate/index.js +102 -8
- package/dist/commands/init/index.d.ts.map +1 -1
- package/dist/commands/init/index.js +16 -1
- package/dist/commands/project/dispatch-ceiling/index.d.ts.map +1 -1
- package/dist/commands/project/dispatch-ceiling/index.js +10 -1
- package/dist/commands/remove/skill/remove-skill.d.ts.map +1 -1
- package/dist/commands/remove/skill/remove-skill.js +10 -1
- package/dist/commands/shared/frontmatter.d.ts +32 -1
- package/dist/commands/shared/frontmatter.d.ts.map +1 -1
- package/dist/commands/shared/frontmatter.js +92 -0
- package/dist/commands/status/index.d.ts.map +1 -1
- package/dist/commands/status/index.js +8 -1
- package/dist/commands/sync/apply.d.ts.map +1 -1
- package/dist/commands/sync/apply.js +40 -6
- package/dist/commands/sync/index.d.ts.map +1 -1
- package/dist/commands/sync/index.js +11 -17
- package/dist/commands/sync/sync.types.d.ts +6 -6
- package/dist/commands/sync/sync.types.d.ts.map +1 -1
- package/dist/config/resolve.d.ts +16 -0
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +16 -8
- package/dist/engine/execute-plan.d.ts.map +1 -1
- package/dist/engine/execute-plan.js +6 -0
- package/dist/manifest/index.d.ts +2 -1
- package/dist/manifest/index.d.ts.map +1 -1
- package/dist/manifest/index.js +1 -1
- package/dist/manifest/manager.d.ts +40 -0
- package/dist/manifest/manager.d.ts.map +1 -1
- package/dist/manifest/manager.js +35 -0
- package/package.json +2 -2
|
@@ -367,6 +367,22 @@ Repo-local and user config can also hold workflow defaults, including
|
|
|
367
367
|
example, one user may prefer `claude -p` as a gate target while another prefers
|
|
368
368
|
`codex exec`.
|
|
369
369
|
|
|
370
|
+
### Per-project gate posture
|
|
371
|
+
|
|
372
|
+
Project state is a separate surface from the five config layers. One project can
|
|
373
|
+
disable a configured lifecycle gate for itself through
|
|
374
|
+
`oat_skill_gate_overrides` in that project's `state.md`, keyed by gate-aware
|
|
375
|
+
skill name with the single permitted value `disabled`.
|
|
376
|
+
|
|
377
|
+
Config layers decide whether a gate exists; the project override then decides
|
|
378
|
+
whether an existing gate runs for that project. An override never creates
|
|
379
|
+
configuration, never mutates any config layer, and is never written by a
|
|
380
|
+
non-interactive run. Resolve it with
|
|
381
|
+
`oat gate resolve <skill> --project <path-or-name> --json`; without `--project`
|
|
382
|
+
the command keeps its original raw output. See
|
|
383
|
+
[Workflow gates](./workflow-gates.md) for the full resolution envelope and the
|
|
384
|
+
phase-review and autonomous exclusions.
|
|
385
|
+
|
|
370
386
|
In practice, you usually inspect these via:
|
|
371
387
|
|
|
372
388
|
```bash
|
|
@@ -68,6 +68,83 @@ in skill frontmatter with `oat_gateable: true`, and
|
|
|
68
68
|
`oat internal validate-oat-skills` warns when config targets a missing or
|
|
69
69
|
non-gateable skill.
|
|
70
70
|
|
|
71
|
+
### Per-project gate overrides
|
|
72
|
+
|
|
73
|
+
Gate configuration is shared, but one project can opt out of a configured
|
|
74
|
+
lifecycle gate without changing any config layer. The override lives only in
|
|
75
|
+
that project's `state.md`:
|
|
76
|
+
|
|
77
|
+
```yaml
|
|
78
|
+
oat_skill_gate_overrides:
|
|
79
|
+
oat-project-implement: disabled
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
The map is strict. Keys are gate-aware skill names and the only permitted value
|
|
83
|
+
is the literal `disabled`. Arrays, booleans, `enabled`, unknown values,
|
|
84
|
+
duplicate keys, and malformed maps are rejected with the offending project state
|
|
85
|
+
path. An absent map means follow configuration; keeping every gate leaves the
|
|
86
|
+
map absent.
|
|
87
|
+
|
|
88
|
+
Override keys are accepted only for skills that declare `oat_gateable: true`.
|
|
89
|
+
A configured gate may still be resolved and executed for a lifecycle skill that
|
|
90
|
+
is not gate-aware — `oat-project-discover` and `oat-project-design` are the
|
|
91
|
+
current examples — but because no override key for such a skill is accepted,
|
|
92
|
+
their configured gates apply to every project and cannot be disabled per
|
|
93
|
+
project.
|
|
94
|
+
|
|
95
|
+
Precedence is layered, not merged: config layers decide whether a gate exists
|
|
96
|
+
at all, and the project override then decides whether an existing gate runs for
|
|
97
|
+
that project. An override never creates configuration, so a project may record
|
|
98
|
+
an override for a skill that has no configured gate; the gate stays absent.
|
|
99
|
+
Overrides never mutate shared, local, or user config, and config changes never
|
|
100
|
+
rewrite a project's override.
|
|
101
|
+
|
|
102
|
+
Interactive project setup offers a keep-or-disable choice per configured gate,
|
|
103
|
+
one skill at a time; there is no single switch that disables every gate.
|
|
104
|
+
Non-interactive runs never prompt and never write a new map, and an explicit
|
|
105
|
+
existing map is preserved unchanged on resume and import.
|
|
106
|
+
|
|
107
|
+
Resolution is opt-in. Without `--project`, `oat gate resolve` keeps returning
|
|
108
|
+
the raw `GateConfig | null` that existing consumers parse:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
oat gate resolve oat-project-implement --json
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
With project context it returns a discriminated envelope instead:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
oat gate resolve oat-project-implement --project "$PROJECT_PATH" --json
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
The envelope's `resolution` is one of three values:
|
|
121
|
+
|
|
122
|
+
| `resolution` | Meaning | `configuredGate` | `effectiveGate` |
|
|
123
|
+
| -------------------------------- | ----------------------------------------- | ---------------- | --------------- |
|
|
124
|
+
| `configured` | A configured gate runs for this project. | the gate | the gate |
|
|
125
|
+
| `configured_disabled_by_project` | Configured, but this project disabled it. | the gate | `null` |
|
|
126
|
+
| `not_configured` | No gate is configured for this skill. | `null` | `null` |
|
|
127
|
+
|
|
128
|
+
`configured_disabled_by_project` retains `configuredGate` so evidence of a
|
|
129
|
+
deliberate opt-out can never be mistaken for absent configuration. It also
|
|
130
|
+
carries `configSource` and a `projectOverride` record naming the
|
|
131
|
+
`state.md:oat_skill_gate_overrides` source.
|
|
132
|
+
|
|
133
|
+
`configSource` reports the layer that owned the decision. For
|
|
134
|
+
`not_configured` it is the layer that explicitly declared the skill `null`, and
|
|
135
|
+
`null` only when no layer mentions the skill at all, so a deliberate
|
|
136
|
+
layer-level disable stays distinguishable from an absent declaration.
|
|
137
|
+
`configuredGate` is `null` in both cases, so neither reads as configured.
|
|
138
|
+
|
|
139
|
+
Disabled is a posture, not an outcome. A project-disabled gate launches no
|
|
140
|
+
process and never enters the passed, missing, or failed branches. Project
|
|
141
|
+
progress reports every active override by skill key so the deliberate posture
|
|
142
|
+
stays visible to reviewers.
|
|
143
|
+
|
|
144
|
+
This mechanism covers configured lifecycle skill gates only. It does not affect
|
|
145
|
+
the optional `oat_phase_review_gate`, HiLL policy, or autonomous design-gate
|
|
146
|
+
behavior, and it cannot disable every gate with one project-wide boolean.
|
|
147
|
+
|
|
71
148
|
### Implementation exit-gate closeout
|
|
72
149
|
|
|
73
150
|
For `oat-project-implement`, the configured skill gate is a final, resumable
|
|
@@ -82,14 +159,22 @@ configured command. The state records:
|
|
|
82
159
|
|
|
83
160
|
- `pending`, `allowed`, `blocked`, or `stale` status;
|
|
84
161
|
- a `configured` or `no_gate` resolution;
|
|
85
|
-
- `passed`, `warned`, `prompt_approved`, or `no_gate`
|
|
162
|
+
- `passed`, `warned`, `prompt_approved`, `project_disabled`, or `no_gate`
|
|
163
|
+
allowed dispositions;
|
|
86
164
|
- the resolved configuration fingerprint, reviewed HEAD, implementation
|
|
87
165
|
fingerprint, gate run, envelope, and receive provenance; and
|
|
88
166
|
- launch and receive reconciliation data needed to resume without duplicating
|
|
89
167
|
an accepted run or completed receive.
|
|
90
168
|
|
|
91
|
-
|
|
92
|
-
`allowed/no_gate` with `disposition: no_gate`.
|
|
169
|
+
Only a `not_configured` resolution is explicit success for that closeout
|
|
170
|
+
generation: `allowed/no_gate` with `disposition: no_gate`. A null, missing,
|
|
171
|
+
malformed, or unrecognized resolver result fails closed as unresolved and is
|
|
172
|
+
never treated as no gate. A gate this project disabled
|
|
173
|
+
persists `allowed/configured` with `disposition: project_disabled`, the
|
|
174
|
+
configured command retained as never-executed evidence, null launch and receive
|
|
175
|
+
provenance, and a `project_override` record. `config_fingerprint` covers the
|
|
176
|
+
resolved override state, so re-enabling the gate changes the fingerprint and a
|
|
177
|
+
stored `project_disabled` result is routed as stale instead of reused. Configured success becomes
|
|
93
178
|
`allowed/passed`; `warn` and an explicit `prompt` continuation persist their
|
|
94
179
|
own allowed dispositions only for a validated, receive-eligible `blocked`
|
|
95
180
|
envelope after eligible receive completes durably. Unresolved, malformed,
|
|
@@ -277,15 +277,37 @@ Use `create-agnostic-skill` or `create-oat-skill` as the starting point; both in
|
|
|
277
277
|
|
|
278
278
|
## Gate-aware skills
|
|
279
279
|
|
|
280
|
-
A skill that supports configured final gates
|
|
280
|
+
A skill that supports configured final gates should declare `oat_gateable: true`
|
|
281
281
|
in frontmatter and include a final Gate Execution step in its process contract.
|
|
282
|
-
Without both pieces, a configured `workflow.gates.skills.<skill>` entry
|
|
283
|
-
|
|
282
|
+
Without both pieces, a configured `workflow.gates.skills.<skill>` entry raises a
|
|
283
|
+
`Configured gate targets skill without oat_gateable: true` validation warning.
|
|
284
|
+
|
|
285
|
+
The warning does not make the gate inert. `oat_gateable` governs per-project
|
|
286
|
+
override eligibility, not executability: `oat gate resolve` runs the same
|
|
287
|
+
lookup for every skill name, so a configured gate on a non-gate-aware skill
|
|
288
|
+
still resolves as `configured` and still executes if that skill carries a Gate
|
|
289
|
+
Execution step. `oat-project-discover` and `oat-project-design` are the current
|
|
290
|
+
examples. Because no `oat_skill_gate_overrides` key is accepted for a skill
|
|
291
|
+
outside `oat_gateable`, their configured gates apply to every project and can
|
|
292
|
+
never resolve `configured_disabled_by_project`. Prefer declaring
|
|
293
|
+
`oat_gateable: true` for any skill whose gate should be disableable per project.
|
|
284
294
|
|
|
285
295
|
The Gate Execution step should:
|
|
286
296
|
|
|
287
|
-
1. Run `oat gate resolve <this-skill> --json
|
|
288
|
-
|
|
297
|
+
1. Run `oat gate resolve <this-skill> --project "$PROJECT_PATH" --json`
|
|
298
|
+
(`$PROJECT_PATH` is the resolved project path exported in step 3).
|
|
299
|
+
Project context is required. Without `--project` the command returns the
|
|
300
|
+
legacy raw gate and can never report a project override, so the skill would
|
|
301
|
+
silently run a gate the project deliberately disabled.
|
|
302
|
+
2. Handle all three `resolution` values explicitly:
|
|
303
|
+
- `configured` - run `effectiveGate` exactly as configured.
|
|
304
|
+
- `configured_disabled_by_project` - the project disabled this configured gate. Do not launch any process; emit `configured but disabled by project override`, including the project path and the `projectOverride` source, and finish the skill. The returned `configuredGate` is evidence only and is never executed.
|
|
305
|
+
- `not_configured` - no gate is configured; finish the skill.
|
|
306
|
+
|
|
307
|
+
A null, missing, malformed, or unrecognized result is an operational failure
|
|
308
|
+
that fails closed as unresolved. Never treat it as "no gate configured." See
|
|
309
|
+
[Per-project gate overrides](../cli-utilities/workflow-gates.md#per-project-gate-overrides).
|
|
310
|
+
|
|
289
311
|
3. Export the resolved path with `export PROJECT_PATH` before launching the
|
|
290
312
|
command shell.
|
|
291
313
|
4. For `oat gate review`, require the configured command to use
|
|
@@ -88,6 +88,29 @@ Key behavior:
|
|
|
88
88
|
`versionSkew` array (`{ scope, producingVersion, invokingVersion }`) in both
|
|
89
89
|
`--dry-run` and apply envelopes; a scope without skew is omitted from the
|
|
90
90
|
array.
|
|
91
|
+
- When a run's only effect is that restamp — no planned operations and no
|
|
92
|
+
failures, but skew present — apply reports
|
|
93
|
+
`Manifest version refreshed; no content changes required.` instead of
|
|
94
|
+
`No changes required.`, so a manifest write is never described as a no-op.
|
|
95
|
+
|
|
96
|
+
`oat sync` is not the only command that replaces a manifest's producer version.
|
|
97
|
+
`oat init`, `oat remove skill`, and `oat status` each capture the manifest's
|
|
98
|
+
pre-mutation `oatVersion` while loading and planning, compare it with the
|
|
99
|
+
invoking CLI version, and log the same advisory immediately before a qualifying
|
|
100
|
+
save when the two differ:
|
|
101
|
+
|
|
102
|
+
```text
|
|
103
|
+
Manifest version restamp [init user]: manifest produced by oat "0.2.58" will be restamped to oat "0.2.59".
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
The advisory sits immediately before the save, so a run that aborts earlier
|
|
107
|
+
never announces a restamp it did not perform; a save that fails after the
|
|
108
|
+
advisory still leaves the manifest unrestamped. An equal or absent version stays
|
|
109
|
+
quiet. JSON mode suppresses the human warning; `oat init` and `oat remove skill`
|
|
110
|
+
report the applied restamps under a top-level `manifestVersionRestamps` array of
|
|
111
|
+
`{ scope, producingVersion, invokingVersion }` entries. The `oat remove skill`
|
|
112
|
+
dry-run payload omits the field rather than naming a restamp no save will
|
|
113
|
+
perform.
|
|
91
114
|
|
|
92
115
|
Preview project and user cleanup before applying it:
|
|
93
116
|
|
|
@@ -136,8 +136,11 @@ At final closeout, autonomy follows the same authoritative order as an
|
|
|
136
136
|
interactive run: final verification, mandatory final lifecycle review,
|
|
137
137
|
configured implementation exit gate, pre-approval sequence, final HiLL
|
|
138
138
|
approval, post-approval sequence, then implementation completion and success
|
|
139
|
-
output. A
|
|
140
|
-
the sequence starts
|
|
139
|
+
output. A `not_configured` resolution persists an explicit no-gate allowance
|
|
140
|
+
before the sequence starts; a null, missing, or unrecognized resolver result
|
|
141
|
+
fails closed as unresolved. A gate this project disabled persists an
|
|
142
|
+
`allowed/configured` result with `disposition: project_disabled` and never
|
|
143
|
+
launches the configured command.
|
|
141
144
|
|
|
142
145
|
Autonomy does not turn an ordinary independent review into configured-gate
|
|
143
146
|
provenance. A configured review must produce a gate-originated artifact with
|
|
@@ -438,7 +438,8 @@ write authority. See
|
|
|
438
438
|
## Dispatch Report V1 and Producer Provenance
|
|
439
439
|
|
|
440
440
|
Resolver calls that pass `--report-scope` and `--report-action` include a
|
|
441
|
-
`dispatchReport` object in JSON output
|
|
441
|
+
`dispatchReport` object in JSON output, plus the additive `dispatchStamp`
|
|
442
|
+
string described below. Consumers must require
|
|
442
443
|
`dispatchReport.schemaVersion: 1` before dispatch. The report keeps these
|
|
443
444
|
concerns separate:
|
|
444
445
|
|
|
@@ -485,18 +486,53 @@ also retain a parseable compatibility stamp for later review gates:
|
|
|
485
486
|
Dispatch: scope=p06-t03 action=implementation role=implementer producer=gpt-5.6-sol provenance=declared model_axis=selected:gpt-5.6-sol effort_axis=selected:high dispatch_policy=high dispatch_ceiling=high target=oat-phase-implementer-gpt-5-6-sol-high
|
|
486
487
|
```
|
|
487
488
|
|
|
488
|
-
|
|
489
|
-
`
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
`declared`, `observed`, `inferred`, or `unknown`. Selected model and effort axes
|
|
493
|
-
can remain exact even when runtime producer identity is not reported.
|
|
489
|
+
`producer` is the runtime model slug when OAT can establish it; otherwise it is
|
|
490
|
+
`unknown`. `provenance` is `declared`, `observed`, `inferred`, or `unknown`.
|
|
491
|
+
Selected model and effort axes can remain exact even when runtime producer
|
|
492
|
+
identity is not reported.
|
|
494
493
|
|
|
495
494
|
Before launching an implementation, fix, or reviewer, surface the structured
|
|
496
495
|
notices in `dispatchReport.notices` and render the report. Structured notices
|
|
497
496
|
and runtime disclosure use the effective target returned by that resolver call,
|
|
498
497
|
never a target inferred from the bundled recommendation version.
|
|
499
498
|
|
|
499
|
+
### The additive `dispatchStamp` field
|
|
500
|
+
|
|
501
|
+
JSON responses that carry `dispatchReport` also carry `dispatchStamp`, a single
|
|
502
|
+
canonical string produced by the same formatter that owns the grammar above:
|
|
503
|
+
|
|
504
|
+
```json
|
|
505
|
+
{
|
|
506
|
+
"status": "resolved",
|
|
507
|
+
"dispatchReport": { "schemaVersion": 1 },
|
|
508
|
+
"dispatchStamp": "Dispatch: scope=p06-t03 action=implementation role=implementer ..."
|
|
509
|
+
}
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
Field eligibility matches report eligibility exactly. The field is present when
|
|
513
|
+
and only when `dispatchReport` is present, so non-report resolver calls and
|
|
514
|
+
error envelopes never carry it. `DispatchReportV1`, its schema version, and the
|
|
515
|
+
stamp grammar are unchanged; the field is purely additive.
|
|
516
|
+
|
|
517
|
+
Eligibility tracks report presence, not dispatch authorization or exit code. A
|
|
518
|
+
`status: blocked` response that was asked for report context therefore carries
|
|
519
|
+
both `dispatchReport` and `dispatchStamp` while still exiting `1`: the stamp
|
|
520
|
+
records what OAT resolved, and a blocked resolution is a resolved fact about an
|
|
521
|
+
unusable route rather than a missing report. Only a call without report context,
|
|
522
|
+
or an error envelope that never built a report, omits the field.
|
|
523
|
+
|
|
524
|
+
Consumers read `dispatchStamp` directly, validate that it is a non-empty string
|
|
525
|
+
beginning with the canonical `Dispatch:` prefix, and copy it byte-for-byte into
|
|
526
|
+
dispatch and audit metadata. Reformatting the report through
|
|
527
|
+
`toDispatchStampRecord(dispatchReport)` and `formatDispatchStamp` is an optional
|
|
528
|
+
corroboration where that library is already loaded; it is never the normal path,
|
|
529
|
+
and no out-of-tree shim is required. Callers must not reconstruct the stamp from
|
|
530
|
+
policy labels, role names, candidate strings, or target names.
|
|
531
|
+
|
|
532
|
+
A stamp carrying `producer=unknown provenance=unknown` is truthful, not
|
|
533
|
+
degraded: the resolver reports configured invocation, and those fields stay
|
|
534
|
+
`unknown` until an independent runtime observation exists.
|
|
535
|
+
|
|
500
536
|
## Legacy Compatibility
|
|
501
537
|
|
|
502
538
|
The following remain readable during migration:
|
|
@@ -250,8 +250,11 @@ for another.
|
|
|
250
250
|
|
|
251
251
|
Resolution and policy outcomes are explicit:
|
|
252
252
|
|
|
253
|
-
- A
|
|
254
|
-
basis
|
|
253
|
+
- A `not_configured` resolution persists `allowed/no_gate` for the current
|
|
254
|
+
implementation basis; a null, missing, or unrecognized resolver result fails
|
|
255
|
+
closed as unresolved instead.
|
|
256
|
+
- A gate the project disabled persists `allowed/configured` with
|
|
257
|
+
`disposition: project_disabled` and never launches.
|
|
255
258
|
- A configured passing review persists `allowed/passed` after any eligible
|
|
256
259
|
review receive is durably completed.
|
|
257
260
|
- `warn` persists `allowed/warned`; `prompt` proceeds only after explicit
|
|
@@ -56,9 +56,10 @@ Implementation closeout has one authoritative order:
|
|
|
56
56
|
|
|
57
57
|
The configured exit gate is independent from the mandatory lifecycle review,
|
|
58
58
|
root-owned phase reviews, and optional `oat_phase_review_gate`. It must reach an
|
|
59
|
-
allowed and fresh disposition before pre-approval work starts. A
|
|
60
|
-
|
|
61
|
-
from missing state
|
|
59
|
+
allowed and fresh disposition before pre-approval work starts. A
|
|
60
|
+
`not_configured` resolution is recorded explicitly as `allowed/no_gate`; it is
|
|
61
|
+
not inferred from missing state, and a null, missing, or unrecognized resolver
|
|
62
|
+
result fails closed as unresolved instead.
|
|
62
63
|
|
|
63
64
|
After implementation closeout finishes:
|
|
64
65
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-autonomous
|
|
3
|
-
version: 1.0.
|
|
3
|
+
version: 1.0.11
|
|
4
4
|
description: Use when a user explicitly asks to run an OAT project autonomously end-to-end. Activates session-only autonomy, resumes the correct lifecycle phase, and drives the existing OAT skills through final PR or a reported boundary.
|
|
5
5
|
argument-hint: '<goal | project-slug | ticket-ref>'
|
|
6
6
|
disable-model-invocation: true
|