fortrangoingonforty/fgof-devloop / 91cbc28

Browse files

Scaffold devloop package

Authored by mfwolffe <wolffemf@dukes.jmu.edu>
SHA
91cbc2872c8ba6d3f5483518d27a3782bd64a247
Parents
a7b23e2
Tree
257beaf

5 changed files

StatusFile+-
A README.md 63 0
A fpm.toml 20 0
A src/fgof_devloop.f90 27 0
A src/fgof_devloop_types.f90 10 0
A test/test_scaffold.f90 12 0
README.mdadded
@@ -0,0 +1,63 @@
1
+# fgof-devloop
2
+
3
+Watch-driven rebuild, restart, and smoke-loop helpers for modern Fortran tools.
4
+
5
+`fgof-devloop` is intended to be a small standalone library for the reusable
6
+parts of development loops: deciding when file changes should trigger work,
7
+tracking run cycles, modeling restart policy, and eventually wiring those
8
+decisions to `fgof-watch`, `fgof-process`, and `fgof-jobs`.
9
+
10
+It is part of the [FortranGoingOnForty lib-modules](https://github.com/FortranGoingOnForty/lib-modules)
11
+catalog, but it is intended to stand on its own as a normal `fpm` package.
12
+
13
+Current v1 target:
14
+
15
+- stable dev-loop option and state types
16
+- deterministic cycle and restart decision helpers
17
+- watch-event shaping that can consume `fgof-watch`
18
+- process-runner integration that can supervise rebuild and run commands
19
+- examples for command-line tools and local service smoke loops
20
+
21
+## Status
22
+
23
+Initial scaffold is in place.
24
+
25
+Tracked today:
26
+
27
+- package layout, CI, and standalone repo setup
28
+- local sprint plan in ignored `.docs/sprints/`
29
+- placeholder public API for `fpm test`
30
+
31
+## Public API Shape
32
+
33
+Primary modules:
34
+
35
+- `fgof_devloop`
36
+- `fgof_devloop_types`
37
+
38
+Current public procedures:
39
+
40
+- `devloop_backend_name`
41
+- `clear_devloop_state`
42
+
43
+## Build And Test
44
+
45
+```bash
46
+fpm test
47
+```
48
+
49
+## Supported Platforms
50
+
51
+- macOS
52
+- Linux
53
+
54
+## Boundaries
55
+
56
+- focused on reusable development-loop mechanics, not a full CLI app
57
+- should remain useful on its own even if future tools wrap it with UI policy
58
+- watch, process, and job integration should stay layered over stable state
59
+  transitions
60
+
61
+## License
62
+
63
+MIT
fpm.tomladded
@@ -0,0 +1,20 @@
1
+name = "fgof-devloop"
2
+version = "0.1.0"
3
+license = "MIT"
4
+author = "FortranGoingOnForty"
5
+maintainer = "FortranGoingOnForty"
6
+copyright = "2026"
7
+description = "Watch-driven development loop helpers for modern Fortran tools"
8
+
9
+[build]
10
+auto-executables = false
11
+auto-tests = true
12
+auto-examples = false
13
+
14
+[install]
15
+library = true
16
+
17
+[fortran]
18
+implicit-typing = false
19
+implicit-external = false
20
+source-form = "free"
src/fgof_devloop.f90added
@@ -0,0 +1,27 @@
1
+module fgof_devloop
2
+  use fgof_devloop_types, only : devloop_state
3
+  implicit none
4
+  private
5
+
6
+  character(len=*), parameter :: FGOF_DEVLOOP_BACKEND_MODEL = "model"
7
+
8
+  public :: clear_devloop_state
9
+  public :: devloop_backend_name
10
+  public :: devloop_state
11
+
12
+contains
13
+
14
+  function clear_devloop_state() result(state)
15
+    type(devloop_state) :: state
16
+
17
+    state%cycle_count = 0
18
+    state%active = .false.
19
+  end function clear_devloop_state
20
+
21
+  function devloop_backend_name() result(name)
22
+    character(len=:), allocatable :: name
23
+
24
+    name = FGOF_DEVLOOP_BACKEND_MODEL
25
+  end function devloop_backend_name
26
+
27
+end module fgof_devloop
src/fgof_devloop_types.f90added
@@ -0,0 +1,10 @@
1
+module fgof_devloop_types
2
+  implicit none
3
+  private
4
+
5
+  type, public :: devloop_state
6
+    integer :: cycle_count = 0
7
+    logical :: active = .false.
8
+  end type devloop_state
9
+
10
+end module fgof_devloop_types
test/test_scaffold.f90added
@@ -0,0 +1,12 @@
1
+program test_scaffold
2
+  use fgof_devloop, only : clear_devloop_state, devloop_backend_name
3
+  use fgof_devloop_types, only : devloop_state
4
+  implicit none
5
+
6
+  type(devloop_state) :: state
7
+
8
+  state = clear_devloop_state()
9
+  if (state%cycle_count /= 0) error stop "devloop state should start with no cycles"
10
+  if (state%active) error stop "devloop state should start inactive"
11
+  if (devloop_backend_name() /= "model") error stop "devloop backend should report model"
12
+end program test_scaffold