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>
8.1 KiB
OpenWolf
This project uses OpenWolf for context management. The always-on rules live in .claude/rules/openwolf.md; the hooks handle bookkeeping (anatomy index, memory log, read tracking) automatically.
For the full operating protocol (session handoff, memory discipline, bug logging), load the openwolf skill, or read .wolf/OPENWOLF.md. Regenerate the session handoff with /handoff.
XCE Cluster Management System
Project Overview
XCE is an HPC cluster management system — Go API/CLI tier fronting C daemons (controller, worker, scheduler). Full context in .kiro/steering/product.md.
Engineering Guide
For details on any topic below, read the corresponding steering file in .kiro/steering/. CLAUDE.md provides pointers, not duplicates.
| Topic | Steering File |
|---|---|
| Project purpose, HA phases, design decisions | product.md |
| Technology stack, build systems, key decisions | tech.md |
| Directory layout, naming conventions, test org | structure.md |
| Build commands, Nix flake, deploy, AppImage | build-deployment.md |
| REST handler pattern, daemon opcodes, Cap'n Proto | api-standards.md |
| HA protocol, async I/O, Raft election, heartbeat | ha-async-io.md |
| TDD rules, C + Go test patterns, coverage targets | testing.md |
| Error handling: Go ReturnError, C errnox, zap logging | error-handling.md |
| RBAC, JWT, auth backends, input validation, secrets | security.md |
| WAL durability, recovery, save/restore field-completeness | persistence.md |
| Real vs. virtual resources, reservation-vs-usage accounting (mem) | resource-accounting.md |
| Job/app-profile/queue/project ownership and merge rules | job-config-layering.md |
Key Rules (from steering — summarized for quick reference)
- TDD mandatory: red → green → refactor; test in
testsuite/before C changes,_test.gobefore Go changes - Async I/O: delaymgr is trigger-only and must never block (no
connect(), no file I/O) — it drives heartbeats/election timeouts, so blocking there causes spurious failover. Long/unbounded blocking goes on the slow lane; bounded blocking in vtask handlers is permitted only under an admission reservation (COMMIT_WAIT_RESERVED).xce_request/xce_replyare always non-blocking. Seeha-async-io.md - Connections are long-lived: closing signals RDHUP failover. Inbound connections are vote-only; outbound carry all state push
- Middleware chain (non-negotiable): WhitelistURL → WhitelistIP → RateLimit → JWT → CORS → RBAC
- Error pattern:
ReturnError(code, msg, nil); return— early return on every error - Build:
/xce-build [component]— debug + ASAN + tests. Components:all(default),lib,controller,harness,scheduler,worker,apiserver,xcecli,xceadmin. Seebuild-deployment.mdfor full commands - Buglog: each bug is a Markdown record
.wolf/bugs/<id>.mdwritten to the standard in.claude/skills/buglog/bug-record.md(Description, Environment incl. OS/libc/toolchain/commit, Reproduction; Root cause, Fix, Verification and fix commits once fixed). Create and change records only through thebuglogskill (scripts/buglog.py new | status | note | recur | check | list --open), which enforces the standard (so does the pre-commit hook);.wolf/buglog.jsonis a generated index, never edit it. The front-matterstatusis the only source of truth for open/closed (values in.claude/rules/buglog-status.md); after a fix commit runscripts/buglog.py status <id> fixed --commit <sha> - Save/restore field-completeness: any persistence mechanism (WAL fact, scheduler snapshot, checkpoint) must capture every field of the entity it claims to persist — a state that "recovers correctly" while silently missing a field it depends on (e.g.
job.statecorrect butjob.allocslost) is a bug, not an acceptable simplification, unless the omission is explicitly documented as a scope decision (seepersistence.md's "Snapshot Save/Load Field-Completeness" +APPLY_CLEAN/bug-1678 sections). When adding or extending save/restore logic, verify the field round-trips through BOTH the write side and every read/apply seam, and run/xce-audit-invariants(controller dimension 7 / scheduler dimension 4) rather than assuming a passing test suite already proves it —APPLY_CLEAN-style verdicts check row counts and cursor position, not per-field completeness
Key Files
src/tools/xce-build.sh— primary build/test orchestration (Meson-based; seebuild-deployment.md)src/frontend/apiserver/cmd/main.go— server startup, init sequencesrc/frontend/apiserver/router/routers.go— all routes and middleware chainsrc/frontend/apiserver/controllers/rbac_check.go— RBAC loading and enforcementsrc/frontend/apiserver/config/rbac.yaml— role/permission definitionssrc/frontend/apiserver/config/auth.yaml— auth provider selection
Subdirectory Guidelines
src/frontend/— Seesrc/frontend/CLAUDE.mdsrc/controller/— Seesrc/controller/CLAUDE.mdsrc/harness/— Seesrc/harness/CLAUDE.mdsrc/worker/— Seesrc/worker/CLAUDE.mdsrc/scheduler/— Seesrc/scheduler/CLAUDE.mdsrc/lib/— Seesrc/lib/CLAUDE.md
Agentic SDLC and Spec-Driven Development
Kiro-style Spec-Driven Development on an agentic SDLC
Project Context
Paths
- Steering:
.kiro/steering/ - Specs:
.kiro/specs/
Steering vs Specification
Steering (.kiro/steering/) - Guide AI with project-wide rules and context
Specs (.kiro/specs/) - Formalize development process for individual features
Active Specifications
- Check
.kiro/specs/for active specifications - Use
/kiro-spec-status [feature-name]to check progress
Development Guidelines
- Think in English, generate responses in English. All Markdown content written to project files (e.g., requirements.md, design.md, tasks.md, research.md, validation reports) MUST be written in the target language configured for this specification (see spec.json.language).
Minimal Workflow
- Phase 0 (optional):
/kiro-steering,/kiro-steering-custom - Phase 1 (Specification):
/kiro-spec-init "description"— initialize spec scaffold/kiro-spec-quick "description"— fast single-pass spec (requirements + design + tasks, no approval gates)/kiro-spec-batch— generate specs for all features in a roadmap in parallel/kiro-spec-requirements {feature}/kiro-validate-gap {feature}(optional: for existing codebase)/kiro-spec-design {feature} [-y]/kiro-validate-design {feature}(optional: design review)/kiro-spec-tasks {feature} [-y]
- Phase 2 (Implementation):
/kiro-impl {feature} [tasks]/kiro-validate-impl {feature}(optional: after implementation)/kiro-verify-completion {feature}— validate all acceptance criteria are met
- Debugging:
/kiro-debug {feature}— systematic debugging with spec context - Code review:
/kiro-review— review implementation against spec requirements - Progress check:
/kiro-spec-status {feature}(use anytime)
Development Rules
- 3-phase approval workflow: Requirements → Design → Tasks → Implementation
- Human review required each phase; use
-yonly for intentional fast-track - Use
/kiro-spec-quickfor small, well-understood features; full workflow for anything touching HA/persistence/RBAC - Keep steering current and verify alignment with
/kiro-spec-status - Follow the user's instructions precisely, and within that scope act autonomously: gather the necessary context and complete the requested work end-to-end in this run, asking questions only when essential information is missing or the instructions are critically ambiguous.
Steering Configuration
- Load entire
.kiro/steering/as project memory — all.mdfiles are authoritative - Core:
product.md,tech.md,structure.md - Custom:
testing.md,error-handling.md,security.md,ha-async-io.md,api-standards.md,build-deployment.md,config-design.md,persistence.md,resource-accounting.md,job-config-layering.md,roadmap.md - Add new custom files via
/kiro-steering-custom; sync existing via/kiro-steering