feat(job): complete deferred job-file features (#20) #26

Merged
warkanum merged 1 commits from issue-20-complete-job-files into master 2026-09-08 14:18:57 +00:00
Owner

Completes the remaining deferred items from #20.

Changes

  • Forward-permissive version — any value >= 1 is accepted; a newer-than-known version loads best-effort (unknown fields ignored, warning printed) instead of hard-failing.
  • from_job input referenceinputs: [{ from_job: <job> }] resolves to that job's single-file output + format and implies a dependency edge. Combined depends_on + from_job graph gets topological ordering and cycle detection.
  • Logfile size-rotation — on by default (5MB, keep 3), overridable per job (log_max_size / log_keep) or file-wide via a top-level defaults: block.
  • New commands: split (schema/table subsetting via select:), inspect (rule validation → markdown/json report, fails the job on enforced-rule errors), diff (compare exactly two schemas, never fails), scripts-exec (run SQL script dirs against a live PostgreSQL database).
  • Atomic writes — single-file outputs and reports written via temp file + rename.
  • Symlink-escape hardening in SafeJoin via EvalSymlinks preflight.

Docs (docs/JOB_FILES.md) and the shipped example (examples/jobs/relspec.yml) updated.

Verification

make build, make test (race, 82.4% coverage), make lint — all green. Manual CLI spot-checks for job list / --plan / from_job chaining / newer-version warning / diff.

Closes #20

🤖 Generated with Claude Code

https://claude.ai/code/session_01Ss2MY5J11cRGwEz86ZXk7d

Completes the remaining deferred items from #20. ## Changes - **Forward-permissive `version`** — any value `>= 1` is accepted; a newer-than-known version loads best-effort (unknown fields ignored, warning printed) instead of hard-failing. - **`from_job` input reference** — `inputs: [{ from_job: <job> }]` resolves to that job's single-file output + format and implies a dependency edge. Combined `depends_on` + `from_job` graph gets topological ordering and cycle detection. - **Logfile size-rotation** — on by default (5MB, keep 3), overridable per job (`log_max_size` / `log_keep`) or file-wide via a top-level `defaults:` block. - **New commands**: `split` (schema/table subsetting via `select:`), `inspect` (rule validation → markdown/json report, fails the job on enforced-rule errors), `diff` (compare exactly two schemas, never fails), `scripts-exec` (run SQL script dirs against a live PostgreSQL database). - **Atomic writes** — single-file outputs and reports written via temp file + rename. - **Symlink-escape hardening** in `SafeJoin` via `EvalSymlinks` preflight. Docs (`docs/JOB_FILES.md`) and the shipped example (`examples/jobs/relspec.yml`) updated. ## Verification `make build`, `make test` (race, 82.4% coverage), `make lint` — all green. Manual CLI spot-checks for `job list` / `--plan` / `from_job` chaining / newer-version warning / diff. Closes #20 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01Ss2MY5J11cRGwEz86ZXk7d
warkanum added 1 commit 2026-09-08 12:32:29 +00:00
Implements the remaining items from issue #20:

- version is now forward-permissive: any value >= 1 is accepted; a
  newer-than-known version loads best-effort (unknown fields ignored,
  warning printed) instead of hard-failing on "must be 1"
- from_job input reference: `inputs: [{ from_job: <job> }]` resolves to
  that job's single-file output + format and implies a dependency edge;
  combined depends_on + from_job graph gets topological ordering and
  cycle detection
- logfile size-rotation, on by default (5MB, keep 3), overridable per
  job (log_max_size / log_keep) or file-wide via a top-level defaults block
- new commands: split (schema/table subsetting via select:), inspect
  (rule validation -> markdown/json report, fails job on enforced-rule
  errors), diff (compare exactly two schemas, never fails), scripts-exec
  (run SQL script dirs against a live PostgreSQL database)
- atomic single-file output/report writes (temp file + rename)
- symlink-escape hardening in SafeJoin via EvalSymlinks preflight

Updates docs/JOB_FILES.md and examples/jobs/relspec.yml accordingly.
warkanum merged commit 7b628b888c into master 2026-09-08 14:18:57 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wdevs/relspecgo#26