Skip to content

Land stranded content: catalog graph_hash, copilot trail_off, tinyflows-schedule - #99

Merged
senamakel merged 9 commits into
mainfrom
land-pin-extras
Sep 30, 2026
Merged

senamakel merged 9 commits into
mainfrom
land-pin-extras

Conversation

@senamakel

Copy link
Copy Markdown
Member

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.

senamakel and others added 9 commits September 30, 2026 03:26
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>
@coderabbitai

coderabbitai Bot commented Sep 30, 2026

Copy link
Copy Markdown

Warning

Review limit reached

  • Run on-demand review

This review includes 18 billable files and costs up to $4.50.

Or wait 49 seconds for your next included review.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 0dd39a30-7bb3-43b2-a14d-de62e95895c3

📥 Commits

Reviewing files that changed from the base of the PR and between eeddad1 and 057a6ed.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (18)
  • 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

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-30T09:41:40.670133Z 057a6ed PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@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: 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".

Comment on lines +73 to +77
Schedule::Every { every_ms } => {
if *every_ms == 0 {
anyhow::bail!("Invalid schedule: every_ms must be > 0");
}
Ok(())

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

@senamakel
senamakel merged commit 90dc52d into main Sep 30, 2026
3 checks passed
@tinysweeper

tinysweeper Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

Tiny Sweeper review

Tiny 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
Priority: low
Reviewed head: 057a6edf763d
Updated: 1790761574 (Unix time)

Review snapshot

Change surface Files Review signal Count
Production 7 Active findings 0
Tests 7 Noted findings 0
Documentation 2 Resolved findings 0
Configuration 2 Pending checks/questions 35

Completeness: Incomplete
Test assessment: No supported feature-to-test mapping was available; this does not mean tests are absent or passed.

What changed

The review could not produce a supported behavioral summary; inspect the cited changed surface and lane details below.

Features

None identified with supported citations.

Tests

No supported feature-to-test mapping was produced. Test execution is not inferred.

Findings

No 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

  • Complete the critique review for 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-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, 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.
  • Complete the security review for CLAUDE.md, crates/tinyflows-catalog/Cargo.toml, crates/tinyflows-schedule/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-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, crates/tinyflows-copilot/src/lib.rs, crates/tinyflows-copilot/src/trail_off.rs, crates/tinyflows-copilot/src/trail_off_tests.rs.

How this fits together

flowchart 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
Loading
Agent review details

critique

  • Conclusion: Neutral
  • Scope reviewed: incomplete; unanswered: 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-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, 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
  • Lane summary: Reviewed 0 files; 0 findings. 18 files could not be reviewed: 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-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, 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.

security

  • Conclusion: Neutral
  • Scope reviewed: incomplete; unanswered: CLAUDE.md, crates/tinyflows-catalog/Cargo.toml, crates/tinyflows-schedule/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-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, crates/tinyflows-copilot/src/lib.rs, crates/tinyflows-copilot/src/trail_off.rs, crates/tinyflows-copilot/src/trail_off_tests.rs
  • Lane summary: Reviewed 0 files; 0 findings. 17 files could not be reviewed: CLAUDE.md, crates/tinyflows-catalog/Cargo.toml, crates/tinyflows-schedule/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-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, crates/tinyflows-copilot/src/lib.rs, crates/tinyflows-copilot/src/trail_off.rs, crates/tinyflows-copilot/src/trail_off_tests.rs. 1 file was not security-reviewed: CHANGELOG.md (prose or tabular data).

tests

  • Conclusion: Success
  • Scope reviewed: all assigned evidence
  • Lane summary: This pull request extracts and adds several new modules with thorough test coverage: `graph_hash` (content hash with pinned vector), `trail_off` (question-detection heuristics), `tinyflows-schedule` (schedule model, next-run logic, validation, wire-format pinning), and a nested inline sub_workflow compatibility test. Every behavioural change is exercised by tests that assert on concrete outputs (hash values, boolean results, DateTime values, error messages, byte-exact JSON) rather than mocks, and those tests would fail if the corresponding logic regressed. All changes are safe to merge. _The code index is behind this pull request (indexed at `9d65a2885a79`), so retrieved context may be out of date._ _Memory was unavailable (model: cortex: v1/recall: timed out after 10s), so this review ran without it._

commits

  • Conclusion: Neutral
  • Scope reviewed: all assigned evidence
  • Lane summary: Nothing sensitive found in what this pull request commits.

description

  • Conclusion: Success
  • Scope reviewed: all assigned evidence
  • Lane summary: This pull request lands three new modules and a nested sub_workflow test. The code is functionally correct and all files are within the line-count limit. However, the new `tinyflows-schedule` crate is missing the required `#![forbid(unsafe_code)]` and `#![warn(missing_docs)]` attributes at its crate root, violating the repository's coding rules. _The code index is behind this pull request (indexed at `9d65a2885a79`), so retrieved context may be out of date._ _Memory was unavailable (model: cortex: v1/recall: timed out after 10s), so this review ran without it._

e2e

  • Conclusion: Success
  • Scope reviewed: all assigned evidence
  • Lane summary: This pull request adds three new internal utility modules (graph_hash, trail_off, schedule) with pure logic and no external surface — routes, commands, persisted formats, or observable side effects — plus a unit test for nested inline sub_workflows. All new code is covered by unit tests that pin fixed vectors, compare against legacy implementations, and exercise edge cases. There is no end-to-end harness that drives these changes, and none is needed because they have no external surface. The changes are safe to merge. _The code index is behind this pull request (indexed at `9d65a2885a79`), so retrieved context may be out of date._ _Memory was unavailable (model: cortex: v1/recall: timed out after 10s), so this review ran without it._
Evidence and run details
  • Models: ladder/vectors, deepseek/deepseek-v4-flash
  • Spend: $0.015998
  • Tokens: 163593 input · 9267 output · 5632 cached · 1160 embedding
Head State Pass summary
057a6edf763d incomplete 0 active finding(s), 0 resolved finding(s) (at 1790761574)

tinysweeper 0.1.0

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

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

@tinysweeper tinysweeper Bot added the priority: p3 Whenever. Cosmetic, a nicety, or a cleanup with no user visible effect. label Sep 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

priority: p3 Whenever. Cosmetic, a nicety, or a cleanup with no user visible effect.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant