Land stranded content: catalog graph_hash, copilot trail_off, tinyflows-schedule - #99
Conversation
Introduce a new `graph_hash` module that computes a deterministic hash over a graph's structure and node content. This enables the catalog to detect and skip duplicate graph registrations, preventing redundant storage and ensuring idempotent publish operations. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
…sh_tests.rs Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
…,crates/tinyflows-copilot/src/l Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Add a new `trail_off` module to the copilot crate that provides text heuristics for detecting whether a builder turn ends with a question, along with the corresponding changelog entries documenting this addition and other recent changes. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Fixed a bug where the schedule gap detection logic incorrectly identified overlapping time windows as gaps. The issue occurred when adjacent windows shared a boundary time, causing the gap checker to treat them as non-contiguous. This change ensures that windows with matching start and end times are properly recognized as overlapping rather than gapped. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Introduce a new `tinyflows-schedule` crate that provides cron expression parsing and timezone-aware scheduling, replacing the previous gate-based test infrastructure. The old gate tests have been removed as the scheduling logic has been reimplemented using the `cron` and `chrono-tz` crates, which offer more robust and standard-compliant time handling. The schedule tests have been updated to accommodate the new implementation's error message formatting. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Co-authored-by: Medulla <medulla@tinyhumans.ai>
…ate) into main Co-authored-by: Medulla <medulla@tinyhumans.ai>
|
Warning Review limit reached
This review includes 18 billable files and costs up to $4.50. Or wait 49 seconds for your next included review. View limit detailsLimit details: You’ve used the included review currently available. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (18)
Comment |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 057a6edf76
ℹ️ 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".
| Schedule::Every { every_ms } => { | ||
| if *every_ms == 0 { | ||
| anyhow::bail!("Invalid schedule: every_ms must be > 0"); | ||
| } | ||
| Ok(()) |
There was a problem hiding this comment.
Reject intervals that cannot produce a next run
When every_ms exceeds i64::MAX—which is valid for the public u64 field and can be supplied through JSON—this validation returns Ok, but next_run_for_schedule immediately fails its i64::try_from conversion. Large convertible values can likewise overflow now. A host relying on validate_schedule can therefore persist an enabled job that can never calculate its next run; validate the conversion and checked date addition here as well.
Useful? React with 👍 / 👎.
Tiny Sweeper reviewTiny Sweeper reviewed this change across 6 lane(s) and found 0 active actionable finding(s). Detailed lane evidence and any incomplete work are listed below. State: Incomplete Review snapshot
Completeness: Incomplete What changedThe review could not produce a supported behavioral summary; inspect the cited changed surface and lane details below. FeaturesNone identified with supported citations. TestsNo supported feature-to-test mapping was produced. Test execution is not inferred. FindingsNo active actionable findings. Could not review: CHANGELOG.md, CLAUDE.md, crates/tinyflows-catalog/Cargo.toml, crates/tinyflows-catalog/src/graph_hash.rs, crates/tinyflows-catalog/src/graph_hash_tests.rs, crates/tinyflows-catalog/src/lib.rs, crates/tinyflows-copilot/src/lib.rs, crates/tinyflows-copilot/src/trail_off.rs, crates/tinyflows-copilot/src/trail_off_tests.rs, crates/tinyflows-schedule/Cargo.toml, crates/tinyflows-schedule/src/lib.rs, crates/tinyflows-schedule/src/schedule.rs, crates/tinyflows-schedule/src/schedule_gap_tests.rs, crates/tinyflows-schedule/src/schedule_tests.rs, crates/tinyflows-schedule/src/types.rs, crates/tinyflows-schedule/src/types_tests.rs, crates/tinyflows-schedule/src/wire_tests.rs, crates/tinyflows/src/compat_tests.rs Before merge
How this fits togetherflowchart LR
n0["...d_is_walked_and_its_refusal_is_attributed<br/>changed"]:::changed
n1["ordered_graph"]:::impacted
n2["graph"]:::impacted
n3["graph"]:::impacted
n4["errors"]:::impacted
n0 -->|calls| n2
n0 -->|tests| n2
n0 -->|calls| n4
n0 -->|tests| n4
n1 -->|calls| n3
classDef changed fill:#0d4429,stroke:#238636,color:#e6edf3
classDef impacted fill:#161b22,stroke:#6e7681,color:#c9d1d9
classDef flagged fill:#5a1e02,stroke:#d93f0b,color:#ffffff
classDef blocking fill:#67060c,stroke:#f85149,color:#ffffff
Agent review detailscritique
security
tests
commits
description
e2e
Evidence and run details
|
There was a problem hiding this comment.
tinysweeper found nothing blocking, but could not review everything, so this is not an approval: CHANGELOG.md, CLAUDE.md, crates/tinyflows-catalog/Cargo.toml, crates/tinyflows-catalog/src/graph_hash.rs, crates/tinyflows-catalog/src/graph_hash_tests.rs, crates/tinyflows-catalog/src/lib.rs, crates/tinyflows-copilot/src/lib.rs, crates/tinyflows-copilot/src/trail_off.rs and 10 more.
$0.0160 · 163,593 in / 9,267 out · 5,632 cached (3%) · ladder/vectors, deepseek/deepseek-v4-flash · 1,160 embedded
tests: $0.0040 · 43,643 in / 1,625 out · 2,816 cached (6%) · deepseek/deepseek-v4-flash
description: $0.0039 · 34,443 in / 5,139 out · 2,304 cached (7%) · deepseek/deepseek-v4-flash
e2e: $0.0045 · 47,769 in / 1,362 out · 0 cached (0%) · deepseek/deepseek-v4-flash
PRs #97 and #98 were merged into stacked bases, not main, so this content never reached main. This merges the commits at 5aca914 (the OpenHuman vendor pin) into current main: catalog graph_hash, copilot trail_off, and the new tinyflows-schedule crate (cron scheduling with timezone support), plus the extra compat_tests. Clean merge, no conflicts; main's own later commits are preserved. fmt, clippy (default and all-features) and cargo test --all-features pass locally.