Add family closure scheduling, report workflow, and v0.2.0 docs - #2
Open
Zihao-Liu-Leo wants to merge 4 commits into
Open
Add family closure scheduling, report workflow, and v0.2.0 docs#2Zihao-Liu-Leo wants to merge 4 commits into
Zihao-Liu-Leo wants to merge 4 commits into
Conversation
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.
This was referenced Jul 26, 2026
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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_concurrentscheduling via subprocessiteris 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, andGUIDE_INDEXdocument 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 registerfamily;reporttyper unchanged from prior integration pattern.iteris runvia subprocess — no changes tocommands/run.pystate machine.goal/prompt.py.memory/family.pyextended (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.py— 63 passedfamily init/status/schedule --dry-run/export/pool+ legacydoctor,report doctor,status,run --printiteris --helpstill listsmonitor,doctor,report,evolve,familyCommits
Made with Cursor