docs(scheduler-core): commit accumulated brief/requirements/roadmap edits

These edits (three-thread picker correction in brief.md, record_dir
path-validation and kvmgr-audit requirements in requirements.md,
OPCode_schedAdmin folded into the peer-authentication-hardening
backlog item in roadmap.md) were made during earlier requirements
review and design work but left uncommitted. Reviewed for accuracy
against the completed implementation — all still correct, persisting
as-is.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Rongsong Shen 2026-08-08 03:19:14 +00:00
parent d7b4969095
commit dfd8f5b342
Signed by: rshen
SSH key fingerprint: SHA256:8Vf2pZ3h6rJa7EhGK+WaAQ9Mta/apZvteW6g9U/WKKk
3 changed files with 32 additions and 10 deletions

View file

@ -35,7 +35,7 @@ Operators need configurable scheduling policies, and developers need a way to de
### 1. Pluggable Job Picker
The core scheduling loop calls `picker->next_job()` to get the next schedulable job, with zero knowledge of how jobs are selected. The picker runs synchronously in the core's scheduling thread — no dedicated picker thread, no `jbuf` cbuf.
The core scheduling loop calls `picker->next_job()` to get the next schedulable job, with zero knowledge of how jobs are selected. The picker retains today's dedicated thread, communicating with the allocator thread via the existing `jbuf` cbuf (superseded by the full three-thread producer/consumer contract in requirements.md Req 1 AC 3-4 — this brief predates that decision).
Picker plugin interface (`xce_job_picker_iface_t`):
@ -54,7 +54,7 @@ Scheduler core is a passive, event-driven engine with zero controller I/O depend
| Mode | Driver | Input | Output |
|------|--------|-------|--------|
| Normal | Controller-connected | capnp push/notify → core events | Core decisions → controller |
| Simulation | Replay file | JSONL event file → core events | Core decisions → log |
| Simulation | Replay file | `.replay` capnp binary stream → core events | Core decisions → log |
- **Mode-agnostic core**: no mode flag, no mode-specific code paths
- **Virtualized clock**: `xce_core_now(core)` with two-base + speed formula
@ -124,7 +124,7 @@ Normal: bases=0, speed=1/1 → returns wall clock. Simulation discrete: speed=0/
- `xce_sched_core_t` / `xce_sched_driver_t` / `xce_sched_sim_driver_t`
- `xce_core_event_t` — typed event interface
- `xce_core_decision_cb_t` — decision callback
- JSONL replay format + snapshot/restore
- `.replay` capnp binary stream format + snapshot/restore
- `xce_core_now()` — virtualized clock accessor
- `builtin_fcfs` — single builtin picker
- `job_pick_plugin` on scheduler + per-queue override
@ -139,7 +139,7 @@ Normal: bases=0, speed=1/1 → returns wall clock. Simulation discrete: speed=0/
- Core/driver separation: passive core, normal driver, simulation driver
- Virtualized clock (`xce_core_now()` with two-base + speed formula)
- Discrete event-driven virtual clock
- JSONL replay format (HEADER + SNAPSHOT + events + DECISIONS)
- `.replay` capnp binary stream format (HEADER + SNAPSHOT + events + DECISIONS)
- State snapshot/restore
- Deterministic replay guarantee
- Runtime recording control via xceadmin commands