Skip to content

Add family closure scheduling, report workflow, and v0.2.0 docs - #2

Open
Zihao-Liu-Leo wants to merge 4 commits into
frenzymath:mainfrom
Zihao-Liu-Leo:main
Open

Add family closure scheduling, report workflow, and v0.2.0 docs#2
Zihao-Liu-Leo wants to merge 4 commits into
frenzymath:mainfrom
Zihao-Liu-Leo:main

Conversation

@Zihao-Liu-Leo

Copy link
Copy Markdown
Contributor

Summary

This PR adds two optional, non-invasive capabilities on top of the existing Iteris CLI (monitor, doctor, run, evolve, …):

  • iteris family — joint scheduling and shared verified-fact pool for parallel sibling North-Star closure projects (wrapper .iteris/FAMILY.json, sibling markers, max_concurrent scheduling via subprocess iteris run).
  • iteris report — draft/build versioned LaTeX reports from verified project evidence, plus dashboard Reports UI.

Version bumped to 0.2.0. English/Chinese READMEs, docs/user-guide.md, and GUIDE_INDEX document both features. User-facing docs order: Evolve → Family Closure → Reports, matching the natural workflow (generalize from one verified result, then parallel sibling closure).

Design constraints (non-breaking)

  • cli.py: only +2 lines to register family; report typer unchanged from prior integration pattern.
  • Family scheduling calls iteris run via subprocess — no changes to commands/run.py state machine.
  • Family goal context uses lazy import in goal/prompt.py.
  • memory/family.py extended (closure sibling markers + .iteris/FAMILY.json) without removing evolve behavior.

Test plan

  • pytest tests/test_monitor_command.py tests/test_doctor_command.py tests/test_report_command.py tests/test_goal_command.py tests/test_family_state.py tests/test_family_closure.py tests/test_family_memory.py63 passed
  • Smoke: family init/status/schedule --dry-run/export/pool + legacy doctor, report doctor, status, run --print
  • iteris --help still lists monitor, doctor, report, evolve, family

Commits

  1. Add family closure scheduling and report workflow
  2. Document family/report in README; bump to 0.2.0
  3. Put Evolve before Family Closure in user-facing guides

Made with Cursor

Zihao-Liu-Leo and others added 4 commits July 1, 2026 03:13
Introduce iteris family for parallel sibling North-Star runs with shared verified-fact pool and max_concurrent scheduling, plus iteris report for LaTeX/PDF drafts from verified project evidence. Existing monitor, doctor, run, and evolve commands remain unchanged; family integrates via a thin CLI typer and lazy goal-prompt context.

Co-authored-by: Cursor <cursoragent@cursor.com>
Expose iteris family and iteris report in English and Chinese READMEs, user guide, and GUIDE_INDEX so open-source users can discover the new workflows.

Co-authored-by: Cursor <cursoragent@cursor.com>
Add family closure scheduling and report workflow
Match the natural workflow order: generalize from one verified result first, then parallel sibling North-Star closure.

Co-authored-by: Cursor <cursoragent@cursor.com>
LehengChen added a commit to LehengChen/iteris-dev that referenced this pull request Jul 26, 2026
…workflow

Merges frenzymath#2 (Zihao-Liu-Leo). The report half of that PR is
already present in main via local development (identical tree), so this
merge effectively lands the family-closure feature: iteris family init/
status/schedule/export/pool, shared verified-fact pool, sibling markers,
and .iteris/FAMILY.json wrapper scheduling with max_concurrent.

Supersedes PR frenzymath#1, whose family files appear here in revised form.
LehengChen added a commit to LehengChen/iteris-dev that referenced this pull request Jul 26, 2026
PR frenzymath#2 dropped the mode bit (100755 -> 100644) as an unintended side effect.
LehengChen added a commit that referenced this pull request Aug 9, 2026
#3)

* feat: add versioned report drafting

* feat: add siam report template adapter

* chore: ignore local tex template assets

* feat: replace report templates with generic layout

* chore: harden generic report layout

* feat: show versioned reports in dashboard

* refine report reference sidebar

* refine report reference reader

* align report sidebar with cited references

* fix report sidebar scrolling and labels

* prevent report reference row squeezing

* feat: export report artifacts from dashboard

* feat: export source without references

* fix: harden report export options

* docs: prompt dashboard after report work

* Add family closure scheduling and report workflow.

Introduce iteris family for parallel sibling North-Star runs with shared verified-fact pool and max_concurrent scheduling, plus iteris report for LaTeX/PDF drafts from verified project evidence. Existing monitor, doctor, run, and evolve commands remain unchanged; family integrates via a thin CLI typer and lazy goal-prompt context.

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs: document family and report in README; bump to 0.2.0

Expose iteris family and iteris report in English and Chinese READMEs, user guide, and GUIDE_INDEX so open-source users can discover the new workflows.

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs: put Evolve before Family Closure in user-facing guides

Match the natural workflow order: generalize from one verified result first, then parallel sibling North-Star closure.

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore: restore executable bit on scripts/deploy.sh

PR #2 dropped the mode bit (100755 -> 100644) as an unintended side effect.

* fix: make session names survive tmux target parsing (dots in project paths)

A project directory containing a dot produced a session Iteris could create
but never address again. `tmux new-session -s iteris-2.15` silently STORES
the session as `iteris-2_15`, because tmux target syntax reads `.` as a pane
separator. Every later `-t iteris-2.15` was then parsed as pane 15 of session
`iteris-2` and failed with `can't find pane: 15`, leaving a live worker that
could not be attached, logged, messaged, or stopped.

This is general, not incidental: it hits any project whose directory name
contains a dot, and lands squarely on family closure, whose documented use
case is sibling ids 2.15-2.19.

Fixed at two chokepoints:

- `project.tmux_safe_name` folds `.` and `:` to `_`, applied inside
  `session_slug` before the length check so the collision digest stays
  stable. Covers every Iteris-generated name.
- `tmux.tmux_target` applies the same fold at each tmux invocation, so a
  name passed by hand via `--session` is normalized too.

Folding matches tmux's own behavior: it reports `duplicate session` for
`2.15` when `2_15` exists, so no two names collapse that tmux kept apart.
Both helpers are idempotent, so layering them is safe. Creation and lookup
sites were changed together — normalizing only one side would have recreated
the original mismatch.

Verified end-to-end on an isolated tmux socket with a real `2.15` project:
create, has-session, capture-pane, send-keys, and kill-session all succeed.
Dot-free names keep their historical session names unchanged.

* fix: pin console-scripts PATH for interactive monitor sessions

Interactive monitor sessions invoke Iteris again for read-only lookups and
user-approved project actions, but Codex tool shells may reset PATH and lose
a user-local Iteris installation. Pin the console-scripts directory the same
way worker and verification sessions already do.

* fix: accept `id` in family manifests and require a sibling id

A manifest written to match the documented `--sibling id=...` CLI spec
scaffolded successfully but stored `sibling_id: None`. The family looked
healthy — `family status` listed every sibling — yet each id-addressed
command failed far from the cause: `family start --sibling 2.15` reported
`unknown sibling id: 2.15`, because `sibling_by_id` matches on `sibling_id`.

`normalize_sibling_entries` now runs at both scaffolding entry points
(`perform_family_new` and `perform_family_init`) and:

- accepts `id` as an alias for `sibling_id`, matching what
  `parse_sibling_spec` already does for the CLI surface
- raises when neither spelling is present, instead of storing None
- coerces ids to str, so a bare numeric id in JSON still resolves
- rejects duplicate ids, which would have left the second sibling
  unreachable via `sibling_by_id`

Verified live: a manifest using `id` now yields an addressable sibling and
`family start --sibling 2.15` resolves it.

* test: make report CLI assertions independent of Rich color and wrapping

Two report tests asserted on literal substrings of rendered CLI output and
failed in CI while passing locally. CI enables color; a plain local run does
not, and Rich styles message fragments independently:

- `--source` is emitted as `\x1b[1;36m-\x1b[0m\x1b[1;36m-source\x1b[0m`, so
  the literal `--source` is absent from the output entirely.
- An exported path is split into a styled parent directory and filename, and
  may wrap between them.

Rich also hard-wraps inside error boxes and pads lines to the terminal width
with `│` borders, so where a phrase breaks depends on terminal width and on
the length of interpolated paths — CI's `tmp_path` is longer than a local one.

Adds a `plain` fixture in `tests/conftest.py` that strips ANSI escapes and box
borders and collapses whitespace, and uses it in both tests. The assertions
now check the message text, which is what they were meant to verify; the
product code was correct and is unchanged.

Verified 416 passed across four combinations: local and CI dependency
versions (typer 0.27 / click 8.4), each with color off and on. The colored
CI-dependency run reproduces the original failure before this change.

---------

Co-authored-by: 刘梓豪 <2100011704@stu.pku.edu.cn>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Zihao-Liu-Leo <153701053+Zihao-Liu-Leo@users.noreply.github.com>
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