auto nightly sync
This commit is contained in:
328
1Project/goaline/docs/execution-orchestrator-plan.md
Normal file
328
1Project/goaline/docs/execution-orchestrator-plan.md
Normal file
@@ -0,0 +1,328 @@
|
||||
# Goaline Execution Orchestrator Plan
|
||||
|
||||
## Goal
|
||||
|
||||
Introduce a Goaline-native execution orchestrator that replaces `/goal` only for the execution loop, while preserving the existing document-first intake and archive flow.
|
||||
|
||||
The target operating model is:
|
||||
|
||||
1. `phase-doc-intake` handles exploratory conversation and mainline phase docs.
|
||||
2. `goal-plan-intake` turns a target phase or repair request into a concise executable plan.
|
||||
3. A new execution orchestrator consumes the frozen plan and runs `exec -> review -> verify -> retry` loops until completion or stop.
|
||||
4. `plan-archive-promote` archives the completed plan and promotes only stable conclusions back into the mainline docs.
|
||||
|
||||
## Non-Goals
|
||||
|
||||
- Do not replace the interactive planning and grill-me style convergence used before a plan is frozen.
|
||||
- Do not force the phase-doc or plan intake stages into a rigid scripted workflow.
|
||||
- Do not treat review-only subjective approval as sufficient completion evidence.
|
||||
|
||||
## Why This Split
|
||||
|
||||
The current Goaline skills already form a clean document lifecycle:
|
||||
|
||||
- `phase-doc-intake`: converges scope and writes human-readable mainline docs.
|
||||
- `goal-plan-intake`: writes a short execution plan intended for `/goal`.
|
||||
- `plan-archive-promote`: closes the loop after execution.
|
||||
|
||||
What is missing is a dedicated execution controller between plan creation and archival. That controller should not own discovery. It should only own execution-state transitions, verification, and retry routing.
|
||||
|
||||
## Proposed Architecture
|
||||
|
||||
### Layer 1: Interactive Planning
|
||||
|
||||
Owned by the existing intake skills and a general-purpose coding agent.
|
||||
|
||||
Responsibilities:
|
||||
|
||||
- ask questions
|
||||
- grill for ambiguity
|
||||
- converge on scope
|
||||
- write/update `docs/README.md`
|
||||
- write/update ordered phase docs
|
||||
- derive a concise executable plan under `docs/plans/`
|
||||
|
||||
This layer remains conversational and human-driven.
|
||||
|
||||
### Layer 2: Contract Freeze
|
||||
|
||||
Before execution starts, freeze a small execution contract derived from the plan. This can live in the plan file itself or in a sibling artifact.
|
||||
|
||||
The frozen execution contract should contain at least:
|
||||
|
||||
- Goal
|
||||
- Scope / non-goals
|
||||
- Constraints
|
||||
- Guardrails
|
||||
- Done signals
|
||||
- Verification expectations
|
||||
- Stop conditions
|
||||
|
||||
This is the boundary between exploratory planning and deterministic execution.
|
||||
|
||||
### Layer 3: Execution Orchestrator
|
||||
|
||||
Introduce a new Goaline execution workflow that replaces `/goal` in the middle of the lifecycle.
|
||||
|
||||
Core responsibilities:
|
||||
|
||||
- read the frozen execution plan/contract
|
||||
- dispatch `exec`
|
||||
- dispatch `review`
|
||||
- run an external verification gate
|
||||
- decide whether to return to `exec`, return to `review`, escalate back to planning, or complete
|
||||
- produce an archive-ready completion summary
|
||||
|
||||
This layer is a workflow controller, not a discovery agent.
|
||||
|
||||
### Layer 4: Archive and Promote
|
||||
|
||||
After successful completion, pass the plan into `plan-archive-promote`.
|
||||
|
||||
Responsibilities:
|
||||
|
||||
- append archive summary
|
||||
- archive the executed plan
|
||||
- promote stable conclusions only
|
||||
- update mainline docs without mixing in temporary execution noise
|
||||
|
||||
## Execution State Machine
|
||||
|
||||
Recommended loop:
|
||||
|
||||
`plan freeze -> exec -> review -> verify gate -> retry or archive`
|
||||
|
||||
Detailed state flow:
|
||||
|
||||
1. `Plan Ready`
|
||||
- intake is complete
|
||||
- plan exists on disk
|
||||
- execution contract is frozen
|
||||
|
||||
2. `Exec`
|
||||
- implement the smallest next closed loop
|
||||
- write required verification artifacts
|
||||
- do not claim completion by chat text alone
|
||||
|
||||
3. `Review`
|
||||
- inspect implementation
|
||||
- inspect whether tests actually prove the intended behavior
|
||||
- reject weak or misaligned acceptance tests
|
||||
|
||||
4. `Verify Gate`
|
||||
- run mechanical verification outside the agent's self-report
|
||||
- decide pass/fail from executable evidence
|
||||
|
||||
5. `Retry Routing`
|
||||
- implementation defect -> back to `exec`
|
||||
- weak or invalid acceptance test -> back to `review` or `exec`
|
||||
- requirement ambiguity discovered late -> back to planning
|
||||
|
||||
6. `Archive Ready`
|
||||
- only reachable after verify gate success
|
||||
- hand off to archive/promote flow
|
||||
|
||||
## Verify Gate Requirements
|
||||
|
||||
The verify gate must be external to agent self-report. The agent may propose tests and commands, but completion is decided by the runner.
|
||||
|
||||
Minimum checks:
|
||||
|
||||
1. Required artifacts exist and are valid.
|
||||
2. Acceptance tests pass on the changed tree.
|
||||
3. Acceptance tests fail on the base tree when applicable.
|
||||
4. Regression checks show no new failures.
|
||||
5. Missing or insufficient proof fails closed.
|
||||
|
||||
## Base Isolation Rules
|
||||
|
||||
The base tree must be isolated well enough that red-proof execution cannot silently run against the modified tree.
|
||||
|
||||
Required controls:
|
||||
|
||||
### 1. Code Tree Isolation
|
||||
|
||||
- capture `base_commit` at execution start
|
||||
- create a separate tree using `git worktree add <tmpdir> <base_commit>`
|
||||
- run red-proof verification only inside that base worktree
|
||||
|
||||
`base_commit` is the before-change comparison point, usually the target branch `HEAD` at the start of execution.
|
||||
|
||||
### 2. Command Path Isolation
|
||||
|
||||
- reject or rewrite hardcoded absolute paths that point back to the modified working tree
|
||||
- do not allow verification commands to escape back into the changed tree
|
||||
- require repo-relative execution commands where possible
|
||||
|
||||
### 3. Test Overlay Isolation
|
||||
|
||||
- copy only declared `test_paths` into the base worktree
|
||||
- never copy changed implementation files into the base worktree during red proof
|
||||
- reject absolute paths, parent escapes, and repo-external test paths
|
||||
|
||||
### 4. Runtime Import Isolation
|
||||
|
||||
- allow environment/dependency reuse only when code import still resolves to the current tree under verification
|
||||
- do not rely on editable installs that import the changed code regardless of current worktree
|
||||
- prefer repo-relative imports and explicit root execution
|
||||
|
||||
### 5. Build/Cache Isolation
|
||||
|
||||
- avoid reusing stale build output or caches that can mask failures
|
||||
- clear or isolate targeted caches when necessary
|
||||
|
||||
### 6. Environment Isolation
|
||||
|
||||
- do not blindly forward all environment variables into verification
|
||||
- strip or rewrite environment variables that point back to the modified tree
|
||||
- prefer a constrained environment whitelist
|
||||
|
||||
## Verification Artifact Contract
|
||||
|
||||
A minimal verification artifact should be required from execution before the gate runs.
|
||||
|
||||
Suggested shape:
|
||||
|
||||
```json
|
||||
{
|
||||
"testable": true,
|
||||
"acceptance_tests": [
|
||||
{
|
||||
"name": "short label",
|
||||
"command": "repo-relative command",
|
||||
"test_paths": ["path/to/test_file"]
|
||||
}
|
||||
],
|
||||
"regression_command": "optional regression command",
|
||||
"assumptions": [],
|
||||
"not_testable_reason": ""
|
||||
}
|
||||
```
|
||||
|
||||
Rules:
|
||||
|
||||
- no artifact means verification cannot start
|
||||
- invalid JSON means failure
|
||||
- empty acceptance set means failure when `testable=true`
|
||||
- missing `test_paths` means the red state is not provable
|
||||
|
||||
## Test Validity Strategy
|
||||
|
||||
Like TDD, test validity cannot be proven absolutely. The orchestrator should instead combine mechanical proof with semantic review.
|
||||
|
||||
### Mechanical Validity Checks
|
||||
|
||||
The runner should enforce:
|
||||
|
||||
- the acceptance command executes
|
||||
- it passes on the changed tree
|
||||
- it fails on the base tree for the same target behavior
|
||||
- regression checks do not add failures
|
||||
- missing proof fails closed
|
||||
|
||||
### Semantic Validity Review
|
||||
|
||||
The review step should explicitly ask:
|
||||
|
||||
- Does this test assert the intended behavior, or only an implementation detail?
|
||||
- Does the red failure happen for the right reason?
|
||||
- Was the test weakened to make the change look successful?
|
||||
- Does the test have meaningful distinguishing power between before and after?
|
||||
- Is the test stable, deterministic, and not dependent on irrelevant machine state?
|
||||
|
||||
### Anti-Fake-Pass Guardrails
|
||||
|
||||
Reject or escalate when any of these patterns appear:
|
||||
|
||||
- acceptance test trivially passes before the fix
|
||||
- test fails only because the environment is broken
|
||||
- command depends on the modified tree via absolute path
|
||||
- assertions are weakened away from the intended behavior
|
||||
- the test proves only a mocked path that bypasses the real defect
|
||||
- time, network, random, or GUI instability dominates the signal without being part of the requirement
|
||||
|
||||
## Retry / Feedback Model
|
||||
|
||||
Verification failure should be converted into structured feedback and routed back into the appropriate stage.
|
||||
|
||||
### Feedback Inputs
|
||||
|
||||
Each failure summary should include:
|
||||
|
||||
- failure type
|
||||
- failing command
|
||||
- exit code when available
|
||||
- bounded output tail
|
||||
- explicit instruction not to weaken or delete the acceptance test unless the issue is test invalidity
|
||||
|
||||
### Retry Routing Rules
|
||||
|
||||
- implementation incorrect -> return to `exec`
|
||||
- acceptance test invalid or weak -> return to `review`, then likely to `exec`
|
||||
- ambiguous requirement discovered during review or verification -> return to planning
|
||||
- repeated identical failure signature -> stop instead of thrashing
|
||||
|
||||
## Integration with Existing Goaline Skills
|
||||
|
||||
### `phase-doc-intake`
|
||||
|
||||
Keep unchanged as the conversational entrypoint for project or phase shaping.
|
||||
|
||||
### `goal-plan-intake`
|
||||
|
||||
Update its wording and expectations so the produced plan is consumable by the new Goaline execution orchestrator, not specifically tied to `/goal`.
|
||||
|
||||
### New Orchestrator Skill or Script
|
||||
|
||||
Add a new middle component, for example:
|
||||
|
||||
- `goal-exec-orchestrator`
|
||||
- `plan-exec-orchestrator`
|
||||
- `goal-runner`
|
||||
|
||||
This component should own the `exec -> review -> verify -> retry` lifecycle.
|
||||
|
||||
### `plan-archive-promote`
|
||||
|
||||
Keep as the final archival and promotion stage after verify gate success.
|
||||
|
||||
## Recommended Deliverables
|
||||
|
||||
1. ✅ `skills/goaline-exec-orchestrator/SKILL.md` — New Goaline execution orchestrator skill with exec/review/verify/retry loop.
|
||||
2. ✅ `goal-plan-intake` updated — Frozen execution contract shape defined in plan output.
|
||||
3. ✅ Verification artifact schema — Defined in orchestrator SKILL.md (JSON contract with acceptance_tests, test_paths, etc.).
|
||||
4. ✅ Verify-gate implementation spec with base isolation rules — Documented in orchestrator SKILL.md (6 isolation domains, fail-closed rules).
|
||||
5. ✅ Retry-routing rules — Routing table for exec/review/planning fallback with stop-on-thrash.
|
||||
6. ✅ Archive handoff fields — Execution summary shape defined in orchestrator SKILL.md.
|
||||
|
||||
## Implementation Status
|
||||
|
||||
- All deliverables are complete.
|
||||
- Existing skill files updated: `goal-plan-intake/SKILL.md`, `plan-archive-promote/SKILL.md`.
|
||||
- Root docs updated: `README.md`, `.codex-plugin/plugin.json`.
|
||||
- No changes to `phase-doc-intake/SKILL.md` needed — it remains the conversational entrypoint unchanged.
|
||||
|
||||
## Stop Conditions
|
||||
|
||||
Stop the execution loop and report instead of retrying indefinitely when:
|
||||
|
||||
- the same failure signature repeats with no progress
|
||||
- proof cannot be established due to environment breakage
|
||||
- the task turns out not to be automatically testable under current constraints
|
||||
- the requirement is still materially ambiguous after execution begins
|
||||
|
||||
## Suggested Next Steps
|
||||
|
||||
1. ✅ Retarget `goal-plan-intake` documentation from "consumed by `/goal`" to "consumed by Goaline execution orchestrator".
|
||||
2. ✅ Define the frozen execution contract format.
|
||||
3. ✅ Define the verification artifact schema and fail-closed rules.
|
||||
4. ✅ Add a new Goaline orchestration skill or script for `exec -> review -> verify -> retry`.
|
||||
5. ✅ Define the archive handoff shape consumed by `plan-archive-promote`.
|
||||
|
||||
## Closed Items
|
||||
|
||||
All items from the plan are now complete. The new lifecycle is:
|
||||
|
||||
```
|
||||
phase-doc-intake -> goal-plan-intake -> goaline-exec-orchestrator -> plan-archive-promote
|
||||
```
|
||||
@@ -1,16 +0,0 @@
|
||||
## 要做的内容
|
||||
- 启动/管理子进程
|
||||
- 解析 --json 输出
|
||||
- 保存 codexSessionId
|
||||
- 做 SSE 给网页
|
||||
- 做一层本地 session 映射
|
||||
- 处理超时、取消、错误展示
|
||||
- 结构 ``` type ChatSession = {
|
||||
codexSessionId: string // codex 的真实 session id
|
||||
cwd: string
|
||||
createdAt: string
|
||||
updatedAt: string```
|
||||
|
||||
## 具体业务
|
||||
- 碎片->立项
|
||||
- 待阅读->立项
|
||||
Reference in New Issue
Block a user