Specline canon 2.8.0 Handbook For agents ↗
Reference · Config

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.

# specline.yml
canon: 2.6
tier: 1
deciders: [jonathan]
deputy: null
staleness:            # the staleness windows (durations), per state
  building: 30 days   # frontmatter stale_after is computed from these
  blocked:  14 days
focus_limit:          # decider WIP — the B7 ceiling (per decider)
  building: 3
  active:   6
coupling_ceiling: 50%        # B2 — 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)
review_rounds_before_human: 2  # outer-loop verifier↔implementer bounce budget
models:               # capability tier → real model
  light:    claude-haiku
  standard: claude-sonnet
  frontier: claude-opus
merge_target: main    # (v2.8, optional) where impl PRs merge and graduation lands; absent → repo default branch
KeyValuesWhat it tunes
canonversion stringThe canon version this repo pins. This contract changes first; repo conventions follow.
tier0 | 1 | 2The adoption tier. Specline checks only the rules of the declared tier; tier-2 governance fires only at tier: 2.
deciderslist of namesThe named POs who may ratify and accept.
deputya name | nullWho decides when a decider is unavailable. With no deputy, the agent applies the entry's stated default and parks blocked.
staleness.buildingduration (default 30 days)The window before a building spec is presumed abandoned. stale_after is computed from this (B4).
staleness.blockedduration (default 14 days)The window before a blocked spec is presumed abandoned (B4).
focus_limit.buildingint (default 3)Max specs a decider may have in building at once (B7).
focus_limit.activeint (default 6)Max specs a decider may have in active states (ratified|building|blocked) at once (B7).
coupling_ceiling% (default 50%)B2 — spec.md + transitively forced loads, as a percentage of context_window. Specline warns on breach.
context_windowchars (default 400000)Chars in the weakest in-use model's window — the denominator for the coupling ceiling.
suggest_slicing_pastint (default 6)Acceptance/Behavior count above which Specline nudges to slice, while size: small.
review_rounds_before_humanint (default 2)The outer-loop verifier↔implementer bounce budget before the human gate.
modelstier → model mapBinds each capability tier (light/standard/frontier) to a real model, so specs stay agent-agnostic.
merge_targetbranch name(v2.8, 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 every ratification. Tune the numbers here; the rules are the canon's.