Skip to content

Conversation

@AlexanderOnischenko
Copy link
Owner

No description provided.

AlexanderOnischenko and others added 28 commits January 23, 2026 12:03
…tures-from-events.jsonl

Guard planner_input dependency when emitting replay_point requires
…com:AlexanderOnischenko/fetchgraph into codex/reorganize-fixtures-and-migrate-paths
…com:AlexanderOnischenko/fetchgraph into codex/reorganize-fixtures-and-migrate-paths
…com:AlexanderOnischenko/fetchgraph into codex/reorganize-fixtures-and-migrate-paths
…tures-and-migrate-paths

Clarify fixture help defaults in Makefile
…com:AlexanderOnischenko/fetchgraph into codex/reorganize-fixtures-and-migrate-paths
…tures-and-migrate-paths

Codex/reorganize fixtures and migrate paths
@AlexanderOnischenko
Copy link
Owner Author

@codex, please review

Copy link

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

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: d9076ec05a

ℹ️ 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 on lines 31 to 35
bucket_dir = FIXTURES_ROOT / bucket
if not bucket_dir.exists():
continue
for path in bucket_dir.rglob("*.json"):
paths.append((bucket, path))

Choose a reason for hiding this comment

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

P2 Badge Ignore resource JSONs when collecting replay fixtures

When a replay fixture is exported with --with-requires, export_replay_fixture/write_bundle copies dependent resource files into the same output directory, and those resources can be .json files. _iter_fixture_paths currently glob/rglob’s every *.json under tests/fixtures/replay_points/{fixed,known_bad}, so resource payloads get parameterized as fixtures and then test_replay_fixture fails at assert event.get("type") == "replay_point" because resource files don’t contain a replay payload. This breaks tests as soon as any fixture includes JSON resources; consider filtering by type in _iter_fixture_paths or storing resources in a subdirectory that isn’t globbed.

Useful? React with 👍 / 👎.

…er-v2-features-and-export

Tracer: observed-first `replay_case` v2, bundle export/runtime, CLI, and remove generated fixtures
@AlexanderOnischenko
Copy link
Owner Author

@codex, please review

Copy link

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

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: be0ea0f3e2

ℹ️ 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 on lines 394 to 395
events_path = run_dir / "events.jsonl"
case_logger = event_logger.for_case(case.id, events_path) if event_logger else EventLogger(events_path, run_id, case.id)

Choose a reason for hiding this comment

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

P2 Badge Respect --events off when creating case logger

Because run_one always instantiates an EventLogger when event_logger is None, per-case events.jsonl emission becomes unconditional. That means batch.handle_batch’s --events off path (which intentionally passes event_logger=None) no longer disables event logging, and the agent still records events to disk; this can unexpectedly write large trace files or capture data that users explicitly opted out of logging. Consider only creating a case logger when event_logger is provided (or add an explicit flag) so the CLI semantics for --events still work as advertised.

Useful? React with 👍 / 👎.

AlexanderOnischenko and others added 8 commits January 26, 2026 09:39
…een-to-ensure-validation

fixture-green: validate by default, add --expected-from, rollback on mismatch with improved diffs
* Allow explicit disabling of event logging

* Refine event logger sentinel typing
* Fix relational selector validation

* Add replay validator checks for fixtures

* Use shared replay validators in known_bad tests

* Require replay validators in fixture-green and fixed tests
@AlexanderOnischenko
Copy link
Owner Author

@codex, please review

Copy link

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

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: 7091ab385c

ℹ️ 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 on lines +242 to +246
log_replay_case(
replay_logger,
id="plan_normalize.spec_v1",
meta={
"provider": spec.provider,

Choose a reason for hiding this comment

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

P2 Badge Include planner_input extra in replay_case requires

The new replay handler falls back to ctx.extras["planner_input_v1"] when provider_info_snapshot is missing (see src/fetchgraph/replay/handlers/plan_normalize.py), but this log_replay_case call never populates requires, so export_replay_case_bundle will not carry the planner_input_v1 extra (or schema resource) into the case bundle. That means replays for providers not present in the catalog/registry will silently use a minimal ProviderInfo and can normalize selectors differently from the original run. Consider adding a requires entry for planner_input_v1 (and schema resource if needed) when emitting the replay_case.

Useful? React with 👍 / 👎.

* Improve replay requires resolution for plan normalization

* Refine replay dependency heuristics
@AlexanderOnischenko
Copy link
Owner Author

@codex, please review

Copy link

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

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: 45eb6bef44

ℹ️ 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 on lines 540 to 544
def _resolve_case_dir_from_run_id(*, data_dir: Path, runs_subdir: str, run_id: str, case_id: str) -> Path:
runs_root = data_dir / runs_subdir / run_id / "cases"
if not runs_root.exists():
raise FileNotFoundError(f"Run directory does not exist: {runs_root}")
case_dirs = sorted(runs_root.glob(f"{case_id}_*"), key=lambda p: p.stat().st_mtime, reverse=True)

Choose a reason for hiding this comment

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

P2 Badge Resolve run_id using run metadata, not directory name

The --run-id path resolution assumes the run_id is the directory name by building data_dir/<runs_subdir>/<run_id>/cases, but batch runs create directories named like <timestamp>_<cases_stem> while storing the real run_id only in run_meta.json/events, so --run-id will raise “Run directory does not exist” even when a valid run_id is supplied from metadata. Consider scanning run directories for a matching run_meta.json run_id (or clarifying that --run-id expects the run folder name) to make this flag work for batch runs.

Useful? React with 👍 / 👎.

…cs (#131)

* Resolve run ids from history

* Fix run and case dir resolution

* Tighten events/run-dir resolve output

* Clarify events run_dir requirements
@AlexanderOnischenko
Copy link
Owner Author

@codex, please review

Copy link

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

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: d3bf518b65

ℹ️ 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 on lines +707 to +712
rel = _safe_resource_path(file_name, stem=stem)
if rel.parts[:3] == ("resources", stem, resource_id):
continue
if rel.parts[:1] == ("resources",) and len(rel.parts) >= 2:
rel_tail = Path(*rel.parts[2:])
else:

Choose a reason for hiding this comment

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

P2 Badge Strip resource_id when migrating resource paths

When a bundle’s data_ref.file already includes a resource-id segment (e.g., resources/<old_stem>/<resource_id>/file.txt), the current migration logic only drops the first two path parts and then re-prefixes resource_id, producing resources/<stem>/<resource_id>/<resource_id>/file.txt. That yields a non-canonical layout and updates data_ref.file to the doubled path, so resources end up in an unexpected location and tooling that assumes resources/<stem>/<resource_id>/... (per tracer docs) won’t find them. Consider checking rel.parts[2] == resource_id and dropping three parts in that case.

Useful? React with 👍 / 👎.

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.

2 participants