Introduce infrastructure for running scheduled jobs safely and
without a database-backed settings dependency.
- Add BoundedTaskRunner (app/Filters/BoundedTaskRunner.php), a
TaskRunner subclass that stops launching new tasks once a
deadline passes, since CI4's TaskRunner has no hook for this
between tasks. Loop logic is duplicated from vendor because it
cannot be reused directly; a running task cannot be preempted
mid-execution.
- Add Config/Settings.php overriding handlers to ['array'], since
OSPOS has no ospos_settings table and keeps config in
ospos_app_config instead.
- Add writable/jobs/index.html to block directory listing, matching
existing writable/ subfolder convention.
- Ignore writable/jobs/*.lock in .gitignore to avoid committing
runtime lock files from the job runner.
Signed-off-by: objecttothis <17935339+objecttothis@users.noreply.github.com>