docs(steering): one owner per job attribute; pre/post-exec moves to the app profile

New steering job-config-layering.md: queue = scheduling policy, application
profile = what the application needs and how it runs (resreq, task range,
execution settings, pre/post-exec, limits), project = resource ownership.
Only two interactions: the job overrides a profile attribute marked
default (fixed: not at all; select: only ANDed terms), and queue ceilings
or project quotas check effective values (reject if never satisfiable,
pend if full now). Replaces the simplified job > app > queue rules.

Queue pre_exec/post_exec are deprecated with queue res_req: the profile's
pre/post-exec fills the worker's existing outer layer, the job's own stays
the inner layer, allowed or forbidden by the profile.

job-config-merge and application-profile briefs and the roadmap follow;
CLAUDE.md lists the new steering file.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Rongsong Shen 2026-10-10 03:19:20 +00:00
parent b761878b58
commit 25cdbc79b4
Signed by untrusted user: rshen
GPG key ID: 80533536B0EB651C
5 changed files with 123 additions and 21 deletions

View file

@ -13,10 +13,18 @@ decisions):**
requirement* (select / rusage / `span[...]` / same) and task limits
(min / default / max, LSF TASKLIMIT), **project** = resource ownership
(`project-config`).
- How the levels combine is owned by **`job-config-merge`**: job overrides
profile section by section, `select` is ANDed, queue hard and task limits
are ceilings that reject. This answers the open question "how resource
defaults combine with a job's own resreq" below.
- Every attribute has one owning level (`.kiro/steering/job-config-layering.md`).
How the levels interact is owned by **`job-config-merge`**: each profile
attribute is *default* (the job may replace it) or *fixed* (the job may
not; for `select` it may only add ANDed terms); queue ceilings and project
quotas only check, never change, the job's values. This answers the open
question "how resource defaults combine with a job's own resreq" below.
- **Pre/post-exec moves here from the queue** (queue `pre_exec`/`post_exec`
deprecated). The profile's pre/post-exec is admin-defined and always runs
as the outer layer; the job's own pre/post-exec is the inner layer, allowed
or forbidden by the profile. Order: profile pre → job pre → job → job post
→ profile post (the worker's existing two-layer structure,
`xcecd_worker.c` `queue_pre_exec()`/`queue_post_exec()`).
- **Replaces "Resolution at submit time"** below: the merge is *live*. The WAL
keeps the job's own values plus the profile name; the controller and
apiserver validate at submit, and the scheduler computes effective values