114 lines
4.7 KiB
Markdown
114 lines
4.7 KiB
Markdown
# Case: `council-start-with-target-file-through-bundled-cli`
|
|
|
|
## Test Type
|
|
|
|
This is a `forward-test` and a non-prompt target-context validation.
|
|
|
|
The goal is to verify that a leader using the packaged `council-review` skill can start a council run from explicit `--target-file` context instead of relying on a pure inline prompt.
|
|
|
|
## Purpose
|
|
|
|
Validate that all of the following can be true at the same time:
|
|
|
|
- the test runner can prepare a concrete brief file before launching the leader
|
|
- the leader can start a council run through the bundled council-review skill using `--target-file`
|
|
- the target-file path is persisted in council input metadata
|
|
- reviewer tasks are still dispatched normally from the file-based target
|
|
|
|
## Preconditions
|
|
|
|
- council-review skill path exists: `COUNCIL_SKILL_PATH=skills/council-review`
|
|
- inbox skill path exists: `INBOX_SKILL_PATH=skills/inbox`
|
|
- bundled CLI executables exist at `COUNCIL_SKILL_PATH/assets/orch` and `INBOX_SKILL_PATH/assets/inbox`
|
|
- `sqlite3` is available locally for metadata validation
|
|
- use an empty temporary directory `TMPDIR`
|
|
- initialize `TMPDIR/coord.db` before launching the leader through `INBOX_SKILL_PATH/assets/inbox --db TMPDIR/coord.db --json init`
|
|
|
|
## Agent Topology
|
|
|
|
- `leader`
|
|
|
|
## Inputs
|
|
|
|
### Target File Fixture
|
|
|
|
Create `TMPDIR/brief.md` before launching the leader with contents similar to:
|
|
|
|
```md
|
|
# Brief
|
|
|
|
Review the current council-review packaging flow.
|
|
|
|
- Confirm the skill can carry file-based context.
|
|
- Focus on documentation quality and report semantics.
|
|
```
|
|
|
|
### Leader Prompt
|
|
|
|
```text
|
|
Use $council-review at COUNCIL_SKILL_PATH to act as leader on the already initialized SQLite DB TMPDIR/coord.db. Only coordinate through the bundled orch CLI from the skill. Workflow: 1) start council run council_skill_009 using --target-file TMPDIR/brief.md, --target-type mixed, and --mode review, 2) stop after reporting RUN_ID and the target metadata you observed from the start response. Do not use ordinary chat to simulate reviewer work.
|
|
```
|
|
|
|
## Execution Parameters
|
|
|
|
- use the shared execution contract from [README.md](./README.md)
|
|
- use the shared timeout defaults from [README.md](./README.md)
|
|
- do not override the default cleanup policy
|
|
|
|
## Execution Steps
|
|
|
|
1. Initialize `TMPDIR/coord.db` once through the bundled inbox CLI before launching agents
|
|
2. Create `TMPDIR/brief.md` with the target file contents
|
|
3. Inject `skills/council-review/` into `leader`
|
|
4. Point the leader at the database path `TMPDIR/coord.db`
|
|
5. Launch the leader
|
|
6. Wait for the leader to finish
|
|
7. Independently run the validation commands from the main thread
|
|
|
|
## Validation Commands
|
|
|
|
```bash
|
|
COUNCIL_SKILL_PATH/assets/orch --db TMPDIR/coord.db --json run show --run council_skill_009
|
|
COUNCIL_SKILL_PATH/assets/orch --db TMPDIR/coord.db --json status --run council_skill_009
|
|
sqlite3 TMPDIR/coord.db "SELECT prompt, target_file, repo_path, target_task_id FROM council_inputs WHERE run_id = 'council_skill_009';"
|
|
sqlite3 TMPDIR/coord.db "SELECT acceptance_json FROM tasks WHERE run_id = 'council_skill_009' AND task_id = 'CR1';"
|
|
```
|
|
|
|
## Expected Outcomes
|
|
|
|
- the leader successfully starts `council_skill_009`
|
|
- the run goal references the target file rather than an inline prompt
|
|
- the stored council input row keeps `target_file == TMPDIR/brief.md`
|
|
- reviewer task dispatch still produces the usual three council tasks
|
|
- reviewer task acceptance metadata carries the `target_file` reference forward
|
|
|
|
## Assertions
|
|
|
|
- `run_show.data.run.goal` mentions `brief.md`
|
|
- `status.data.tasks` length is `3`
|
|
- `status.data.run.status` is not terminal
|
|
- the `council_inputs` row has empty `prompt`, `repo_path`, and `target_task_id`
|
|
- the `council_inputs` row has `target_file == "TMPDIR/brief.md"`
|
|
- the `CR1` acceptance JSON contains `"target_file":"TMPDIR/brief.md"`
|
|
|
|
## Cleanup
|
|
|
|
- use the default cleanup policy from [README.md](./README.md)
|
|
- if the run fails, retain `TMPDIR`, `brief.md`, and `coord.db` for replay and manual inspection
|
|
|
|
## Recorded Real Forward Run
|
|
|
|
- recorded on: `2026-03-19`
|
|
- execution mode: `real_subagent_forward_test`
|
|
- result: `pass`
|
|
- evidence root: `/tmp/council-skill-target-file.ikPOLP`
|
|
- observed run id: `council_skill_009`
|
|
- observed thread ids:
|
|
- `CR1`: `thr_32df58f9b55945b899257f583708b7ef`
|
|
- `CR2`: `thr_c5f8c552cb1240649546df8386be3668`
|
|
- `CR3`: `thr_172eabff13eb48ed9af2deee928a9438`
|
|
- evidence summary:
|
|
- main-thread `status --run council_skill_009 --json` returned three `dispatched` council tasks and a non-terminal run
|
|
- main-thread `sqlite3` validation showed `council_inputs.target_file == "/tmp/council-skill-target-file.ikPOLP/brief.md"` with empty `prompt`, `repo_path`, and `target_task_id`
|
|
- main-thread `sqlite3` validation of `CR1` acceptance JSON showed the same `target_file` persisted into the council task payload
|