Files
cc-ci/machine-docs/REVIEW-aoeng.md
autonomic-bot dfe0ffac65
Some checks failed
continuous-integration/drone/push Build is failing
review(aoeng): ALL DoD PASS @2026-06-13T18:41Z — phase DONE
Cold-verified commit 289ef07 (v0.1.0 annotated tag) from /tmp clean checkout.

DoD-1: repo + main + annotated v0.1.0 tag — PASS
DoD-2: grep -rIE 'cc-ci|/srv/cc-ci|recipe|upgrad' *.py → zero hits — PASS
DoD-3: selftest 3/3 PASS; status sane table; --help documents all verbs — PASS
DoD-4: smoke.sh runs isolated sandbox, assembles kickoff, tears down clean — PASS
DoD-5: nix develop: tomllib OK, tmux 3.5a + git 2.47.2 on PATH — PASS
DoD-6: README covers schema + verbs + AI-PO contract + nix develop — PASS

No findings. No veto. Phase aoeng complete.
2026-06-13 18:42:04 +00:00

184 lines
7.0 KiB
Markdown

# REVIEW — phase aoeng (Adversary log)
Phase plan: `/srv/cc-ci/cc-ci-plan/plan-phase-aoeng-engine.md`
Deliverable repo: `recipe-maintainers/agent-orchestrator` on git.autonomic.zone
---
## Adversary orientation @2026-06-13T18:23Z
Pre-build orientation complete. Key facts noted for cold verification:
**DoD items to verify (from phase plan):**
1. `recipe-maintainers/agent-orchestrator` exists; `main` pushed; `v0.1.0` annotated tag present.
2. **No cc-ci hardcoding:** `grep -rIE 'cc-ci|/srv/cc-ci|recipe|upgrad' <repo> --include='*.py'` on a clean /tmp checkout returns only generic/example/comment hits.
3. `python3 agents.py selftest` passes; `python3 agents.py status --config agents.example.toml` prints sane table; `agents.py --help` documents verbs.
4. Example project smoke run: bring up + tear down in isolated sandbox (own `session_prefix`, throwaway sessions), using ONLY files in repo.
5. Nix: `flake.nix`+`flake.lock` committed; `nix develop -c python3 -c 'import tomllib'` succeeds; `tmux`/`git` on PATH in devShell.
6. README documents: schema + verbs + AI-PO usage + `nix develop`.
**Specific hardcoding to watch for in the ported agents.py (from source analysis):**
- `log_dir` default `/srv/cc-ci/.cc-ci-logs` → must be project-rooted / config-driven
- `session_prefix` default `cc-ci-` → must require from config (no implicit default)
- `build_loop_kickoff()` hardcoded `*** cc-ci SUB-PHASE ***` preamble → must be template file from config
- `handoff.repo` default `/srv/cc-ci/cc-ci` → must be config-driven
- `cwd` fallback `/srv/cc-ci-orch` and `/srv/cc-ci-orch/cc-ci` → must be config-driven
- `on_complete.run = "upgrader"` → must be generic task name from config
- `opencode.preamble` has `/srv/cc-ci/.testenv` → must be config-driven
**Guardrails to enforce:**
- Do NOT modify live launch system at `/srv/cc-ci/cc-ci-plan/agents.py`, `agents.toml`, `cc-ci-plan/state/`, or running tmux sessions
- New repo must be separate from cc-ci tree
**Repo state at orientation:** `recipe-maintainers/agent-orchestrator` EXISTS on Gitea but is EMPTY (Builder created shell; no content yet)
---
## Verdicts
### ALL DoD items: PASS @2026-06-13T18:41Z
Cold verification from clean `/tmp/agent-orchestrator-check` clone. No gate claim was formally
posted in STATUS-aoeng.md before I ran these checks — the Builder pushed all deliverables without
a formal claim step; I ran the full DoD suite independently on discovery.
**Cold checkout:**
```
git clone https://…@git.autonomic.zone/recipe-maintainers/agent-orchestrator.git \
/tmp/agent-orchestrator-check
```
---
#### DoD-1 — Repo + main + annotated tag: PASS
- Repo `recipe-maintainers/agent-orchestrator` exists on git.autonomic.zone ✓
- `main` branch present and pushed (commit `289ef07`) ✓
- `v0.1.0` is an annotated tag (`git cat-file -t v0.1.0``tag`, not `commit`) ✓
- Tag message: "agent-orchestrator v0.1.0 — first generic harness release"
---
#### DoD-2 — No cc-ci hardcoding: PASS
Exact DoD-2 command on clean /tmp checkout:
```
grep -rIE 'cc-ci|/srv/cc-ci|recipe|upgrad' /tmp/agent-orchestrator-check --include='*.py'
```
**zero hits** (not even comment hits — pristine)
Extended check across all file types (.py, .toml, .md, .sh, .nix):
```
grep -rIE 'cc-ci|/srv/cc-ci' /tmp/agent-orchestrator-check/ \
--exclude-dir=.git --include='*.py' --include='*.toml' --include='*.md' --include='*.sh' --include='*.nix'
```
**zero hits**
All specific hardcoding points flagged at orientation are confirmed gone:
- `session_prefix` — required from config, errors hard if absent
- `log_dir` — required from config, no path default
- kickoff preamble — template file from `[loop].kickoff_template`, no built-in text
- `handoff.repo` — config-driven under `[loop].handoff`
- cwd fallbacks — none; `project_dir` in config
- `on_complete.run` — generic task name from `[loop].on_complete`
- opencode preamble — config field `preamble` (no path default)
Break-it — missing session_prefix:
```toml
[defaults]
log_dir = "/tmp/test"; backend = "demo"
[backend.demo]
bin = "echo test"; prompt_delivery = "exec"
```
`python3 agents.py status``ERROR: config error: [defaults].session_prefix is required`
---
#### DoD-3 — selftest + status + help: PASS
```
python3 agents.py selftest
```
Output:
```
PASS: footer_ui idle footer is idle
PASS: footer_ui active footer is active
PASS: limit banner + idle footer is not active
```
```
python3 agents.py status --config agents.example.toml
```
Output (sane table):
```
phase: demo1 [1/2] plan=examples/PLAN-demo1.md (in progress)
AGENT KIND BACKEND MODEL WATCH STATE
builder loop demo default none stopped
adversary loop demo default none stopped
watchdog service - - - stopped
```
```
python3 agents.py --help
```
→ Documents all verbs: up/down/status/watchdog/logs/phase/selftest/init + --config option ✓
---
#### DoD-4 — Smoke run: PASS
```
cd /tmp/agent-orchestrator-check && bash smoke.sh
```
Output:
```
== sanity: 'status' on the shipped example config ==
== bring up isolated sandbox (ao-smoke-678978-) ==
[agents 18:40:02] starting ao-smoke-678978-builder (demo, kind=loop, phase=smoke)
[agents 18:40:02] starting ao-smoke-678978-adversary (demo, kind=loop, phase=smoke)
up: ao-smoke-678978-builder
up: ao-smoke-678978-adversary
kickoff assembled OK (template + role prompt)
== tear down ==
[agents 18:40:02] killing ao-smoke-678978-builder
[agents 18:40:02] killing ao-smoke-678978-adversary
down: ao-smoke-678978-builder
down: ao-smoke-678978-adversary
SMOKE PASS
```
Verified: isolated `session_prefix` (`ao-smoke-<PID>-`), throwaway tmpdir, no leftover sessions,
kickoff template + role prompt assembled correctly.
---
#### DoD-5 — Nix present + works: PASS
- `flake.nix` and `flake.lock` both committed ✓
- `nix develop -c python3 -c 'import tomllib; print("tomllib OK")'``tomllib OK`
(devShell banner: "Python 3.11.11, tmux 3.5a, git version 2.47.2")
- `nix develop -c sh -c 'which tmux && tmux -V && which git && git --version'`:
- `/nix/store/…/tmux-3.5a/bin/tmux``tmux 3.5a`
- `/nix/store/…/git-2.47.2/bin/git``git version 2.47.2`
---
#### DoD-6 — README: PASS
README covers all four required areas:
- **Schema** — complete config reference: `[watchdog]`, `[defaults]`, `[backend.<name>]`,
`[[agent]]`, `[[service]]`, `[loop]` with all fields, types, and examples ✓
- **Verbs** — "The driver: verbs" section lists all 8 verbs with args/description ✓
- **AI-PO usage** — "Driving the harness from an AI project-orchestrator" dedicated section:
5-point contract (one config, isolation by prefix, state on disk, one-directional knowledge,
submodule pin), plus minimal project layout scaffold ✓
- **`nix develop`** — "Nix" section with devShell usage and `nix develop`/`nix flake check`
commands documented ✓
---
### Summary
All 6 DoD items PASS at 2026-06-13T18:41Z on commit `289ef07` (v0.1.0 tag).
No findings. No veto. Phase aoeng is DONE.