@@ -20,7 +20,7 @@ Current v1 target: |
| 20 | 20 | |
| 21 | 21 | ## Status |
| 22 | 22 | |
| 23 | | -Sprint 03 is in place. |
| 23 | +Sprint 04 is in place. |
| 24 | 24 | |
| 25 | 25 | Tracked today: |
| 26 | 26 | |
@@ -34,7 +34,9 @@ Tracked today: |
| 34 | 34 | - watch option projection for debounce polls, hidden-path ignores, and directory-event emission |
| 35 | 35 | - `fgof-process` integration for one-shot build, run, and smoke command supervision |
| 36 | 36 | - command results that retain full `process_result` output, exit, timeout, and error detail |
| 37 | | -- focused model, watch-bridge, and process-supervision coverage in `fpm test` |
| 37 | +- `fgof-jobs` integration for long-running service ownership, wait observation, cleanup, and restart planning |
| 38 | +- pipeline-aware job observation that preserves terminal member state during group stop/continue events |
| 39 | +- focused model, watch-bridge, process-supervision, and job-supervision coverage in `fpm test` |
| 38 | 40 | |
| 39 | 41 | ## Public API Shape |
| 40 | 42 | |
@@ -53,6 +55,9 @@ Current public procedures: |
| 53 | 55 | - `clear_devloop_command_spec` |
| 54 | 56 | - `clear_devloop_command_result` |
| 55 | 57 | - `clear_devloop_supervision_result` |
| 58 | +- `clear_devloop_job_spec` |
| 59 | +- `clear_devloop_job_state` |
| 60 | +- `clear_devloop_job_plan` |
| 56 | 61 | - `devloop_backend_name` |
| 57 | 62 | - `clear_devloop_state` |
| 58 | 63 | - `start_devloop` |
@@ -70,6 +75,12 @@ Current public procedures: |
| 70 | 75 | - `devloop_smoke_command` |
| 71 | 76 | - `run_devloop_command` |
| 72 | 77 | - `run_devloop_cycle` |
| 78 | +- `devloop_service_job` |
| 79 | +- `attach_devloop_job` |
| 80 | +- `attach_devloop_pipeline_members` |
| 81 | +- `observe_devloop_job` |
| 82 | +- `release_devloop_job` |
| 83 | +- `devloop_job_restart_plan` |
| 73 | 84 | - `begin_devloop_cycle` |
| 74 | 85 | - `finish_devloop_cycle` |
| 75 | 86 | |
@@ -83,20 +94,26 @@ Current semantics: |
| 83 | 94 | - `devloop_build_command()`, `devloop_run_command()`, and `devloop_smoke_command()` wrap `fgof-process` commands with loop roles and optional process options |
| 84 | 95 | - `run_devloop_command()` executes one command spec and preserves the raw `process_result`, including stdout, stderr, exit code, timeout state, and process error details |
| 85 | 96 | - `run_devloop_cycle()` starts a cycle, executes enabled build/run/smoke specs in order, skips later specs after the first failure, and feeds the outcome into `finish_devloop_cycle()` |
| 97 | +- `devloop_service_job()` builds a long-running service/job spec backed by `fgof-jobs` |
| 98 | +- `attach_devloop_job()` records an already-launched pid/process group and ownership expectations |
| 99 | +- `observe_devloop_job()` applies `fgof-jobs` wait results while preserving member-level terminal state |
| 100 | +- `devloop_job_restart_plan()` models whether a watched change should stop, start, restart, release, or require terminal handoff for a long-running job |
| 86 | 101 | - `begin_devloop_cycle()` increments the cycle counter and starts work only when the loop is active, idle, and policy permits the trigger |
| 87 | 102 | - `finish_devloop_cycle()` records success or failure and returns an explicit decision to idle, restart, or stop |
| 88 | 103 | - negative `max_failures` values normalize to unlimited failures |
| 89 | 104 | - negative `debounce_polls` values normalize to no debounce |
| 90 | | -- Sprint 03 is intentionally one-shot and synchronous; long-running process groups and cleanup orchestration belong to the later jobs layer |
| 105 | +- Sprint 04 remains model-first: it plans and observes long-running job ownership, while actual spawning/signaling stays in the launcher layer |
| 91 | 106 | |
| 92 | 107 | ## Dependency |
| 93 | 108 | |
| 94 | 109 | `fgof-devloop` depends on `fgof-watch` `v0.1.0` for watch-event types and |
| 95 | 110 | watch option projection, and a pinned `fgof-process` commit for one-shot |
| 96 | | -process execution: |
| 111 | +process execution. It also depends on `fgof-jobs` `v0.1.0` for long-running |
| 112 | +job ownership and wait-state modeling: |
| 97 | 113 | |
| 98 | 114 | ```toml |
| 99 | 115 | [dependencies] |
| 116 | +fgof-jobs = { git = "https://github.com/FortranGoingOnForty/fgof-jobs.git", tag = "v0.1.0" } |
| 100 | 117 | fgof-process = { git = "https://github.com/FortranGoingOnForty/fgof-process.git", rev = "dd71a77c61985380c7e32f4a719fd8bb247625c7" } |
| 101 | 118 | fgof-watch = { git = "https://github.com/FortranGoingOnForty/fgof-watch.git", tag = "v0.1.0" } |
| 102 | 119 | ``` |