The specline.yml config
A repo's tunables — the numbers and names it calibrates to its own scale — live in specline.yml at the repo root, read deterministically by Specline. It is the source of truth for pins and thresholds. specline.yml tunes the grain, not the methodology: it does not configure rules, schema, or partitions. Absent → Specline falls back to canon defaults.
Configuration and frontmatter use YAML mappings. Known enum fields must be scalar strings; relations accept a string or a list, including annotated slug: rationale entries. Duplicate keys are invalid. Unknown fields, including nested values, are preserved for compatibility.
# specline.yml
canon: 3.1
unattended: false # experimental — Part 3. default false
deciders: [jonathan]
deputy: null
staleness: # the staleness windows (durations), per state — experimental
building: 30 days # frontmatter stale_after is computed from these
blocked: 14 days
focus_limit: # decider WIP — the decider-budget ceiling (per decider) — experimental
building: 3
active: 6
coupling_ceiling: 50% # experimental — spec + forced loads, as % of context_window
context_window: 400000 # chars in the weakest in-use model's window (the coupling denominator)
suggest_slicing_past: 6 # acceptance/Behavior count above which Specline nudges to slice (while size: small) — experimental
review_rounds_before_human: 2 # outer-loop verifier↔implementer bounce budget — experimental
models: # capability tier → real model
light: claude-haiku
standard: claude-sonnet
frontier: claude-opus
merge_target: main # optional; where impl PRs merge and graduation lands; absent → repo default branch| Key | Values | What it tunes |
|---|---|---|
canon | MAJOR.MINOR | The canon version this repo pins. This contract changes first; repo conventions follow. Compared to the tool's canon at MAJOR.MINOR — a patch bump never forces a pin update. |
unattended | boolean (default false) | The one switch for Part 3 (unattended builds) — experimental. Off: Part-3 rules aren't listed or checked, and its keys/states are recognised silently. On: the same tested contract, tagged experimental. upgrade maps a legacy tier: 2 to unattended: true and drops tier: 0 | 1. |
deciders | list of names | The named POs who may approve and accept. |
deputy | a name | null | Who decides when a decider is unavailable. With no deputy, the agent applies the entry's stated default and parks blocked. |
staleness.building | duration (default 30 days) | Experimental. The window before a building spec is presumed abandoned. stale_after is computed from this. |
staleness.blocked | duration (default 14 days) | Experimental. The window before a blocked spec is presumed abandoned. |
focus_limit.building | int (default 3) | Experimental. Max specs a decider may have in building at once. |
focus_limit.active | int (default 6) | Experimental. Max specs a decider may have in active states (building|blocked) at once. |
coupling_ceiling | % (default 50%) | Experimental. spec.md + transitively forced loads, as a percentage of context_window. Specline warns on breach. |
context_window | chars (default 400000) | Chars in the weakest in-use model's window — the denominator for the coupling ceiling. |
suggest_slicing_past | int (default 6) | Experimental. Acceptance/Behavior count above which Specline nudges to slice, while size: small. |
review_rounds_before_human | int (default 2) | Experimental. The outer-loop verifier↔implementer bounce budget before the human gate. |
models | tier → model map | Binds each capability tier (light/standard/frontier) to a real model, so specs stay agent-agnostic. |
merge_target | branch name | Optional. The branch impl PRs merge into and graduation lands on. Repo-level on purpose — a spec doesn't choose its integration branch. Absent → the repo's default branch. |
Per-repo, set once. specline.yml is the repo's calibration — the thresholds and pins every spec is measured against. Contrast it with frontmatter, which is per-spec and set at the decider's go. Tune the numbers here; the rules are the canon's.
Up: handbook — start light. The law: the canon, "Configuration — specline.yml".