Skip to main content

Precedence

개요: 규칙이 충돌할 때 무엇을 우선할지. 각 단계가 뭘 뜻하는지와 실제 충돌 예시.

When rules conflict, prefer higher rows:

Project Local Rules
>
Current Harness Standards
>
Profile
>
Accepted ADR
>
Template
>
General Best Practice

What each level means​

LevelWhat it isWhere it lives
Project Local RulesRules of the repository being worked on: its AGENTS.md, .cursor/rules, lint/format config, PR template, CI checks, existing code stylethe target repo, found by Scout
Current Harness StandardsWhat this archive currently says is the way: coding conventions, Knowledge pages marked status: active, tool rulesdocs/harness/context/, docs/knowledge/
ProfileThe usual asset combo for a kind of stack, including its default verification setdocs/harness/profiles/
Accepted ADRA recorded decision with context, alternatives, consequencesdocs/decisions/
TemplateConcrete reference code (ExampleItem table set and enum apply set)docs/harness/templates/
General Best PracticeWhat the model knows from the wider worldnowhere in this repo

Why this order​

  • Local beats archive because the archive is a default, not a mandate. A project that chose Lombok, a different response wrapper, or physical deletes has reasons; the agent contributing there must match the project, and may propose an archive-style change separately.
  • Standards beat Profile because a Profile is a bundle of pointers; if a pointed-to page was updated, the page wins over the stale summary.
  • ADR beats Template because the ADR says why; a template is one rendering of that why and may lag behind it.
  • Template beats general practice because the template is what the developer actually does. "Best practice" is the fallback when the archive is silent, never a reason to override it.

Conflict examples​

ConflictResolution
Project uses Lombok @Getter/@Setter; template has explicit gettersProject local wins. Write Lombok. Do not "fix" the project.
Project lint enforces 2-space indent; template is 4-spaceProject local wins. Formatter config is a local rule.
Project has no Facade layer; template Controller → Facade → ServiceProject local wins for layering in that repo. Scout reports the mismatch; Curator may later propose an ADR if the pattern recurs.
Template uses ModelMapperUtil; project has another mapperProject local. Use the host mapper with the same map / mapAll calls.
Knowledge page says delete() stays empty until a status column exists; model "knows" hard delete is simplerHarness standard wins over general practice. Do not add repository.delete.
Accepted ADR says Markdown + Git is SoT; someone proposes a CMS for docsADR wins unless a new ADR supersedes it.
Profile lists backend-unit-test as default; project has no test runnerProfile is a default; Tester returns BLOCKED, Master decides. Nobody invents a runner.
Two archive pages disagreeTreat as a bug in the archive. Report to Master; Curator fixes the page. Do not pick silently.

Rules for workers​

  • Implementer (low freedom) applies this table mechanically and reports anything it cannot place.
  • Reviewer cites the level it is judging against ("Project lint config", "coding-conventions §Transactions").
  • Accepted ADRs explain why templates look the way they do; when a template seems odd, read the ADR before changing anything.
  • General best practice is a last resort, not a license to invent personal standards here.