Plan, admit, run and publish monthly snapshots
What It Does
The planner checks completed workspace-local months every fifteen minutes; staff can alternatively request a reasoned manual run or backfill. Other snapshot owners use the shared ledger with their own roles and generation behavior.
The Flow
Plan the first period version for registered Platform types, retaining skipped reasons for loading or policy-disabled workspaces, then nudge dispatch. Accept reasoned staff requests as new versions or backfill candidates, respecting active work and protected captured or finalized history. Claim eligible or retry-due runs, create their attempt jobs and reoffer queued rows with no job after five minutes. Start or resume the attempt, retain the chosen generation mode, commit chunks with their cursor when needed, then finalize, validate and publish transactionally. Expose workspace periods with status, chosen version, basis, publication time and skip reason.
When Something Fails
The next pass can insert missed eligible period rows. A missing planned period remains visible through the overdue inspection gap. Refuse unsupported or overlapping requests with their reason. No accepted generation is implied by a staff refusal. Later dispatch and job reconciliation handle failed starts. A queued run can wait for attachment or execution of its job. Final validation failure settles the attempt; other faults use job retries before attempt backoff, with the fourth retryable failure final. Committed chunks can remain unpublished while the previous current version stays current. The period read returns its ordinary access or service refusal. The console has not integrated this answer into a report month selector.
Idempotency and Concurrency
Planning inserts only version one under uniqueness. Owner locking coordinates admission, and repeated failure consequences leave already-settled attempts unchanged. Unique indexes protect each period’s active and current version. The default admission cap is four with one backfill; worker and dispatcher limits follow configuration.