Skip to content

feat: introduce AutoResearch features and commands - #22

Merged
blizhan merged 2 commits into
mainfrom
008-research-state
Sep 9, 2026
Merged

blizhan merged 2 commits into
mainfrom
008-research-state

Conversation

@blizhan

@blizhan blizhan commented Sep 9, 2026

Copy link
Copy Markdown
Owner
  • 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.

- 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.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread src/aimx/research/validation.py Outdated
Comment on lines +341 to +344
if target != current and target not in _AGENDA_TRANSITIONS[current]:
raise ValidationError(
f"Invalid agenda transition: {current} -> {target}", code="invalid_transition"
)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment thread src/aimx/research/context.py Outdated
Comment on lines +356 to +359
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))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +104 to +108
if token.startswith("--"):
key = token[2:].replace("-", "_")
if index + 1 >= len(args):
raise ValidationError(f"Missing value for {token}")
result[key] = args[index + 1]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

@blizhan
blizhan merged commit b3c2d7b into main Sep 9, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant