{isNew ? ( 'The slug is derived from the title once and frozen afterwards — the public event page lives at it.' ) : ( <> {event?.slug} · {event?.state} {event?.currentVersion ? ` · published v${event.currentVersion}` : ' · never published'} > )}
You can read this definition and watch its runs. Editing and publishing an event are an admin or editor's, and starting one is an admin's alone — live control of a run already in flight is yours.
)} {archived && (This definition is archived. It is kept so its past runs can still be explained, and it cannot be edited or run again.
)} {/* ── §K's gate, said where it can still be acted on ── A published version that nobody has dry-run will not start on its schedule. The alternative to saying so here is an operator finding out on the Friday it did not run, so it is a banner rather than a log line — and only for a definition that actually HAS a schedule to be held. */} {!isNew && event?.state === 'ready' && !event?.currentVersionVerifiedAt && !archived && (This version has not been dry-run. Scheduled occurrences are held until it is — an event that starts while nobody is watching gets one review, and this is it. Starting it by hand is unaffected.
{report.report.ok ? 'Dry run passed' : 'Dry run found problems'} {' '} · {report.report.steps} step{report.report.steps === 1 ? '' : 's'} checked against{' '} {/* Which spec was checked. The two answer different questions, and a report that did not say would be read as the other one. */} {report.target === 'version' ? `published v${report.version}` : 'the working draft'} {report.recorded && ' · recorded, so scheduled occurrences may now start'}
{report.report.findings.length > 0 && (
{f.phase} · step {f.seq + 1}
{f.actionId ? ` · ${f.actionId}` : ''}
)}
{f.phase !== null && ' — '}
{f.message}
{c.dimension} |
{c.total} | {c.cap === null ? 'no cap' : `of ${c.cap} per run${c.from ? ` (${c.from})` : ''}`} |
Nothing this event does costs a capped resource.
)}{notice}
} {problems.length > 0 && (That did not save:
The grace window is how late this event may still start: past it an occurrence becomes
missed rather than beginning hours after it was announced. Two runs sharing a
concurrency key never overlap — {'{placeholders}'} are filled from the run’s own
params.
{describeSchedule(scheduleFromForm(form), form.timezone)}
Times are the event’s own, in {form.timezone} — not the reader’s. A
recurring schedule goes live when the definition is published and stops when it is
archived; occurrences become real runs a fortnight before they happen, and the
calendar forecasts the rest. A time that daylight saving skips moves forward to the next
one that exists, and an hour that happens twice takes the first.
No phases yet. An event needs at least one phase with at least one step before it can be published.
)} {form.phases.map((phase, pi) => (The key is what the run console groups by and what “phase 3 has not started” names, so it cannot change once runs exist.
{/* ── The advance condition (Phase 5) ── A gate is an ADDITIONAL condition and never a replacement, which is what the caption has to say: a phase whose steps are still running is not advanced by a boss that spawned early. */}{phase.advance?.kind ? 'This is in ADDITION to its steps: the phase waits until every step has finished AND this is met. Nothing times out — if the condition never happens, the run is marked stalled and a person advances it from the run console.' : 'The phase advances the moment every one of its steps is finished.'}
{DORMANT_NOTE}
)} {action && ({action.description} · risk: {action.risk} · reversible: {action.reversible}
)}
{p.name}
{p.required && *}
|
{p.type} |
{p.description}
e.g.
{JSON.stringify(p.example)} |
| This action takes no params. |
Pick an action and its parameters are listed here, straight from what the module declared.
)}Publishing snapshots the whole spec into a version nothing ever edits. Editing this definition while a run is live is free — the live run keeps the version it pinned and is unaffected by anything on this screen.
| v{v.version}{v.current && · current} | {new Date(v.publishedAt).toLocaleString()} | {v.publishedByUsername || '—'} |