feat: introduce AutoResearch features and commands - #22
Conversation
- Added durable AutoResearch control plane to manage research state, findings, and context within Aimx. - Implemented new commands: `aimx research`, `aimx finding`, `aimx lineage`, and `aimx frontier` for enhanced research management. - Updated documentation to reflect new features and usage examples for research state and command functionalities. - Enhanced `collect_experiment_snapshot.py` to clarify its role in the AutoResearch handoff process. - Bumped version to 0.4.2.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4f28bd0ca9
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if target != current and target not in _AGENDA_TRANSITIONS[current]: | ||
| raise ValidationError( | ||
| f"Invalid agenda transition: {current} -> {target}", code="invalid_transition" | ||
| ) |
There was a problem hiding this comment.
Reject repeated transitions to a terminal agenda status
When an agenda item is already completed, another agenda.item.transition targeting completed bypasses this check because target == current. Replay then treats it as a new completion and appends the new commit to result_commit_ids (and duplicates any supplied evidence), even though completed is terminal. A client submitting the transition again with a fresh revision but without an idempotency key therefore records a fictitious second result; reject same-status transitions for terminal items.
Useful? React with 👍 / 👎.
| items.extend(_item("agenda_item", agenda) for agenda in agendas) | ||
| for annotation in state.annotations.values(): | ||
| if annotation.get("target_kind") == "research_state": | ||
| items.append(_item("annotation", annotation)) |
There was a problem hiding this comment.
Include annotations attached to active policy artifacts
When an active/proposed agenda item or active frontier item is included through the policy path rather than a lexically matching finding group, annotations attached directly to that item are omitted because this loop only adds research_state annotations. For example, context for an unrelated objective includes an active agenda item but drops a human annotation saying to stop or alter it, so a bounded-context consumer can execute work without the persisted steering; include annotations for policy-selected agenda and frontier items as well.
Useful? React with 👍 / 👎.
| if token.startswith("--"): | ||
| key = token[2:].replace("-", "_") | ||
| if index + 1 >= len(args): | ||
| raise ValidationError(f"Missing value for {token}") | ||
| result[key] = args[index + 1] |
There was a problem hiding this comment.
Reject unsupported shorthand-command options
This shared parser accepts every --name value pair, while each command silently reads only its known keys. Consequently a typo such as aimx frontier add ... --prioritty 80 succeeds and persists priority 0, and finding accept ... --reasn ... commits without the intended rationale. Because these commands write durable research state, validate options against the current subcommand instead of silently discarding unknown flags.
Useful? React with 👍 / 👎.
aimx research,aimx finding,aimx lineage, andaimx frontierfor enhanced research management.collect_experiment_snapshot.pyto clarify its role in the AutoResearch handoff process.